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

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

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

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

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

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

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

Метод draw() объекта BitmapData позволяет записать отображаемые в данный момент пикселы любого экранного объекта в объект BitmapData. Это могут быть пикселы объекта MovieClip, Bitmap или любого другого экранного объекта. Чтобы метод мог draw() записать пикселы в объект 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() можно захватывать пикселные данные текущего кадра видео.

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

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

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

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

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