Для доступа к загруженным данным используйте методы
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
.
|
|
|