Załadowane multimedia jako dane

Flash 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:

  • Podczas renderowania treści lub odtwarzania danych, do których ma zostać przyznany dostęp, należy wywołać metodę Security.allowDomain(), aby przyznać dostęp do danych treści w innych domenach.

  • Na serwerze załadowanego pliku należy dodać plik strategii URL dla załadowanego obrazu, dźwięku lub wideo. Ten plik strategii musi zezwalać na dostęp do domeny pliku SWF, który próbuje wywołać metodę BitmapData.draw() lub SoundMixer.computeSpectrum() w celu wyodrębnienia danych z pliku.

W poniższych sekcjach szczegółowo omówiono zasady dostępu do danych bitmap, dźwięku i wideo.

Dostęp do danych bitmap

Metoda 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:

  • W wypadku obiektu źródłowego innego niż załadowana bitmapa obiekt źródłowy oraz (w wypadku obiektu Sprite lub MovieClip) wszystkie jego obiekty podrzędne muszą pochodzić z tej samej domeny, co obiekt wywołujący metodę draw() lub muszą znajdować się w pliku SWF dostępnym dla pliku wywołującego w wyniku użycia metody Security.allowDomain().

  • W przypadku załadowanej bitmapy obiekt źródłowy musi pochodzić z tej samej domeny, co obiekt wywołujący metodę draw() lub serwer źródłowy tego obiektu musi zawierać plik strategii URL udzielający dostępu domenie wywołującej.

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ękowych

Poniższe elementy interfejsu API środowiska ActionScript 3.0 związane z dźwiękiem są objęte ograniczeniami wynikającymi z zabezpieczeń:

  • Metoda SoundMixer.computeSpectrum() — zawsze dozwolona dla kodu działającego w tym samym obszarze izolowanym, co plik dźwiękowy. Dla kodu działającego w innych obszarach izolowanych sprawdzane są zabezpieczenia.

  • Metoda SoundMixer.computeSpectrum() — zawsze dozwolona dla kodu działającego w tym samym obszarze izolowanym, co plik dźwiękowy. Dla plików z innego obszaru izolowanego sprawdzane są zabezpieczenia.

  • Właściwość id3 obiektu Sound — zawsze dozwolona dla plików SWF, które znajdują się w tym samym obszarze izolowanym, co plik dźwiękowy. Dla kodu działającego w innych obszarach izolowanych sprawdzane są zabezpieczenia.

Z każdym dźwiękiem są skojarzone dwa obszary izolowane — obszar izolowany treści i obszar izolowany właściciela:

  • Domena, z której pochodzi dźwięk, wyznacza obszar izolowany treści, a od niego zależy, czy dane można wyodrębnić z dźwięku za pośrednictwem właściwości id3 i metody SoundMixer.computeSpectrum().

  • Obiekt, który rozpoczął odtwarzanie dźwięku wyznacza obszar izolowany właściciela, a od niego zależy, czy dźwięk można zatrzymać za pomocą metody SoundMixer.stopAll().

Ł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 wideo

Metoda BitmapData.draw() umożliwia przechwycenie danych pikseli bieżącej klatki wideo.

Wyróżnia się dwa rodzaje materiałów wideo:

  • Plik wideo strumieniowany przez RTMP z serwera Flash Media Server

  • Plik wideo pobierany stopniowo, ładowany z pliku FLV lub F4V

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.