Załadowane multimedia jako dane

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Dostęp do wczytanych danych można uzyskać przy użyciu metod BitmapData.draw() , BitmapData.drawWithQuality() i 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 zasad musi zezwalać na dostęp do domeny pliku SWF, który próbuje wywołać metodę BitmapData.draw() , BitmapData.drawWithQuality() lub SoundMixer.computeSpectrum() w celu wyodrębnienia danych z pliku. Metoda drawWithQuality jest dostępna w programie Flash Player 11.3 lub nowszym oraz środowisku AIR 3.3 lub nowszym.

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

Dostęp do danych bitmap

Metody draw() i drawWithQuality() (Flash Player 11.3; AIR 3.3) obiektu BitmapData umożliwiają narysowanie wyświetlanych obecnie pikseli dowolnego obiektu ekranowego w obiekcie BitmapData. Mogą to być piksele obiektu MovieClip, obiektu Bitmap lub dowolnego innego obiektu ekranowego. Aby te metody mogły narysować piksele w obiekcie BitmapData, muszą być spełnione następujące warunki:

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

  • W przypadku wczytanej 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 zasad 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.stopAll() — 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

Metody BitmapData.draw() i BitmapData.drawWithQuality() umożliwiają przechwycenie danych pikseli bieżącej klatki wideo. Metoda drawWithQuality jest dostępna w programie Flash Player 11.3 lub nowszym oraz środowisku AIR 3.3 lub nowszym.

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ć tych metod do wyodrębnienia ze strumieni RTMP grafiki środowiska wykonawczego, 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 publikacja Dokumentacja języka ActionScript po stronie serwera .

W przypadku wywołania metody draw() z wideo progresywnym przekazanym w parametrze source plik wywołujący metodę musi znajdować się w tym samym obszarze izolowanym co plik FLV lub serwer pliku FLV musi zawierać plik zasad 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 .