Załadowane multimedia jako daneFlash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje Aby uzyskać dostęp do załadowanych danych, należy użyć metod BitmapData.draw() oraz SoundMixer.computeSpectrum(). Zgodnie z domyślnymi ustawieniami użytkownik nie może uzyskać dostępu do danych pikseli lub audio ani do obiektów graficznych lub audio renderowanych bądź też odtwarzanych przez załadowane dane multimedialne w innym obszarze izolowanym. Jednakże możliwe jest użycie następujących metod w celu przyznania uprawnień dostępu do takich danych poza granicami obszaru izolowanego:
W poniższych sekcjach szczegółowo omówiono zasady dostępu do danych bitmap, dźwięku i wideo. Dostęp do danych bitmapMetoda draw() obiektu BitmapData umożliwia narysowanie wyświetlanych obecnie pikseli dowolnego obiektu wyświetlanego w obiekcie BitmapData. Mogą to być piksele obiektu MovieClip, obiektu Bitmap lub dowolnego innego obiektu wyświetlanego. Aby metoda draw() narysowała piksele w obiekcie BitmapData, muszą być spełnione następujące warunki:
Jeśli te warunki nie są spełnione, generowany jest wyjątek SecurityError. Ładując obraz za pomocą metody load() klasy Loader, można określić parametr context, którym należy uczynić obiekt LoaderContext. Jeśli dla właściwości checkPolicyFile obiektu LoaderContext zostanie przypisana wartość true, program Flash Player sprawdzi, czy istnieje plik strategii URL na serwerze, z którego ładowany jest obraz. Jeśli istnieje plik strategii i zezwala on na dostęp domenie ładującego pliku SWF, to plik będzie miał dostęp do danych w obiekcie Bitmap; w przeciwnym razie dostęp nie będzie możliwy. Można również określić wartość właściwości checkPolicyFile w obrazie ładowanym za pośrednictwem znacznika <img> w polu tekstowym. Szczegółowe informacje zawiera sekcja Ładowanie plików SWF i obrazów za pomocą znaczników <img> w polu tekstowym. Dostęp do danych dźwiękowychPoniższe elementy interfejsu API środowiska ActionScript 3.0 związane z dźwiękiem są objęte ograniczeniami wynikającymi z zabezpieczeń:
Z każdym dźwiękiem są skojarzone dwa obszary izolowane — obszar izolowany treści i obszar izolowany właściciela:
Ładując dźwięk za pomocą metody load() klasy Sound, można określić parametr context, którym należy uczynić obiekt SoundLoaderContext. Jeśli dla właściwości checkPolicyFile obiektu SoundLoaderContext zostanie przypisana wartość true, środowisko wykonawcze sprawdzi istnienie pliku reguł URL na serwerze, z którego ładowany jest dźwięk. Jeśli plik strategii istnieje i umożliwia dostęp z domeny ładującego kodu, wówczas kod może uzyskiwać dostęp do właściwości id obiektu Sound; w przeciwnym wypadku nie może. Ponadto, ustawiając właściwość checkPolicyFile, można zezwolić na stosowanie metody SoundMixer.computeSpectrum() do dźwięków załadowanych. Metoda SoundMixer.areSoundsInaccessible() pozwala sprawdzić, czy wywołanie metody SoundMixer.stopAll() nie spowoduje zatrzymania wszystkich dźwięków z uwagi na niedostępność obszaru izolowanego niektórych dźwięków dla pliku wywołującego. Wywołanie metody SoundMixer.stopAll() zatrzymuje te dźwięki, dla których obszar izolowany właściciela jest identyczny z obszarem izolowany pliku wywołującego metodę stopAll(). Powoduje także zatrzymanie dźwięków, których odtwarzanie zostało zainicjowane przez pliki SWF, które wywołały metodę Security.allowDomain() w celu zezwolenia na dostęp domenie pliku SWF wywołującego metodę stopAll(). Wszystkie pozostałe dźwięki nie są zatrzymywane, a obecność takich niezatrzymanych dźwięków można stwierdzić za pomocą metody SoundMixer.areSoundsInaccessible(). Wywołanie metody computeSpectrum() jest możliwe tylko wówczas, gdy każdy odtwarzany dźwięk pochodzi z tego samego obszaru izolowanego co obiekt wywołujący metodę lub ze źródła, które udzieliło uprawnień obszarowi izolowanemu pliku wywołującego. Jeśli te warunki nie są spełnione, generowany jest wyjątek SecurityError. W przypadku dźwięków osadzonych załadowanych z biblioteki w pliku SWF uprawnień udziela się, wywołując metodę Security.allowDomain() w załadowanym pliku SWF. W przypadku dźwięków ze źródeł innych niż pliki SWF (pochodzących z wczytanych plików MP3 lub plików wideo) zezwolenie na dostęp do danych we wczytanej zawartości multimedialnej jest udzielane za pomocą pliku zasad URL na serwerze źródłowym. Więcej informacji zawiera sekcja Mechanizmy nadzoru programistów oraz Internetowe elementy sterujące (pliki zasad). Aby uzyskać dostęp do danych dźwiękowych ze strumieni RTMP, należy przyznać dostęp do serwera. Aby przyznać dostęp do określonych katalogów na serwerze Flash Media Server, należy użyć właściwości Client.audioSampleAccess serwerowego języka ActionScript. Więcej informacji zawiera Skorowidz serwerowego języka ActionScript. Uzyskiwanie dostępu do danych wideoMetoda BitmapData.draw() umożliwia przechwycenie danych pikseli bieżącej klatki wideo. Wyróżnia się dwa rodzaje materiałów wideo:
Aby można było użyć metody BitmapData.draw() do wyodrębnienia ze strumieni RTMP grafiki przeznaczonej do wykorzystania w czasie wykonywania, należy przyznać dostęp do serwera. Aby przyznać dostęp do określonych katalogów na serwerze Flash Media Server, należy użyć właściwości Client.videoSampleAccess serwerowego języka ActionScript. Więcej informacji zawiera Skorowidz serwerowego języka ActionScript. W wypadku wywołania metody BitmapData.draw() z obiektem wideo pobieranym stopniowo przekazanym w parametrze source plik wywołujący metodę BitmapData.draw() musi znajdować się w tym samym obszarze izolowanym co plik FLV, lub serwer pliku FLV musi zawierać plik strategii zezwalający na dostęp domenie wywołującego pliku SWF. Można zażądać pobierania pliku strategii — w tym celu należy ustawić właściwość checkPolicyFile obiektu NetStream na true. |
|