Получение данных загруженного мультимедийного содержимого

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

Для доступа к загруженным данным используйте методы BitmapData.draw() , BitmapData.drawWithQuality() и SoundMixer.computeSpectrum() . По умолчанию нельзя получать пиксельные данные или аудиоданные из объектов графики или звука, которые визуализируются или воспроизводятся мультимедийным содержимым, загруженным в другую изолированную программную среду. Однако можно использовать следующие методы для предоставления прав доступа к этим данным в пределах изолированной программной среды:

  • В содержимом, которое выполняет визуализацию или воспроизведение данных, к которым осуществляется доступ, вызовите метод Security.allowDomain() для предоставления прав доступа к данным для содержимого в другом домене.

  • поместите файл политики URL-адресов на сервер загруженного изображения, аудио или видео. Этот файл политики должен предоставлять доступ домену SWF-файла, который пытается вызвать метод BitmapData.draw() , BitmapData.drawWithQuality() или SoundMixer.computeSpectrum() для получения данных из загруженного файла. Метод drawWithQuality доступен в средах Flash Player 11.3 и AIR 3.3 и более поздних версий.

В следующих разделах подробно описывается получение данных растрового изображения, аудио и видео.

Получение данных растрового изображения

Методы draw() и drawWithQuality() (Flash Player 11.3; AIR 3.3) объекта BitmapData позволяют записать отображаемые в данный момент пикселы любого экранного объекта в объект BitmapData. Это могут быть пикселы объекта MovieClip, Bitmap или любого другого экранного объекта. Чтобы эти методы могли записать пикселы в объект BitmapData, должны выполняться следующие условия.

  • Если исходный объект не является загруженным растровым изображением, то исходный объект и все его дочерние объекты (если это объект Sprite или MovieClip) должны находиться в том же домене, что и объект, вызывающий метод draw, либо они должны входить в состав SWF-файла, доступ к которому разрешен с помощью метода Security.allowDomain() .

  • Если исходным объектом является загруженное растровое изображение, он должен находиться в том же домене, что и объект, вызывающий метод draw, либо на исходном сервере должен быть файл политики URL-адресов, предоставляющий доступ вызывающему домену.

Если эти условия не выполняются, выдается исключение SecurityError.

При загрузке изображения с помощью метода load() класса Loader можно задать параметр context , представленный объектом LoaderContext. Если задать свойству checkPolicyFile объекта LoaderContext значение true , проигрыватель Flash Player проверяет наличие файла политики URL-адресов на сервере, с которого загружается изображение. Если имеется файл политики, разрешающий домен загружающего SWF-файла, тогда этот файл получает доступ к данным объекта Bitmap; в противном случае — не получает.

Также можно определить свойство checkPolicyFile в изображении, загруженном с помощью тега <img> в текстовом поле. Дополнительные сведения см. в разделе « Загрузка SWF-файлов и изображений путем добавления тега <img> в текстовое поле ».

Получение аудиоданных

На следующие API-интерфейсы ActionScript 3.0, связанные со звуком, накладываются ограничения в целях безопасности.

  • Метод SoundMixer.computeSpectrum() : всегда разрешен для кода, выполняемого в той же изолированной программной среде, что и звуковой файл. Для кода из других изолированных программных сред выполняется проверка системы безопасности.

  • Метод SoundMixer.stopAll() : всегда разрешен для кода, выполняемого в той же изолированной программной среде, что и звуковой файл. Для файлов из других изолированных программных сред выполняется проверка системы безопасности.

  • Свойство id3 объекта Sound всегда разрешено для SWF-файлов, находящихся в той же изолированной программной среде, что и звуковой файл. Для кода из других изолированных программных сред выполняется проверка системы безопасности.

С каждым звуком связаны две изолированные программные среды: среда содержимого и среда владельца.

  • Исходный домен звука определяет изолированную программную среду содержимого, а она определяет, можно ли получить данные звука через его свойство id3 и вызов метода SoundMixer.computeSpectrum() .

  • Объект, запустивший воспроизведение звука, определяет изолированную программную среду владельца, а она определяет, можно ли остановить воспроизведение звука с помощью метода SoundMixer.stopAll() .

При загрузке звука с помощью метода load() класса Sound можно задать параметр context , представленный объектом SoundLoaderContext. Если задать свойству checkPolicyFile объекта SoundLoaderContext значение true , среда выполнения проверяет наличие файла политики URL-адресов на сервере, с которого загружается звук. Если имеется файл политики, разрешающий домен загружающего кода, тогда этот код получает доступ к свойству id объекта Sound; в противном случае — не получает. Кроме того, можно задать свойство checkPolicyFile , чтобы сделать возможным использование метода SoundMixer.computeSpectrum() для загруженных звуков.

С помощью метода SoundMixer.areSoundsInaccessible() можно выяснить, получится остановить все звуки с помощью метода SoundMixer.stopAll() или не получится, так как изолированная программная среда одного или нескольких владельцев звуков является недоступной для вызывающего файла.

Вызов метода SoundMixer.stopAll() останавливает те звуки, владельцы которых находятся в одной изолированной программной среде с файлом, вызывающим метод stopAll() . Он также останавливает те звуки, воспроизведение которых было запущено SWF-файлами, вызвавшими метод Security.allowDomain() для предоставления доступа домену SWF-файла, вызывающего stopAll() . Другие звуки не останавливаются, их присутствие можно определить, вызвав метод SoundMixer.areSoundsInaccessible() .

Для вызова метода computeSpectrum() требуется, чтобы каждый воспроизводимый звук находился либо в одной изолированной программной среде с объектом, вызывающим метод, либо в исходном домене, который предоставил доступ для домена вызывающего файла. В противном случае выдается исключение SecurityError. Чтобы получить доступ к звукам, загруженным из встроенных объектов в библиотеке SWF-файла, нужно вызвать метод Security.allowDomain() в загруженном SWF-файле. Чтобы получить доступ к данным звуков, загруженных не из SWF-файлов (например, из mp3-файлов или видеофайлов), необходимо поместить файл политики URL-адресов на исходном сервере.

Дополнительные сведения см. в разделах « Элементы управления автора (разработчика) » и « Элементы управления веб-сайта (файлы политики) ».

Чтобы получить доступ к звуковым данным из потоков RTMP, необходимо разрешить доступ на сервере. Используйте свойство Client.audioSampleAccess серверного языка ActionScript для разрешения доступа к определенным каталогам на сервере Flash Media Server. Дополнительные сведения см. в справочнике по серверному языку ActionScript .

Получение видеоданных

С помощью метода BitmapData.draw() или BitmapData.drawWithQuality() можно захватывать пикселные данные текущего кадра видео. (Метод drawWithQuality доступен в средах Flash Player 11.3 и AIR 3.3 и более поздних версий.)

Видеосодержимое бывает двух типов:

  • Видео, передаваемое по протоколу RTMP с сервера Flash Media Server

  • Последовательное видео, загружаемое из FLV- или F4V-файла

Чтобы использовать методы draw для извлечения графики времени выполнения из потоков RTMP, необходимо разрешить доступ на сервере. Используйте свойство Client.videoSampleAccess серверного языка ActionScript для разрешения доступа к определенным каталогам на сервере Flash Media Server. Дополнительные сведения см. в справочнике по серверному языку ActionScript .

Когда вызывается метод draw, для которого в качестве параметра source передано последовательное видео, файл, вызывающий метод, должен находиться в одной изолированной программной среде с FLV-файлом, либо на сервере FLV-файла должен быть файл политики, предоставляющий доступ домену вызывающего SWF-файла. Чтобы запросить загрузку файла политики, нужно задать свойству checkPolicyFile объекта NetStream значение true .