flash.mediaID3Info Класс ID3Info содержит свойства, отражающие метаданные ID3.Object Класс ID3Info содержит свойства, отражающие метаданные ID3. Для получения дополнительных метаданных для МР3-файлов можно обратиться к свойству id3 класса Sound, например, mySound.id3.TIME. Дополнительные сведения см. в описании Sound.id3 и определениях тегов ID3 на странице http://www.id3.org. Sound.id3album Название альбома. Соответствует тегу TALB в ID3 2.0.String Название альбома. Соответствует тегу TALB в ID3 2.0. artist Имя исполнителя. Соответствует тегу TPE1 в ID3 2.0.String Имя исполнителя. Соответствует тегу TPE1 в ID3 2.0. comment Комментарий о записи. Соответствует тегу COMM в ID3 2.0.String Комментарий о записи. Соответствует тегу COMM в ID3 2.0. genre Жанр композиции. Соответствует тегу TCON в ID3 2.0.String Жанр композиции. Соответствует тегу TCON в ID3 2.0. songName Название композиции. Соответствует тегу TIT2 в ID3 2.0.String Название композиции. Соответствует тегу TIT2 в ID3 2.0. track Номер дорожки. Соответствует тегу TRCK в ID3 2.0.String Номер дорожки. Соответствует тегу TRCK в ID3 2.0. year Год записи. Соответствует тегу TYER в ID3 2.0.String Год записи. Соответствует тегу TYER в ID3 2.0. MediaType Класс MediaType перечисляет основные типы мультимедийного содержимого, которые могут быть возвращены камерой.Object Класс MediaType перечисляет основные типы мультимедийного содержимого, которые могут быть возвращены камерой.

Используйте константы, заданные в этом классе, в качестве входных значений метода launch() класса CameraUI. Значения MediaType также используются в свойстве mediaType класса MediaPromise.

CameraUI.launch()MediaPromise.mediaTypeIMAGE Одно изображение.imageString Одно изображение. VIDEO Видео.videoString Видео.
scanHardware Предписывает выполнить принудительное повторное сканирование микрофонов и камер системы. Предписывает выполнить принудительное повторное сканирование микрофонов и камер системы. Camera Используйте класс Camera для захвата видео с камеры клиентской системы.flash.events:EventDispatcher Используйте класс Camera для захвата видео с камеры клиентской системы. Используйте класс Video для локального отслеживания видеоданных. Используйте классы NetConnection и NetStream для передачи видеоданных на сервер Flash Media Server. Flash Media Server может передавать видео другим серверам и транслировать его на другие клиентские компьютеры, на которых работает Flash Player.

Экземпляр Camera захватывает видео в альбомной ориентации. На устройствах, поддерживающих изменение ориентации экрана, например на мобильных телефонах, объект Video, подключенный к камере, будет показывать видео только в альбомной ориентации в вертикальном режиме. Поэтому в мобильных программах при отображении видео должна использоваться альбомная ориентация и должен быть отключен автоматический поворот.

В AIR 2.6 автофокусировка автоматически включена на мобильных устройствах с камерой с возможностью автофокусировки. Если камерой не поддерживается непрерывная автофокусировка (а во многих камерах мобильных устройств так и есть), камера фокусируется, когда объект Camera подключается к видеопотоку, а также при вызове метода setMode (). На настольных компьютерах поведение автофокуса зависит от драйвера и настроек камеры.

В приложении AIR на Android и в ОС iOS камера не захватывает видео до тех пор, пока приложение AIR не станет активным и не будет перемещено на передний план. Кроме того, потоковые подключения могут быть потеряны при перемещении приложения на задний план. В ОС iOS видео, передаваемое камерой, не может быть показано, если приложение использует режим визуализации с помощью графического процессора. При этом камера может передавать видео в потоковом режиме на сервер.

Поддержка в мобильных браузерах: этот класс не поддерживается в мобильных браузерах.

Поддержка в профилях AIR: эта функция поддерживается в компьютерных операционных системах, но не на всех мобильных устройствах. Он не поддерживается в среде AIR для телевизионных устройств. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

Используйте свойство Camera.isSupported, чтобы проверить наличие поддержки в среде выполнения. Обратите внимание, что для в среде AIR для телевизионных устройств Camera.isSupported имеет значение true, но Camera.getCamera() всегда возвращает null.

Сведения о записи звука см. в описании класса Microphone.

Важно! Проигрыватель Flash Player показывает диалоговое окно «Конфиденциальность», в котором пользователь может предоставить или запретить доступ к камере. Убедитесь в том, что размеры окна приложения составляют не менее 215 х 138 пикселей. Это минимальный размер, необходимый для отображения диалогового окна.

Чтобы создать объект Camera или сослаться на него, используйте метод getCamera().

В следующем примере показывается изображение с камеры после подтверждения сообщения о безопасности. Настройка рабочей области не допускает масштабирования, он выровнен по верхнему левому углу окна проигрывателя. Событие activity отправляется при запуске и после окончания (если это применимо) сеанса методу activityHandler(), который печатает информацию о событии.

Примечание. Для правильной работы примера к компьютеру должна быть подключена камера.

package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Camera; import flash.media.Video; public class CameraExample extends Sprite { private var video:Video; public function CameraExample() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var camera:Camera = Camera.getCamera(); if (camera != null) { camera.addEventListener(ActivityEvent.ACTIVITY, activityHandler); video = new Video(camera.width * 2, camera.height * 2); video.attachCamera(camera); addChild(video); } else { trace("You need a camera."); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } } }
flash.media.MicrophoneКристоф Конрац (Cristophe Coenraets): Видеочат для платформы Android в 30 строках кодаМикаэль Шез (Michael Chaize): Android, AIR и камераstatus Отправляется, когда камера сообщает о своем состоянии.flash.events.StatusEvent.STATUSflash.events.StatusEvent Отправляется, когда камера сообщает о своем состоянии. Прежде чем получить доступ к камере, Flash Player отображает диалоговое окно с сообщением о конфиденциальности, чтобы пользователь мог разрешить или запретить доступ к своей камере. Если свойство code имеет значение Camera.Muted, пользователь отказался предоставить SWF-файлу доступ к камере. Если свойство code имеет значениеCamera.Unmuted, пользователь предоставил SWF-файлу доступ к камере. Camera.getCamera()activity Отправляется, когда камера начинает или заканчивает сеанс.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Отправляется, когда камера начинает или заканчивает сеанс. Вызовите метод Camera.setMotionLevel(), чтобы задать уровень движения, необходимого для отправки события activity со свойством activating в значенииtrue, или время без активности, которое должно пройти перед отправкой события activity со свойством activating в значении false. getCamera Возвращает ссылку на объект Camera для записи видео.Если не задан параметр name, этот метод возвращает ссылку на камеру по умолчанию или, если она используется другим приложением, первую доступную камеру. (Если установлено несколько камер, пользователь может указать камеру по умолчанию на панели настроек камеры в проигрывателе Flash Player.) Если нет доступных или установленных камер, метод возвращает значение null. flash.media:CameranameStringnullЗадает, какую камеру использовать в соответствии с данными массива, возвращенного свойством names. Для большинства приложений можно получить камеру по умолчанию, опустив этот параметр. Чтобы задать значение для этого параметра, используйте строковое представление позиции индекса от нуля в массиве Camera.names. Например, чтобы задать третью камеру в массиве, укажитеCamera.getCamera("2"). Возвращает ссылку на объект Camera для записи видео. Для начала записи видео необходимо присоединить объект Camera к объекту Video (см. описание Video.attachCamera() ). Для передачи видео на сервер Flash Media Server вызовите метод NetStream.attachCamera(), чтобы присоединить объект Camera к объекту NetStream.

Повторные вызовы метода getCamera() ссылаются на тот же драйвер камеры. Таким образом, если код содержит подобные значения: firstCam:Camera = getCamera() и secondCam:Camera = getCamera(), то и firstCam и secondCam ссылаются на одну и ту же камеру, которая используется по умолчанию.

На устройствах с ОС iOS с камерой спереди и сзади одновременно видео можно захватывать только с одно из камер. На устройствах Android имеется доступ только к задней камере.

Как правило, не следует передавать значение для параметра name. Просто используйте метод getCamera(), который вернет ссылку на камеру по умолчанию. На панели настроек камеры (о ней будет говориться далее) пользователь может задать камеру, используемую по умолчанию.

Нельзя использовать ActionScript для задания параметра «Разрешить или запретить доступ» для использования камеры, однако можно отобразить диалоговое окно параметром камеры проигрывателя Adobe Flash Player, где пользователь может настроить разрешение для камеры. Когда SWF-файл, использующий метод attachCamera(), пытается присоединить камеру, возвращенную методом getCamera() к объекту Video или NetStream, проигрыватель Flash Player отображает диалоговое окно, в котором пользователь может предоставить или запретить доступ к камере. (Убедитесь в том, что размеры окна приложения составляют не менее 215 х 138 пикселей. Это минимальный размер, необходимый проигрывателю Flash Player для отображения диалогового окна.) Когда пользователь отвечает на запрос диалогового окна параметров камеры, проигрыватель Flash Player возвращает объект Info в событии status с ответом пользователя: Camera.muted говорит о том, что пользователь запретил доступ к камере; Camera.Unmuted указывает на то, что он предоставил доступ. Для определения, предоставил или запретил пользователь доступ к камере, не обрабатывая событиеstatus, используйте свойство muted.

В Flash Player пользователь может задать постоянные параметры конфиденциальности для определенного домена: во время воспроизведения SWF-файла нужно щелкнуть правой кнопкой (Windows и Linux) мыши или нажать клавишу Control и щелкнуть мышью (Macintosh), выбрать «Параметры», открыть диалоговое окно «Конфиденциальность» и выбрать «Запомнить». Если пользователь выберет «Запомнить», проигрыватель Flash Player больше не будет спрашивать у него разрешения на доступ к камере для SWF-файлов из этого домена.

Примечание. Метод attachCamera() не будет вызывать диалоговое окно «Разрешить или запретить доступ к камере», если пользователь запретил доступ, выбрав «Запомнить» в окне настроек проигрывателя Flash Player. В этом случае можно попросить пользователя изменить настройки доступа, отобразив панель конфиденциальности Flash Player с помощью метода Security.showSettings(SecurityPanel.PRIVACY).

Если getCamera() возвращает значение null, это значит, что камера используется другим приложением или что в системе не установлены камеры. Определить, установлены ли камеры, можно с помощью свойства names.length. Для отображения панели параметров камеры в Flash Player, с помощью которой пользователь может выбрать камеру, на которую будет ссылаться метод getCamera(), используйте Security.showSettings(SecurityPanel.CAMERA).

На сканирование аппаратных средств для камер требуется время. Когда среда выполнения находит хотя бы одну камеру, он больше никогда не сканирует аппаратные средства для данного экземпляра проигрывателя. Однако если среда выполнения не найдет камер, сканирование будет повторяться при каждом вызове метода getCamera. Это удобно, если камера подсоединена, но выключена. Если в SWF-файле предусмотрена кнопка «Повторить попытку», которая вызывает getCamera, проигрыватель Flash Player сможет найти камеру без повторного запуска SWF-файла.

В следующем примере после того, как пользователь разрешает доступ к камере, она используется для записи видеоизображений. Также отображается информация о видеопотоке, такая как текущая частота кадров.

Метод Camera.getCamera() возвращает ссылку на объект Camera или возвращает нуль, если камера недоступна или не установлена. Оператор if проверяет, обнаружена ли камера и предоставил ли пользователь доступ к ней. Если пользователь запрещает доступ, свойство muted получает значение true.

При вызове метода attachCamera() обычно появляется диалоговое окно с запросом доступа к камере для проигрывателя Flash Player. Однако, если пользователь запретил доступ и выбрал параметр Remember, диалоговое окно не появляется и ничего не отображается. Чтобы обеспечить пользователю возможность предоставить доступ к камере, текстовое поле myTextField дает пользователю указание щелкнуть текстовое поле, чтобы открыть диалоговое окно параметров проигрывателя Flash Player.

Метод clickHandler() вызывает Security.showSettings(), отображающий панель PRIVACY диалогового окна настроек. Если пользователь предоставляет доступ, отправляется событие StatusEvent.STATUS, свойствоcode которого получает значение Camera.Unmuted. (Свойство mute объекта Camera также имеет значение false.)

Метод statusHandler(), добавленный для прослушивания изменения состояния пользовательских настроек, вызывает метод connectCamera(), если пользователь предоставляет доступ. Метод connectCamera() создает экземпляр объекта Video с шириной и высотой записываемого потока. Для отображения видео, записываемого с камеры, ссылка на видеопоток добавляется к объекту Video, который в свою очередь добавляется в список отображения.

Также запускается объект Timer. Каждую секунду отправляется событие timer объекта Timer, и вызывается метод timerHandler(). Метод timerHandler() отображается и обновляет ряд свойств объекта Camera.

Примечание. В этом примере изменяется только свойство currentFPS.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.StatusEvent; import flash.events.MouseEvent; import flash.system.SecurityPanel; import flash.system.Security; public class Camera_getCameraExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_getCameraExample() { myTextField = new TextField(); myTextField.x = 10; myTextField.y = 10; myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; if (Camera.isSupported) { cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; } else if (cam.muted) { myTextField.text = "To enable the use of the camera,\n" + "please click on this text field.\n" + "When the Flash Player Settings dialog appears,\n" + "make sure to select the Allow radio button\n" + "to grant access to your camera."; myTextField.addEventListener(MouseEvent.CLICK, clickHandler); }else { myTextField.text = "Connecting"; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); }else { myTextField.text = "The Camera class is not supported on this device."; } } private function clickHandler(e:MouseEvent):void { Security.showSettings(SecurityPanel.PRIVACY); cam.addEventListener(StatusEvent.STATUS, statusHandler); myTextField.removeEventListener(MouseEvent.CLICK, clickHandler); } private function statusHandler(event:StatusEvent):void { if (event.code == "Camera.Unmuted") { connectCamera(); cam.removeEventListener(StatusEvent.STATUS, statusHandler); } } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); t.start(); } private function timerHandler(event:TimerEvent):void { myTextField.y = cam.height + 20; myTextField.text = ""; myTextField.appendText("bandwidth: " + cam.bandwidth + "\n"); myTextField.appendText("currentFPS: " + Math.round(cam.currentFPS) + "\n"); myTextField.appendText("fps: " + cam.fps + "\n"); myTextField.appendText("keyFrameInterval: " + cam.keyFrameInterval + "\n"); } } }
indexmutednamessetMode()statusVideo.attachCamera()statusflash.events:StatusEventОтправляется, когда камера сообщает о своем состоянии. Прежде чем получить доступ к камере, Flash Player отображает диалоговое окно с сообщением о конфиденциальности, чтобы пользователь мог разрешить или запретить доступ к своей камере. Если свойство code имеет значение Camera.Muted, пользователь отказался предоставить SWF-файлу доступ к камере. Если свойство code имеет значениеCamera.Unmuted, пользователь предоставил SWF-файлу доступ к камере. Отправляется, когда камера сообщает о своем состоянии.
setKeyFrameInterval Определяет, какие кадры видео передаются целиком (так называемые ключевые кадры), а не подвергаются интерполяции по алгоритму сжатия видео.keyFrameIntervalintЗначение, определяющее, какие кадры видео передаются целиком (так называемые ключевые кадры), а не подвергаются интерполяции по алгоритму сжатия видео. Значение 1 указывает на то, что каждый кадр является ключевым, значение 3 — на то, что каждый третий файл является ключевым и т.д. Допускаются значения от 1 до 48. Определяет, какие кадры видео передаются целиком (так называемые ключевые кадры), а не подвергаются интерполяции по алгоритму сжатия видео. Этот метод применим, только если видео передается через сервер Flash Media Server.

Алгоритм сжатия видеоданных проигрывателя Flash Video сжимает видео, передавая только то, что изменилось по сравнению с последним кадром. Такие порции называются интерполированными кадрами. Кадры видео могут подвергаться интерполяции в соответствии с содержимым предыдущего кадра. Однако ключевой кадр видео передается полностью, без интерполяции по предыдущим кадрам.

При определении, какое значение задать для параметра keyFrameInterval, необходимо учитывать использование полосы пропускания и доступность воспроизведения видео. Например, если задать для keyFrameInterval более высокое значение (то есть, отправлять ключевые кадры реже), уменьшится использование полосы пропускания. Однако при этом может требоваться больше времени на перемещения точки воспроизведения в требуемое положение видео, так как перед возобновлением воспроизведения необходимо выполнить интерполяцию большего числа предшествующих кадров.

И наоборот, если задать для keyFrameInterval более низкое значение (отправлять ключевые кадры чаще), то использование полосы пропускания увеличивается, так как чаще передаются полные кадры видео, однако при этом может сократиться время, необходимое на поиск требуемого кадра в видеозаписи.

keyFrameInterval
setLoopback Определяет, должен ли использоваться сжатый видеопоток для локального представления камеры.compressBooleanfalseОпределяет, должен использоваться сжатый (true) или несжатый видеопоток (false) для локального представления камеры. Определяет, должен ли использоваться сжатый видеопоток для локального представления камеры. Этот метод применим, только если видео передается с помощью сервера Flash Media Server. Если задать свойству compress значение true, можно увидеть, как именно видео будет отображаться пользователям, просматривающим его в режиме реального времени.

Хотя сжатый поток удобен для тестирования, например для предварительного просмотра настроек качества видеопотока, он означает значительные затраты на обработку, так как локальный вид не просто сжимается: он сжимается, редактируется для передачи, как при реальном подключении, а затем распаковывается для локального просмотра.

Чтобы задать уровень сжатия для использования вместе со свойством compress в значении true, используйте метод Camera.setQuality().

setQuality()
setMode Задает для камеры собственный режим записи, наилучшим образом удовлетворяющий заданным требованиям.widthintТребуемая ширина записи в пикселях. Значением по умолчанию является 160. heightintТребуемая высота записи в пикселях. Значением по умолчанию является 120. fpsNumberТребуемая частота, с которой камера должна записывать данные (в кадрах в секунду). Значение по умолчанию равно 15. favorAreaBooleantrueОпределяет, должны изменяться настройки ширины, высоты и частоты кадров, если собственный режим камеры не соответствует заданным требованиям. Значение по умолчанию — true. Это значит, что предпочтение отдается сохранению размеров записи. При использовании этого параметра выбирается режим, наиболее близкий к значениям width и height даже если это негативно отражается на производительности из-за сокращения частоты кадров. Для увеличения частоты кадров за счет настроек высоты и ширины камеры передайте значение false для параметра favorArea. Задает для камеры собственный режим записи, наилучшим образом удовлетворяющий заданным требованиям. Если у камеры нет собственного режима, соответствующего всем переданным параметрам, проигрыватель Flash Player выбирает режим записи, наиболее близкий к запрашиваемому режиму. При такой манипуляции изображение может обрезаться, а кадры — пропускаться.

По умолчанию Flash Player при необходимости пропускает кадры для сохранения размера изображения. Чтобы сократить число пропускаемых кадров, даже если это делается для уменьшения размера изображения, передайте значение false для параметра favorArea.

При выборе собственного режима проигрыватель Flash Player пытается сохранить требуемое соотношение сторон, если это возможно. Например, если передается команда myCam.setMode(400, 400, 30), а максимально доступные размеры камеры — 320 и 288, Flash Player задает и ширине и высоте значение 288. Задавая свойствам одинаковые значения, проигрыватель сохраняет требуемое соотношение сторон 1:1.

Для определения значений, присвоенных этим свойствам после того, как проигрыватель Flash Player выберет режим, максимально соответствующий требуемым значениям, используйте свойства width, height и fps.

Если используется сервер Flash Media Server, можно также снимать отдельные кадры или делать покадровую съемку. Дополнительные сведения см. в описании метода NetStream.attachCamera().

В следующем примере, когда пользователь щелкает по монтажному столу, размер видео изменяется, и скорость записи (в кадрах в секунду) получает новое значение.

Рабочая область не масштабируется. Метод Camera.getCamera() возвращает ссылку на объект Camera или возвращает нуль, если камера недоступна или не установлена. Если камера существует, вызывается метод connectCamera(). Метод connectCamera() создает экземпляр объекта Video. Для отображения видео, записываемого с камеры, ссылка на видеопоток добавляется к объекту Video, который в свою очередь добавляется в список отображения. Создается прослушиватель для события MouseEvent.CLICK. Когда пользователь щелкает по рабочей области, запускается метод clickHandler(). Метод проверяет ширину записываемого видео и задает ширину, высоту и требуемую частоту кадров для режима камеры. Чтобы эти параметры вступили в силу, объект Video необходимо удалить и создавать заново. Ширина и высота видео также должны соответствовать ширине и высоте объекта Camera.

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.events.MouseEvent; import flash.display.StageScaleMode; public class Camera_setModeExample extends Sprite { private var cam:Camera; private var vid:Video; public function Camera_setModeExample() { stage.scaleMode = StageScaleMode.NO_SCALE; cam = Camera.getCamera(); if (!cam) { trace("No camera is installed."); }else { connectCamera(); } } private function connectCamera():void { vid = new Video(); vid.width = cam.width; vid.height = cam.height; vid.attachCamera(cam); addChild(vid); stage.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(e:MouseEvent):void { switch (cam.width) { case 160: cam.setMode(320, 240, 10); break; case 320: cam.setMode(640, 480, 5); break; default: cam.setMode(160, 120, 15); break; } removeChild(vid); connectCamera(); } } }
fpsheightwidthflash.net.NetStream.attachCamera()
setMotionLevel Задает количество движения, необходимое для отправки события activity.motionLevelintЗадает количество движения, необходимое для передачи события activity. Диапазон допустимых значений — от 0 до 100. Значением по умолчанию является 50. timeoutint2000Задает, сколько миллисекунд должно пройти без активности, прежде чем проигрыватель Flash Player определит, что активность прекратилась, и отправит событие activity. Значение по умолчанию 2000 миллисекунд (две секунды). Задает количество движения, необходимое для отправки события activity. Дополнительно задает число миллисекунд, которое должно пройти без активности, прежде чем проигрыватель Flash Player зарегистрирует остановку движения и отправит событие.

Примечание. Видео может отображаться независимо от значения параметра motionLevel. Этот параметр определяет только то, когда и при каких обстоятельствах отправляется событие, а не то, записывается или воспроизводится видео на самом деле.

Чтобы камера совсем не улавливала движение, передайте значение 100 для motionLevel; в этом случае событие activity никогда не отправляется. (Скорее всего, это значение будет использоваться только для тестирования. Например, для временного отключения обработчиков, которые обычно запускаются при отправке события.)

Определить количество движения, определяемого камерой в настоящий момент можно с помощью свойства activityLevel. Значения чувствительности к движению прямо соответствуют значениям активности. При полном отсутствии движения свойство activity имеет значение 0. При постоянном движении свойство activity имеет значение 100. Значение активности меньше значения чувствительности к движению, если движения нет, тогда как во время движения значения активности часто превышают значение чувствительности к движению.

Этот метод имеет сходное применение с методом Microphone.setSilenceLevel(): они оба используются для определения, когда должно отправляться событие activity. Однако эти методы имеют в значительной степени различное влияние на публикацию потоков.

  • Метод Microphone.setSilenceLevel() предназначен для оптимизации использования полосы пропускания. Когда аудиопоток считается тихим, аудиоданные не передаются. Вместо этого отправляется одно сообщение, свидетельствующее о наступлении тишины.
  • Метод Camera.setMotionLevel() предназначен для определения движения и не влияет на использование полосы пропускания. Даже если видеопоток не обнаруживает движения, видео все равно передается.
В следующем примере камера пользователя используется в качестве камеры слежения или обзора. Камера регистрирует движение и текстовое поле показывает уровень активности. (Пример можно расширить, добавив включение звукового сигнала или отправку сообщения через web-службу в другие приложения.)

Метод Camera.getCamera() возвращает ссылку на объект Camera или возвращает нуль, если камера недоступна или не установлена. Инструкция if проверяет, доступна ли камера, и, если да, вызывает метод connectCamera(). Метод connectCamera() создает экземпляр объекта Video с шириной и высотой записываемого потока. Для отображения видео, записываемого с камеры, ссылка на видеопоток добавляется к объекту Video, который в свою очередь добавляется в список отображения. (При вызове метода attachCamera() обычно появляется диалоговое окно с запросом доступа к камере для проигрывателя Flash Player. Однако, если пользователь запретил доступ и выбрал параметр Remember, диалоговое окно не появляется и ничего не отображается. Чтобы предоставить пользователю возможность разрешить доступ к камере, используйте метод system.Security.showSettings(), чтобы вызвать диалоговое окно параметров Flash Player.)

Метод setMotionLevel() задает значение 5 для минимального уровня активности (количество движения), необходимого для отправки события activity. Интервал между прекращением регистрации движения и отправкой события activity равен одной секунде (1000 миллисекунд). Когда проходит одна секунда без активности или уровень активности достигает пяти, отправляется событие ActivityEvent.ACTIVITY и вызывается метод activityHandler(). Если событие запущено уровнем активности, свойство activating получает значение true и запускается объект Timer. Каждую секунду отправляется событие timer объекта Timer, и вызывается метод timerHandler(), отображающий текущий уровень активности. (Хотя таймер запускается при уровне, равном или больше 5, отображаемый текущий уровень активности может быть меньше.)

package { import flash.display.Sprite; import flash.media.Camera; import flash.media.Video; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.ActivityEvent; public class Camera_setMotionLevelExample extends Sprite { private var myTextField:TextField; private var cam:Camera; private var t:Timer = new Timer(1000); public function Camera_setMotionLevelExample() { myTextField = new TextField(); myTextField.background = true; myTextField.selectable = false; myTextField.autoSize = TextFieldAutoSize.LEFT; cam = Camera.getCamera(); if (!cam) { myTextField.text = "No camera is installed."; }else { myTextField.text = "Waiting to connect."; connectCamera(); } addChild(myTextField); t.addEventListener(TimerEvent.TIMER, timerHandler); } private function connectCamera():void { var vid:Video = new Video(cam.width, cam.height); vid.x = 10; vid.y = 10; vid.attachCamera(cam); addChild(vid); cam.setMotionLevel(5, 1000); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler); } private function activityHandler(e:ActivityEvent):void { if (e.activating == true) { t.start(); } else { myTextField.text = "Everything is quiet."; t.stop(); } } private function timerHandler(event:TimerEvent):void { myTextField.x = 10; myTextField.y = cam.height + 20; myTextField.text = "There is some activity. Level: " + cam.activityLevel; } } }
motionLevelmotionTimeoutMicrophone.setSilenceLevel()
setQuality Задает максимальную пропускную способность в секунду или требуемое качество картинки для текущего исходящего видеоканала.bandwidthintЗадает максимальную пропускную способность в секунду, которую может использовать текущий исходящий видеоканал (в байтах в секунду). Чтобы указать, что проигрыватель Flash Player может использовать любую пропускную способность, необходимую для сохранения значения свойства quality, передайте значение 0 для свойства bandwidth. Значением по умолчанию является 16384. qualityintЦелое число, задающее требуемый уровень качества картинки, который определяется степенью сжатия, применяемой к каждому кадру видео. Допускаются значения от 1 (самое низкое качество и максимальное сжатие) до 100 (самое высокое качество без сжатия). Чтобы указать, что качество изображения может изменяться, чтобы избежать превышения пропускной способности, передайте 0 для свойства quality. Задает максимальную пропускную способность в секунду или требуемое качество картинки для текущего исходящего видеоканала. Как правило, этот метод применяется, только если видео передается через сервер Flash Media Server.

С помощью этого метода можно указать, какой элемент исходящего видеоканала важнее для приложения: использование пропускной способности или качество изображения.

  • Если предпочтение отдается использованию пропускной способности, передайте значение для bandwidth и 0 для quality. Проигрыватель Flash Player передает видео с максимально высоким качеством, возможным при заданной пропускной способности. При необходимости проигрыватель уменьшает качество изображения, чтобы не превышать пропускную способность. Как правило, при увеличении уровня движения качество снижается.
  • Если предпочтение отдается качеству, передайте 0 для bandwidth и числовое значение для quality. Проигрыватель Flash Player использует всю пропускную способность, необходимую для сохранения заданного качества. При необходимости проигрыватель снижает частоту кадров для сохранения качества изображения. Как правило, при увеличении уровня движения увеличивается и использование пропускной способности.
  • Если пропускная способность и качество одинаково важны, передайте числовые значения для обоих параметров. Проигрыватель Flash Player передает видео заданного качества, не превышающее заданной пропускной способности. При необходимости проигрыватель уменьшает частоту кадров для сохранения качества изображения без превышения заданной пропускной способности.
getCamera()quality
activityLevel Порог интенсивности движения, определяемой камерой.Number Порог интенсивности движения, определяемой камерой. Допускаются значения от 0 (движение не регистрируется) до 100 (регистрируется большое количество движения). Значение этого свойства помогает определить, нужно ли передавать параметр для метода setMotionLevel().

Если камера доступна, но не используется, потому что не вызван метод Video.attachCamera(), это свойство имеет значение -1.

Если осуществляется потоковая передача только несжатого локального видео, это свойство задается, только если назначена функция для обработчика событий. В противном случае оно не определяется.

motionLevelsetMotionLevel()
bandwidth Максимальная пропускная способность в байтах, доступная для текущего исходящего видеоканала.int Максимальная пропускная способность в байтах, доступная для текущего исходящего видеоканала. Значение 0 указывает на то, что канал может использовать любую пропускную способность, необходимую для сохранения желаемого качества кадра.

Это свойство можно задать с помощью метода setQuality().

setQuality()
currentFPS Частота, с которой камера записывает данные (в кадрах в секунду).Number Частота, с которой камера записывает данные (в кадрах в секунду). Это свойство задать нельзя, однако можно использовать метод setMode() для настройки связанного с ним свойства fps, которое задает максимальную частоту кадров, с которой камера должна записывать данные. setMode()fps Максимальная частота, с которой камера может записывать данные (в кадрах в секунду).Number Максимальная частота, с которой камера может записывать данные (в кадрах в секунду). Максимально возможная частота зависит от возможностей камеры. Иногда заданная частота не достигается.
  • Задать требуемое значение для этого свойства можно с помощью метода setMode().
  • Определить скорость, с которой камера записывает данные в настоящий момент, можно с помощью свойства currentFPS.
currentFPSsetMode()
height Текущая высота записи в пикселях.int Текущая высота записи в пикселях. Задать требуемое значение для этого свойства можно с помощью метода setMode(). widthsetMode()index Целое число, отсчитываемое от нуля, которым задается индекс камеры согласно содержимому массива, возвращаемого свойством names.int Целое число, отсчитываемое от нуля, которым задается индекс камеры согласно содержимому массива, возвращаемого свойством names. namesgetCamera()isSupported Свойству isSupported задается значение true, если текущая платформа поддерживает класс Camera, в противном случае задается значение false.Boolean Свойству isSupported задается значение true, если текущая платформа поддерживает класс Camera, в противном случае задается значение false. keyFrameInterval Номер видеокадра, который передается целиком (так называемый ключевой кадр), а не подвергается интерполяции по алгоритму сжатия видео.int Номер видеокадра, который передается целиком (так называемый ключевой кадр), а не подвергается интерполяции по алгоритму сжатия видео. Значение по умолчанию — 15, то есть ключевым является каждый пятнадцатый кадр. Значение 1 указывает на то, что каждый кадр является ключевым. Допускаются значения от 1 до 48. setKeyFrameInterval()loopback Определяет режим локального представления данных, записываемых камерой: подвергается сжатию и распаковке, как при прямой передаче с помощью Flash Media Server (true), или не подвергается сжатию (false).Boolean Определяет режим локального представления данных, записываемых камерой: подвергается сжатию и распаковке, как при прямой передаче с помощью Flash Media Server (true), или не подвергается сжатию (false). Значение по умолчанию false.

Хотя сжатый поток удобен для тестирования, например для просмотра параметров качества видеопотока, он означает значительные затраты на обработку. Локальный вид сжимается, редактируется для передачи, как при реальном подключении, а затем распаковывается для локального просмотра.

Задать это значение можно с помощью метода Camera.setLoopback(). Задать уровень сжатия, используемый при этом свойстве в значении true, можно с помощью метода Camera.setQuality().

setLoopback()setQuality()
motionLevel Задает количество движения, необходимое для отправки события activity.int Задает количество движения, необходимое для отправки события activity. Диапазон допустимых значений — от 0 до 100. Значением по умолчанию является 50.

Видео может отображаться независимо от значения параметра motionLevel. Дополнительные сведения см. в описании метода setMotionLevel().

setMotionLevel()
motionTimeout Число миллисекунд с момента, когда камера прекратила распознавать движение, до момента передачи события activity.int Число миллисекунд с момента, когда камера прекратила распознавать движение, до момента передачи события activity. Значение по умолчанию 2000 (две секунды).

Задать это значение можно с помощью метода setMotionLevel().

setMotionLevel()
muted Логическое значение, показывающее, что пользователь запретил (true), или разрешил (false) доступ к камере в диалоговом окне «Конфиденциальность» проигрывателя Flash Player.Boolean Логическое значение, показывающее, что пользователь запретил (true), или разрешил (false) доступ к камере в диалоговом окне «Конфиденциальность» проигрывателя Flash Player. При изменении этого значения отправляется событие status. getCamera()statusname Имя текущей камеры, возвращенное самой камерой.String Имя текущей камеры, возвращенное самой камерой. namesgetCamera()names Массив строк, отражающих имена всех доступных камер, без вывода диалогового окна «Конфиденциальность» проигрывателя Flash Player.Array Массив строк, отражающих имена всех доступных камер, без вывода диалогового окна «Конфиденциальность» проигрывателя Flash Player. Этот массив имеет такое же поведение, что и все массивы ActionScript: он неявно передает индекс каждой камеры, отсчитываемый от нуля, и количество камер в системе (с помощью names.length). Дополнительные сведения см. в разделе names в описании класса Array.

Для вызова свойства names требуется выполнить обширный анализ оборудования. В большинстве случаев можно использовать камеру по умолчанию.

На платформе Android поддерживается только одна камера, даже если устройство оснащено несколькими камерами. Именем камеры всегда является Default.

getCamera()indexname
quality Требуемый уровень качества изображения, который определяется степенью сжатия, применяемого к каждому кадру видео.int Требуемый уровень качества изображения, который определяется степенью сжатия, применяемого к каждому кадру видео. Допускаются значения качества от 1 (самое низкое качество и максимальное сжатие) до 100 (самое высокое качество без сжатия). Значение по умолчанию — 0, при котором качество изображения может по необходимости изменяться, чтобы не допустить превышения доступной пропускной способности.

Это свойство можно задать с помощью метода setQuality().

setQuality()
width Текущая ширина записи в пикселях.int Текущая ширина записи в пикселях. Задать требуемое значение для этого свойства можно с помощью метода setMode(). setMode()
SoundTransform Класс SoundTransform содержит свойства громкости и панорамирования.Object Класс SoundTransform содержит свойства громкости и панорамирования. В следующем примере загружается и воспроизводится МР3-файл. В процессе воспроизведения файла MP3 переместите курсор мыши или другого устройства ввода. По мере перемещения курсора по рабочей области изменяется громкость и панорамирование. Чтобы запустить данный пример, поместите файл MySound.mp3 в тот каталог, где находится рассматриваемый SWF-файл. package { import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.net.URLRequest; import flash.utils.Timer; public class SoundTransformExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundTransformExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.load(request); channel = soundFactory.play(); stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function setPan(pan:Number):void { trace("setPan: " + pan.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.pan = pan; channel.soundTransform = transform; } private function setVolume(volume:Number):void { trace("setVolume: " + volume.toFixed(2)); var transform:SoundTransform = channel.soundTransform; transform.volume = volume; channel.soundTransform = transform; } private function mouseMoveHandler(event:MouseEvent):void { var halfStage:uint = Math.floor(stage.stageWidth / 2); var xPos:uint = event.stageX; var yPos:uint = event.stageY; var value:Number; var pan:Number; if (xPos > halfStage) { value = xPos / halfStage; pan = value - 1; } else if (xPos < halfStage) { value = (xPos - halfStage) / halfStage; pan = value; } else { pan = 0; } var volume:Number = 1 - (yPos / stage.stageHeight); setVolume(volume); setPan(pan); } } } flash.display.SimpleButton.soundTransformflash.display.Sprite.soundTransformflash.media.Microphone.soundTransformflash.media.SoundChannel.soundTransformflash.media.SoundMixer.soundTransformflash.net.NetStream.soundTransformSoundTransform Создает объект SoundTransform.volNumber1Громкость от 0 (тишина) до 1 (полная громкость). panningNumber0Панорамирование звука слева направо, в диапазоне от -1 (полная панорама слева) до 1 (полная панорама справа). Значение 0 указывает на отсутствие панорамы (по центру). Создает объект SoundTransform. В следующем примере звук воспроизводится только правым каналом, громкость установлена на 50 процентов.

Конструктор загружает звук и назначает его звуковому каналу (channel). Также создается объект SoundTranform (transform). Его первый аргумент устанавливает громкость на 50 процентов (диапазон значений — от 0,0 до 1,0). Второй аргумент задает панораму. В этом примере панорама имеет значение 1,0, то есть звук выводится только из правого динамика. Чтобы эти параметры вступили в силу объект SoundTranform с именем transform назначается свойству soundTransform звукового канала.

Примечание. Для этого примера определена ограниченная обработка ошибок.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.events.IOErrorEvent; public class SoundTransform_constructorExample extends Sprite { public function SoundTransform_constructorExample() { var mySound:Sound = new Sound(); var url:URLRequest = new URLRequest("mySound.mp3"); var channel:SoundChannel; var transform:SoundTransform = new SoundTransform(0.5, 1.0); mySound.load(url); channel = mySound.play(); channel.soundTransform = transform; mySound.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
leftToLeft Значение от 0 (нет) до 1 (все), указывающее, какая доля левого входа воспроизводится в левом динамике.Number Значение от 0 (нет) до 1 (все), указывающее, какая доля левого входа воспроизводится в левом динамике. leftToRight Значение, от 0 (нет) до 1 (все), указывающее, какая доля левого входа воспроизводится в правом динамике.Number Значение, от 0 (нет) до 1 (все), указывающее, какая доля левого входа воспроизводится в правом динамике. pan Панорамирование звука слева направо, в диапазоне от -1 (полная панорама слева) до 1 (полная панорама справа).Number Панорамирование звука слева направо, в диапазоне от -1 (полная панорама слева) до 1 (полная панорама справа). Значение 0 представляет отсутствие панорамы (сбалансированный центр между правым и левым каналами). rightToLeft Значение от 0 (нет) до 1 (все), указывающее, какая доля правого входа воспроизводится в левом динамике.Number Значение от 0 (нет) до 1 (все), указывающее, какая доля правого входа воспроизводится в левом динамике. rightToRight Значение от 0 (нет) до 1 (все), указывающее, какая доля правого входа воспроизводится в правом динамике.Number Значение от 0 (нет) до 1 (все), указывающее, какая доля правого входа воспроизводится в правом динамике. volume Громкость от 0 (тишина) до 1 (полная громкость).Number Громкость от 0 (тишина) до 1 (полная громкость).
StageVideoAvailability Этот класс определяет перечисление, которое обозначает, доступно ли в настоящее время видео рабочей области.Перечисление, которое обозначает, доступно ли в настоящее время видео рабочей области. Object Этот класс определяет перечисление, которое обозначает, доступно ли в настоящее время видео рабочей области. flash.events.StageVideoAvailabilityEventAVAILABLE Видео рабочей области в настоящее время доступно.availableStringВидео рабочей области в настоящее время доступно. Видео рабочей области в настоящее время доступно. UNAVAILABLE Видео рабочей области в настоящее время недоступно.unavailableStringВидео рабочей области в настоящее время недоступно. Видео рабочей области в настоящее время недоступно. StageWebView Класс StageWebView отображает содержимое HTML в порту просмотра рабочей области.flash.events:EventDispatcher Класс StageWebView отображает содержимое HTML в порту просмотра рабочей области.

Класс StageWebView обеспечивает простые средства отображения содержимого HTML на устройствах, не предоставляющих поддержку класса HTMLLoader. Класс не обеспечивает взаимодействия между ActionScript и содержимым HTML, за исключением взаимодействия через методы и свойства самого класса StageWebView. Например, не предусмотрены способы передачи значений или вызова функций между ActionScript и JavaScript.

Поддержка в профилях AIR: эта функция поддерживается во всех компьютерных операционных системах и на мобильных устройствах, но не поддерживается в средах AIR для телевизионных устройств. Используйте свойство StageWebView.isSupported, чтобы проверить наличие поддержки в среде выполнения. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

На устройствах в мобильных и расширенных мобильных профилях класс StageWebView использует системный веб-элемент управления, предоставляемый операционной системой устройства. Поэтому доступные функции и внешний вид при визуализации могут изменяться в зависимости от устройства. На настольных компьютерах (в профилях рабочего стола и расширенного рабочего стола) класс StageWebView использует внутренний модуль AIR WebKit. Доступные функции и внешний вид при визуализации такие же, как в классе HTMLLoader (без тесной интеграции и соединения сценария между ActionScript и JavaScript с помощью экземпляра HTMLLoader). Чтобы узнать, поддерживается ли класс на текущем устройстве, проверьте свойство isSupported класса StageWebView.

Класс StageWebView НЕ ЯВЛЯЕТСЯ экранным объектом и не может быть добавлен в список отображения Flash. Вместо него отображается объект StageWebView путем его подключения напрямую к рабочей области с использованием свойства stage. Экземпляр StageWebView, подключенный к рабочей области, отображается поверх любых экранных объектов Flash. Размером и расположением области визуализации можно управлять с помощью свойства viewPort. Способ управления порядком глубины различных экранных объектов StageWebView не предусмотрен. Наложение двух экземпляров не рекомендуется.

Когда содержимое в объекте StageWebView находится в фокусе, объект StageWebView может обрабатывать ввод с клавиатуры в приоритетном порядке. Рабочая область, к которой подключен объект StageWebView, отправляет любые необработанные данные, введенные с клавиатуры. Здесь не используется стандартный цикл захвата/обработки событий по восходящей цепочке, поскольку экземпляр StageWebView не является компонентом списка отображения.

В ОС Android 3.0 и более поздних версий приложение должно включать аппаратное ускорение в элементе Android manifestAdditions дескриптора приложения AIR для отображения содержимого подключаемого модуля в объекте StageWebView.

В следующем примере показана настройка объекта StageWebView для заполнения рабочей области. В примере выполняется загрузка веб-сайта с помощью метода loadURL() и используются программные клавиши Back (Назад) и Search (Поиск) для навигации в истории. package { import flash.display.MovieClip; import flash.media.StageWebView; import flash.geom.Rectangle; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.desktop.NativeApplication; public class StageWebViewExample extends MovieClip{ private var webView:StageWebView = new StageWebView(); public function StageWebViewExample() { webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" ); stage.addEventListener( KeyboardEvent.KEY_DOWN, onKey ); } private function onKey( event:KeyboardEvent ):void { if( event.keyCode == Keyboard.BACK && webView.isHistoryBackEnabled ) { trace("Back."); webView.historyBack(); event.preventDefault(); } if( event.keyCode == Keyboard.SEARCH && webView.isHistoryForwardEnabled ) { trace("Forward."); webView.historyForward(); } } } }
Класс HTMLLoaderМарк Доэрти (Mark Doherty): AIR на платформе Android: TweetrAppМарк Доэрти (Mark Doherty): Поддержка OAuthВключение Flash Player и других подключаемых модулей в объекте StageWebViewfocusOut Отправляется, когда объект StageWebView теряет фокус.flash.events.FocusEvent Отправляется, когда объект StageWebView теряет фокус. focusIn Отправляется, когда объект StageWebView получает фокус.flash.events.FocusEvent Отправляется, когда объект StageWebView получает фокус. error Сигнализирует о возникновении ошибки.flash.events.ErrorEvent Сигнализирует о возникновении ошибки. complete Сигнализирует, что последняя операция загрузки, запрошенная методом loadString() или loadURL(), завершена.flash.events.Event.COMPLETEflash.events.EventСигнализирует, что последняя операция загрузки, запрошенная методом loadString() или load(), завершена. Сигнализирует, что последняя операция загрузки, запрошенная методом loadString() или loadURL(), завершена. locationChanging Сигнализирует, что свойство location объекта StageWebView, готово к изменению.flash.events.LocationChangeEvent.LOCATION_CHANGINGflash.events.LocationChangeEventСигнализирует, что свойство location объекта StageWebView, готово к изменению. Сигнализирует, что свойство location объекта StageWebView, готово к изменению.

Событие locationChanging отправляется, только если изменение расположения инициировано с помощью содержимого HTML или кода, выполняющегося в объекте StageWebView, например, когда пользователь переходит по ссылке. По умолчанию новое расположение выводится на экран в этом объекте StageWebView. Можно вызвать метод preventDefault() объекта события для отмены поведения по умолчанию. Например, можно использовать функцию flash.net.navigateToURL() для открытия страницы в системном браузере на основе свойства location объекта события

Событие locationChanging не отправляется при изменении расположения с помощью следующих методов:

  • historyBack()
  • historyForward()
  • historyGo()
  • loadString()
  • loadURL()
  • reload()
locationChange Сигнализирует, что свойство location объекта StageWebView изменено.flash.events.LocationChangeEvent.LOCATION_CHANGEflash.events.LocationChangeEventСигнализирует, что свойство location объекта StageWebView изменено. Сигнализирует, что свойство location объекта StageWebView изменено.

Отмена события невозможна.

StageWebView Создает объект StageWebView. Создает объект StageWebView.

Объект невидим, пока он не подключен к рабочей области и не задано значение viewPort.

assignFocus Назначает фокус содержимому в этом объекте StageWebView.directionStringnoneУказывает, что фокус должен получить первый или последний фокусируемый объект в отображаемом содержимом. Назначает фокус содержимому в этом объекте StageWebView.

Значения направления задаются в классе FocusDirection и включают значения: bottom, none и top.

FocusDirection
dispose Избавляется от этого объекта StageWebView. Избавляется от этого объекта StageWebView.

Вызов метода dispose() является необязательным. Если ссылка на этот экземпляр StageWebView не сохраняется, он включается в операцию сборки мусора. С помощью вызова dispose() сборку «мусора» можно начать раньше или в более удобное время.

drawViewPortToBitmapData Отрисовывает порт просмотра StageWebView в растровое изображение. Ширина или высота растрового изображения от ширины или высоты порта просмотра. ArgumentErrorArgumentErrorРастровое изображение пусто. ErrorErrorbitmapflash.display:BitmapDataОбъект BitmapData, на котором нужно отрисовывать видимую часть порта просмотра StageWebView. Отрисовывает порт просмотра StageWebView в растровое изображение.

Захватите растровое изображение и задайте null для рабочей области для того, чтобы отобразить содержимое над объектом StageWebView.

Следующий пример отображает две метки: google и facebook. При нажатии на метку захватывается соответствующая веб-страница и отображается как снимок в рабочей области. package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.*; import flash.geom.Rectangle; import flash.media.StageWebView; import flash.net.*; import flash.text.TextField; public class stagewebview1 extends Sprite { public var webView:StageWebView = new StageWebView(); public var textGoogle:TextField=new TextField(); public var textFacebook:TextField=new TextField(); public function stagewebview() { textGoogle.htmlText="<b>Google</b>"; textGoogle.x=300; textGoogle.y=-80; addChild(textGoogle); textFacebook.htmlText="<b>Facebook</b>"; textFacebook.x=0; textFacebook.y=-80; addChild(textFacebook); textGoogle.addEventListener(MouseEvent.CLICK,goGoogle); textFacebook.addEventListener(MouseEvent.CLICK,goFaceBook); webView.stage = this.stage; webView.viewPort = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); } public function goGoogle(e:Event):void { webView.loadURL("http://www.google.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function goFaceBook(e:Event):void { webView.loadURL("http://www.facebook.com"); webView.stage = null; webView.addEventListener(Event.COMPLETE,handleLoad); } public function handleLoad(e:Event):void { var bitmapData:BitmapData = new BitmapData(webView.viewPort.width, webView.viewPort.height); webView.drawViewPortToBitmapData(bitmapData); var webViewBitmap:Bitmap=new Bitmap(bitmapData); addChild(webViewBitmap); } } }
historyBack Переход к предыдущей странице в истории просмотра. Переход к предыдущей странице в истории просмотра. historyForward Переход к следующей странице в истории просмотра. Переход к следующей странице в истории просмотра. loadString Загружает и отображает указанную строку HTML.textStringстрока содержимого HTML или XHTML для отображения. mimeTypeStringtext/htmlТип MIME содержимого: text/html или application/xhtml+xml. Загружает и отображает указанную строку HTML.

При использовании метода loadString() для свойства location возвращается значение about:blank. Только стандартные схемы URI могут использоваться в URL-адресах в строке HTML. Схемы URI среды AIR, такие как app: и app-storage:, не разрешены.

Содержимое HTML не может загружать локальные ресурсы, например файлы изображений. Запросы XMLHttpRequest не разрешены.

Поддерживаются только MIME-типы text/html и application/xhtml+xml.

В следующем примере показана настройка объекта StageWebView для заполнения рабочей области. В примере показана загрузка страницы HTML с использованием метода loadString(). var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); var htmlString:String = "<!DOCTYPE HTML>" + "<html>" + "<body>" + "<h1>Example</h1>" + "<p>King Phillip cut open five green snakes.</p>" + "</body>" + "</html>"; webView.loadString( htmlString, "text/html" );
loadURL Загружает страницу по указанному URL-адресу.urlString Загружает страницу по указанному URL-адресу.

Для URL-адреса могут использоваться следующие схемы URI: http:, https:, file:, data: и javascript:. Содержимое, загруженное с использованием схемы file:, поддерживает загрузку других локальных ресурсов.

В следующем примере показана настройка объекта StageWebView для заполнения рабочей области. В примере показан загрузка веб-сайта с помощью метода loadURL().

Примечание. На платформе Android необходимо указать права доступа INTERNET в дескрипторе программы AIR для загрузки удаленных URL-адресов.

var webView:StageWebView = new StageWebView(); webView.stage = this.stage; webView.viewPort = new Rectangle( 0, 0, stage.stageWidth, stage.stageHeight ); webView.loadURL( "http://www.example.com" );
reload Перезагружает текущую страницу. Перезагружает текущую страницу. stop Останавливает текущую операцию загрузки. Останавливает текущую операцию загрузки. isHistoryBackEnabled Показывает наличие предыдущей страницы в истории просмотра.Boolean Показывает наличие предыдущей страницы в истории просмотра. isHistoryForwardEnabled Показывает наличие следующей страницы в истории просмотра.Boolean Показывает наличие следующей страницы в истории просмотра. isSupported Показывает наличие поддержки класса StageWebView на текущем устройстве.Boolean Показывает наличие поддержки класса StageWebView на текущем устройстве. location URL-адрес текущего расположения.String URL-адрес текущего расположения. stage Рабочая область, в которой отображается этот объект StageWebView.flash.display:Stage Рабочая область, в которой отображается этот объект StageWebView.

Установите для stage значение null, чтобы скрыть этот объект StageWebView.

title Значение заголовка HTML.String Значение заголовка HTML. viewPort Область в рабочей области, в которой отображается объект StageWebView.flash.geom:RectangleЗначение Rectangle недействительно. RangeErrorRangeError Область в рабочей области, в которой отображается объект StageWebView.
VideoStatus Этот класс определяет перечисление, которое описывает возможные уровни видео расшифровки.Перечисление, которое описывает возможные уровни видео расшифровки. Object Этот класс определяет перечисление, которое описывает возможные уровни видео расшифровки. ACCELERATED Обозначает ускоренный аппаратными средствами (графический процессор) видео расшифровка.acceleratedStringОбозначает ускоренный аппаратными средствами (графический процессор) видео расшифровка. Обозначает ускоренный аппаратными средствами (графический процессор) видео расшифровка. SOFTWARE Обозначает программную видео расшифровку.softwareStringОбозначает программную видео расшифровку. Обозначает программную видео расшифровку. UNAVAILABLE Видео расшифровка не поддержана.unavailableStringВидеоролик не поддержан. Видео расшифровка не поддержана. MediaPromise Класс MediaPromise представляет обещание поставить объект мультимеди.flash.desktop:IFilePromiseflash.events:EventDispatcher Класс MediaPromise представляет обещание поставить объект мультимедиа.

Свойство data объекта MediaEvent является экземпляром MediaPromise. Методы MediaPromise можно использовать для доступа к обещанному объекту мультимедиа. Поддерживаемые форматы мультимедийных данных включают фотографии и видеоролики.

Создание объекта MediaPromise невозможно. При вызове new MediaPromise() возникает ошибка cреды выполнения.

MediaEventIFilePromiseLoader.LoadFilePromise()IDataInputCameraRoll.browseForImage()CameraUIcomplete Объект MediaPromise отправляет событие complete по завершении чтения всех данных.flash.events.Event.COMPLETEflash.events.Event Объект MediaPromise отправляет событие complete по завершении чтения всех данных. Событие обозначает, что в базовом потоке отсутствуют доступные данные.

Событие complete не отправляется синхронным источником данных.

progress Объект MediaPromise отправляет события progress, когда данные становятся доступными.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Объект MediaPromise отправляет события progress, когда данные становятся доступными.

Свойство bytesTotal всех событий progress, кроме последнего, имеет значение 0. Если сразу же доступны все данные, события progress могут не отправляться. События progress не отправляются синхронными источниками данных.

ioError Объект MediaPromise отправляет событие ioError при обнаружении ошибки во время чтения базового потока данных.flash.events.IOErrorEvent.IOERRORflash.events.IOErrorEvent Объект MediaPromise отправляет событие ioError при обнаружении ошибки во время чтения базового потока данных. Чтение дополнительных данных после отправки этого события невозможно. close Объект MediaPromise отправляет событие close после закрытия базового потока данных.flash.events.Event.CLOSEflash.events.Event Объект MediaPromise отправляет событие close после закрытия базового потока данных. close Закрывает источник данных. Закрывает источник данных. open Открывает базовый источник данных и возвращает экземпляр IDataInput, доступный для чтения.flash.utils:IDataInput Открывает базовый источник данных и возвращает экземпляр IDataInput, доступный для чтения.

Если базовый источник данных является асинхронным, то объект MediaPromise отправляет события progress и complete, показывая доступность данных для чтения. Если источник данных является синхронным, сразу же доступны все данные и эти события не отправляются.

Примечание. Можно загрузить объект MediaPromise с использованием метода loadFilePromise() класса Loader вместо чтения данных вручную.

Loader.loadFilePromise()
reportError Используется средой выполнения для вывода сообщений об ошибках.eflash.events:ErrorEventотправляемое событие ошибки. Используется средой выполнения для вывода сообщений об ошибках.

Код приложения не должен содержать вызов этого метода.

file Экземпляр File, представляющий объект мультимедиа, если таковой существует.flash.filesystem:File Экземпляр File, представляющий объект мультимедиа, если таковой существует.

Это свойство ссылается на объект File, если базовый источник данных является файловым и файл доступен программе. В противном случае свойство равно null.

isAsync Сообщает о том, является ли базовый источник данных асинхронным или синхронным.Boolean Сообщает о том, является ли базовый источник данных асинхронным или синхронным.

mediaType Основной тип мультимедиа: изображение или видео.String Основной тип мультимедиа: изображение или видео.

Константы класса MediaType определяют возможные значения этого свойства:

  • MediaType.IMAGE
  • MediaType.VIDEO
MediaType
relativePath Имя файла объекта мультимедиа, если таковой существует.String Имя файла объекта мультимедиа, если таковой существует.

Имя файла доступно, если базовый источник данных является файловым и файл доступен в программе. В противном случае свойство равно null.

SoundLoaderContext Класс SoundLoaderContext обеспечивает проверку безопасности для файлов, загружающих звук.Object Класс SoundLoaderContext обеспечивает проверку безопасности для файлов, загружающих звук. Объекты SoundLoaderContext передаются в качестве аргументов конструктору и методу load() класса Sound.

При использовании данного класса необходимо учесть следующую модель безопасности:

  • Загрузка и воспроизведение звука запрещены, если вызывающий файл находится в изолированной программной среде сети, а звуковой файл для загрузки сохранен на локальном компьютере.
  • По умолчанию загрузка и воспроизведение звука не разрешены, если вызывающий локальный файл пытается загрузить и воспроизвести удаленный звук. Чтобы разрешить это, пользователь должен предоставить явное разрешение.
  • Запрещены определенные операции со звуком. Данные в загруженном звуке не могут быть получены файлом, находящимся в другом домене, если не используется файл политики URL-адресов. Данное ограничение распространяется на следующие API-интерфейсы для работы со звуком: свойствоSound.id3, и методы SoundMixer.computeSpectrum(), SoundMixer.bufferTime и SoundTransform.

Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application (содержимое, установленное с приложением AIR).

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

SoundLoaderContext Создает новый объект Context для загрузчика звука.bufferTimeNumber1000Число секунд для предварительной загрузки потокового звука в буфер перед началом передачи звука в поток. checkPolicyFileBooleanfalseУказывает, стоит проверять наличие файла политики URL-адресов при загрузке объекта (true) или нет. Создает новый объект Context для загрузчика звука. В следующем примере время буферизации загружаемого звука составляет три секунды.

Первый параметр объекта SoundLoaderContext (context) используется для увеличения значения буфера по умолчанию с одной до трех секунд. (Значение выражено в миллисекундах.) Если второму параметру объекта SoundLoaderContext задать значение true, Flash Player будет проверять наличие файла междоменной политики при загрузке объекта. В данном примере используется значение по умолчанию false, поэтому проверка выполняться не будет. Метод load() объекта Sound будет использовать контекстные настройки, чтобы перед началом потокового воспроизведения звук загружался в буфер в течение трех секунд. Объект URLRequest определяет местоположение файла, подкаста от компании Adobe. Если во время загрузки звука возникает ошибка IOErrorEvent.IO_ERROR, вызывается метод errorHandler().

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.events.IOErrorEvent; public class SoundLoaderContextExample extends Sprite { public function SoundLoaderContextExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); var context:SoundLoaderContext = new SoundLoaderContext(3000, false); snd.load(req, context); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); } private function errorHandler(errorEvent:IOErrorEvent):void { trace("The sound could not be loaded: " + errorEvent.text); } } }
bufferTime Количество миллисекунд для предварительной загрузки потокового звука в буфер перед началом передачи звука в реальном времени.1000Number Количество миллисекунд для предварительной загрузки потокового звука в буфер перед началом передачи звука в реальном времени.

Обратите внимание, что значение SoundLoaderContext.bufferTime нельзя переопределить заданием свойства SoundMixer.bufferTime. Свойство SoundMixer.bufferTime затрагивает только время буферизации для встроенных потоковых звуков в SWF-файле и не зависит от динамически созданных объектов Sound (то есть, объектов Sound, созданных в ActionScript).

checkPolicyFile Указывает, будет ли приложение пытаться загрузить файл политики URL-адресов с сервера загружаемого звука перед началом загрузки самого звука.falseBoolean Указывает, будет ли приложение пытаться загрузить файл политики URL-адресов с сервера загружаемого звука перед началом загрузки самого звука. Это свойство применяется к звуку, загружаемому не с того домена, в котором находится вызывающий файл, с помощью метода Sound.load().

Установите для данного свойства значение true, если вы загружаете звук, размещенный за пределами домена вызывающего файла, а для кода в вызывающем файле требуется доступ на низком уровне к звуковым данным. Например, доступ низкого уровня к данным звука требуется для ссылки на свойство Sound.id3 с целью получения объекта ID3Info или для вызова метода SoundMixer.computeSpectrum() для получения образцов загруженного звука При попытке доступа к данным звука без установки значения true для параметра checkPolicyFile во время загрузки можно получить исключение SecurityError, так как требуемый файл политик не был загружен.

Если вам не требуется доступ низкого уровня к данным загружаемого звука, не устанавливайте для параметра checkPolicyFile значение true. Проверка наличия файла политики снижает пропускную способность сети и может задержать начало загрузки, поэтому ее следует выполнять только при необходимости.

При вызове метода Sound.load() со свойством SoundLoaderContext.checkPolicyFile в значении true проигрыватель Flash Player или AIR должен либо успешно загрузить соответствующий файл политики URL-адресов, либо определить, что его не существует, прежде чем начнется загрузка заданного звука. Flash Player или AIR выполняет следующие действия в указанном порядке, чтобы проверить существование файла политики:

  • Проигрыватель Flash Player или AIR анализирует ранее загруженные файлы политик.
  • Проигрыватель Flash Player или AIR пытается загрузить любые ожидаемые файлы политик, указанные в вызовах метода Security.loadPolicyFile().
  • Проигрыватель Flash Player или AIR пытается загрузить файл политики из местоположения по умолчанию, которое соответствует URL-адресу звука (файл /crossdomain.xml на том же сервере, что и URLRequest.url). (URL-адрес звука задается в свойстве url объекта URLRequest, переданного методу Sound.load() или функции конструктора Sound().)

Во всех случаях проигрыватель Flash Player или AIR требует наличия на сервере звука соответствующего файла политики, который предоставляет доступ к звуковому файлу по адресу URLRequest.url на основе места размещения файла политики, а также, обеспечивает домену вызывающего файла доступ к звуку посредством одного или нескольких тегов <allow-access-from>.

Если установить для параметра checkPolicyFile значение true, то перед загрузкой звука проигрыватель Flash Player или AIR будет ожидать проверки файла политики. Прежде чем выполнять операции низкого уровня с данными звука, такие как вызов Sound.id3 или SoundMixer.computeSpectrum(), необходимо дождаться отправки событий progress и complete объектом Sound.

Если задать для параметра checkPolicyFile значение true, но при этом соответствующий файл политики не будет найден, сообщение об ошибке будет отправлено только при попытке выполнить операцию, требующую наличия файла политики, после чего проигрыватель Flash Player или AIR выдаст исключение SecurityError. После получения события complete можно проверить, найден ли релевантный файл политики, получив значение Sound.id3 в блоке try и посмотрев, будет ли выдано исключение SecurityError.

Будьте внимательны при установке параметра checkPolicyFile, если вы загружаете файл с URL-адреса, в котором используется HTTP-переадресация на стороне сервера. Проигрыватель Flash Player или AIR пытается получить файлы политик, соответствующие свойству url объекта URLRequest, переданного методу Sound.load(). Если окончательный звуковой файл передается с другого URL-адреса из-за HTTP-переадресации, то изначально загруженные файлы политик могут быть не применимы к конечному URL-адресу объекта, который и следует учитывать при принятии мер безопасности.

В подобном случае можно предпринять следующее. Получив событие progress или complete, нужно проанализировать значение свойства Sound.url, которое содержит конечный URL звука. Затем вызовите метод Security.loadPolicyFile() в файле политики которого указан URL-адрес, полученный исходя из конечного URL звука. В завершение запрашивайте значение свойства Sound.id3 до тех пор, пока не перестанет выдаваться исключение.

Это условие не применимо к содержимому в изолированной программной среде безопасности приложения AIR. Содержимое, находящееся в изолированной программной среде приложения, всегда имеет программный доступ к звуковому содержимому независимо от источника его происхождения.

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

flash.media.Sound.load()flash.media.Sound.id3flash.media.SoundMixer.computeSpectrum()flash.media.Sound.urlflash.system.Security.loadPolicyFile()
SoundChannel Класс «SoundChannel» управляет звуком в приложении.flash.events:EventDispatcher Класс «SoundChannel» управляет звуком в приложении. Каждому звуку назначается звуковой канал, и приложение может иметь несколько смешанных между собой звуковых каналов. Класс SoundChannel содержит метод stop(), свойства для отслеживания амплитуды (громкости) канала и свойство для назначения объекта SoundTransform каналу. В следующем примере загружается и воспроизводится МР3-файл, а также отображаются данные о звуковых событиях, которые происходят по мере загрузки и воспроизведения файла. Объект Timer передает обновленную информацию о положении точки воспроизведения каждые 50 миллисекунд. Чтобы запустить данный пример, поместите файл MySound.mp3 в тот каталог, где находится рассматриваемый SWF-файл. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.utils.Timer; public class SoundChannelExample extends Sprite { private var url:String = "MySound.mp3"; private var soundFactory:Sound; private var channel:SoundChannel; private var positionTimer:Timer; public function SoundChannelExample() { var request:URLRequest = new URLRequest(url); soundFactory = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); channel = soundFactory.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); positionTimer = new Timer(50); positionTimer.addEventListener(TimerEvent.TIMER, positionTimerHandler); positionTimer.start(); } private function positionTimerHandler(event:TimerEvent):void { trace("positionTimerHandler: " + channel.position.toFixed(2)); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); positionTimer.stop(); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } private function soundCompleteHandler(event:Event):void { trace("soundCompleteHandler: " + event); positionTimer.stop(); } } } SoundSoundTransformsoundComplete Отправляется после завершения воспроизведения звука.flash.events.Event.SOUND_COMPLETEflash.events.Event Отправляется после завершения воспроизведения звука. В следующем примере пользователь выбирает песни из списка воспроизведения, а затем нажимает кнопку «Воспроизведение», чтобы прослушать их в выбранном порядке.

В конструкторе определяется текстовое поле, которое содержит список песен и строку для каждого элемента, выбранного для воспроизведения. (Как правило, для воспроизведения используются кнопки, а для списка песен — окна списков.) Определяется объект формата текста, который изменяет формат строк выбранных песен на курсив. Когда пользователь щелкает текстовое поле, запускается метод clickHandler().

В методе clickHandler() метод getLineIndexAtPoint() объекта текстового поля возвращает индекс строки, которую щелкнул пользователь. Используя индекс строки, метод getLineText() получает содержимое текста. Инструкция if проверяет, выбрал ли пользователь песню для воспроизведения или для добавления в список воспроизведения. Если пользователь выбрал песню для воспроизведения, прослушиватель событий щелчка мыши удаляется, и вызывается метод playNext() для начала воспроизведения. Если пользователь выделил название песни, содержимое строки добавляется в массив songList и формат текста меняется на курсив.

Метод playNext() повторяется для загрузки и воспроизведения каждой песни в списке массива. Песне также назначается звуковой канал. Для звукового канала добавляется прослушиватель событий, реагирующий на завершение воспроизведения песни и отправку события Event.SOUND_COMPLETE. Затем метод soundCompleteHandler() вызывает метод playNext() для воспроизведения следующей песни. Этот процесс продолжается, пока не завершится воспроизведение всех песен, перечисленных в массиве.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.text.TextFormat; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; public class SoundChannel_event_soundCompleteExample extends Sprite { private var channel:SoundChannel = new SoundChannel(); private var songList:Array = new Array(); private var listTextField:TextField = new TextField(); private var songFormat:TextFormat = new TextFormat(); private var arrayIndex:int = 0; private var songSelected:Boolean = false; public function SoundChannel_event_soundCompleteExample() { listTextField.autoSize = TextFieldAutoSize.LEFT; listTextField.border = true listTextField.background = true; listTextField.text = "Song1.mp3\n" + "Song2.mp3\n" + "Song3.mp3\n" + "Song4.mp3\n" + "PLAY"; songFormat.italic = true; listTextField.addEventListener(MouseEvent.CLICK, clickHandler); addChild(listTextField); } private function clickHandler(e:MouseEvent):void { var index:int = listTextField.getLineIndexAtPoint(e.localX, e.localY); var line:String = listTextField.getLineText(index); var firstIndex:uint = listTextField.getLineOffset(index); var playLine:uint = listTextField.numLines - 1; if((index == playLine) && (songSelected == true)) { listTextField.removeEventListener(MouseEvent.CLICK, clickHandler); playNext(); } else if (index != playLine) { songList.push(line.substr(0, (line.length - 1))); listTextField.setTextFormat(songFormat, firstIndex, (firstIndex + listTextField.getLineLength(index))); songSelected = true; } } private function playNext():void { if(arrayIndex < songList.length) { var snd:Sound = new Sound(); snd.load(new URLRequest(songList[arrayIndex])); channel = snd.play(); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); arrayIndex++; } else { songSelected = false; while(arrayIndex > 0) { songList.pop(); arrayIndex--; } } } private function soundCompleteHandler(e:Event):void { playNext(); } private function errorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
stop Останавливает воспроизведение звука в канале. Останавливает воспроизведение звука в канале. В следующем примере пользователь может приостановить звуковой файл и повторно воспроизвести его.

Конструктор загружает звуковой файл. (В данном примере предполагается, что файл находится в том же каталоге, что и SWF-файл.) Текстовое поле используется в качестве кнопки, нажатием которой пользователь может начать или приостановить воспроизведение. Когда пользователь щелкает текстовое поле button, запускается метод clickHandler().

В методе clickHandler() при первом щелчке по текстовому полю начинается воспроизведение звука и назначается звуковой канал. Затем, когда пользователь щелкает текстовое поле, чтобы поставить звук на паузу, воспроизведение останавливается. Свойство position звукового канала записывает положение звука на момент остановки. Это свойство используется для возобновления воспроизведения с того же положения, когда пользователь снова щелкнет текстовое поле, чтобы снять звук с паузы. Каждый раз при вызове метода Sound.play() создается новый объект SoundChannel, и ему назначается переменная channel. Объект Sound должен быть назначен объекту SoundChannel, чтобы использовать метод stop() звукового канала для приостановки звука.

package { import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLLoader; import flash.net.URLRequest; import flash.text.TextField; import flash.events.MouseEvent; import flash.text.TextFieldAutoSize; public class SoundChannel_stopExample extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var button:TextField = new TextField(); public function SoundChannel_stopExample() { var req:URLRequest = new URLRequest("MySound.mp3"); snd.load(req); button.x = 10; button.y = 10; button.text = "PLAY"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.CENTER; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { var pausePosition:int = channel.position; if(button.text == "PLAY") { channel = snd.play(pausePosition); button.text = "PAUSE"; } else { channel.stop(); button.text = "PLAY"; } } } }
leftPeak Текущая амплитуда (громкость) левого канала от 0 (тишина) до 1 (полная амплитуда).Number Текущая амплитуда (громкость) левого канала от 0 (тишина) до 1 (полная амплитуда). position Во время воспроизведения звука свойство position показывает (в миллисекундах) текущую точку воспроизведения в звуковом файле.Number Во время воспроизведения звука свойство position показывает (в миллисекундах) текущую точку воспроизведения в звуковом файле. Когда звук останавливается или приостанавливается, свойство position показывает последнюю воспроизведенную точку в звуковом файле.

Чаще всего при остановке звука значение свойства position сохраняется. Позже можно возобновить воспроизведение, запустив звук с сохраненного положения.

Если звук воспроизводится циклично, значение свойства position сбрасывается на 0 в начале каждого цикла.

rightPeak Текущая амплитуда (громкость) правого канала от 0 (тишина) до 1 (полная амплитуда).Number Текущая амплитуда (громкость) правого канала от 0 (тишина) до 1 (полная амплитуда). soundTransform Объект SoundTransform, назначенный для данного звукового канала.flash.media:SoundTransform Объект SoundTransform, назначенный для данного звукового канала. Объект SoundTransform включает свойства для настройки громкости, панорамы, назначения левого и правого динамиков. SoundTransform
SoundMixer Класс SoundMixer содержит статические свойства и методы для глобального управления звуком в приложении.Object Класс SoundMixer содержит статические свойства и методы для глобального управления звуком в приложении. Класс SoundMixer управляет встроенным и потоковым звуком в приложении. Он не управляет динамически создаваемым звуком (т.е. звуком, созданным в ответ на отправку события sampleData объектом Sound). areSoundsInaccessible Определяет, являются ли какие-либо звуки недоступными из-за ограничений безопасности.Строковое представление логического значения. Boolean Определяет, являются ли какие-либо звуки недоступными из-за ограничений безопасности. Например, звук, загруженный не с того же домена, в котором находится вызывающее этот метод содержимое, будет недоступен, если на его сервере нет файла политики URL-адресов, предоставляющего доступ к домену этого содержимого. Звук будет загружен и воспроизведен, но для недоступных звуков не выполняются операции более низкого уровня, такие как получение метаданных ID3 для звука.

В отношении содержимого приложений AIR, находящегося в изолированной программной среде безопасности приложения, вызов этого метода всегда возвращает значение false. Все звуки, включая те, что загружены с других доменов, доступны для содержимого в изолированной программной среде безопасности приложения.

computeSpectrum()
computeSpectrum Создает снимок текущей звуковой волны и помещает его в заданный объект ByteArray.outputArrayflash.utils:ByteArrayОбъект ByteArray, содержащий значения, связанные со звуком. Если какие-то звуки недоступные вследствие ограничений безопасности (areSoundsInaccessible == true), объект outputArray остается без изменений. Если выключены все звуки, объект outputArray заполняется нулями. FFTModeBooleanfalseЛогическое значение, указывающее на то, подвергается ли звук сначала преобразованию Фурье. Если этому параметру задать значение true, вместо необработанной звуковой волны метод возвращает спектр частот. В спектре низкие частоты представлены слева, а высокие — справа. stretchFactorint0Разрешение звуковых образцов. Если задать для stretchFactor значение 0, образцы создаются с использованием частоты 44,1 кГц, при значении 1 используется частота 22,05 кГц, при значении 2 используется частота 11,025 кГц и т.д. Создает снимок текущей звуковой волны и помещает его в заданный объект ByteArray. Значения форматируются как нормализованные значения с плавающей запятой в диапазоне от -1 до 1. Объект ByteArray, передаваемый параметру outputArray, перезаписывается новыми значениями. Размер созданного объекта ByteArray фиксируется на 512 значениях с плавающей запятой, где первые 256 значений представляют левый канал, а следующие 256 значений — правый.

Примечание. Этот метод учитывает ограничения безопасности для локального файла и для междоменной загрузки. При работе с локальными файлами или звуками, загруженными с сервера, находящегося не в том же домене, что и вызывающее содержимое, возможно, потребуется создать файл междоменной политики, чтобы преодолеть ограничения изолированной программной среды. Дополнительные сведения см. в описании класса Sound. Более того, этот метод нельзя использовать для извлечения данных из потоков RTMP, даже если он вызывается содержимым, находящимся в том же домене, что и сервер RTMP.

Этот метод поддерживается через протокол RTMP в Flash Player 9.0.115.0 и более поздних версиях и в Adobe AIR. Можно контролировать потоки на сервере Flash Media Server в сценарии, выполняемом на стороне сервера. Дополнительные сведения см. в разделах о свойствах Client.audioSampleAccess и Client.videoSampleAccess в документе Справочник по языку ActionScript на стороне сервера для Adobe Flash Media Server.

В следующем примере метод computeSpectrum() используется для создания графического представления данных звуковой волны.

Конструктор загружает и запускает звуковой файл. (В данном примере ошибки не обрабатываются, и предполагается, что звуковой файл находится в том же каталоге, что и SWF-файл.) При воспроизведении звука прослушивается событие Event.ENTER_FRAME, в результате чего многократно вызывается метод onEnterFrame() для рисования графика значений звуковых данных. После завершения воспроизведения звука метод onPlaybackComplete() останавливает рисование, удалив прослушиватель события Event.ENTER_FRAME.

В методе onEnterFrame() метод computeSpectrum() сохраняет необработанный звук в объекте массива байтов bytes. Образец создается с использованием частоты 44,1 кГц. Массив байтов, содержащий 512 байтов данных, каждый из которых содержит значение с плавающей запятой от -1 до 1. Первые 256 значений представляют левый канал, а следующие 256 значений — правый. Первый цикл for считывает первые 256 значений (левый стереоканал) и рисует линию от одной точки к другой с помощью метода Graphics.lineTo(). (Векторное графическое представление звуковой волны записывается непосредственно на объекте Sprite класса.) Байты звука считываются как 32-разрядное число с плавающей запятой из потока байтов и умножаются на высоту графика, чтобы получить вертикальный диапазон кривой. Ширина равна удвоенной ширине длины канала. Второй цикл for считывает следующие 256 значений (правый стереоканал) и строит кривую в обратном порядке. Методы g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); и g.lineTo(0, PLOT_HEIGHT); рисуют основную линию для графиков волн. Полученная кривая волны похожа на зеркальное отражение первой.

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.utils.ByteArray; import flash.text.TextField; public class SoundMixer_computeSpectrumExample extends Sprite { public function SoundMixer_computeSpectrumExample() { var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("Song1.mp3"); snd.load(req); var channel:SoundChannel; channel = snd.play(); addEventListener(Event.ENTER_FRAME, onEnterFrame); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); } private function onEnterFrame(event:Event):void { var bytes:ByteArray = new ByteArray(); const PLOT_HEIGHT:int = 200; const CHANNEL_LENGTH:int = 256; SoundMixer.computeSpectrum(bytes, false, 0); var g:Graphics = this.graphics; g.clear(); g.lineStyle(0, 0x6600CC); g.beginFill(0x6600CC); g.moveTo(0, PLOT_HEIGHT); var n:Number = 0; for (var i:int = 0; i < CHANNEL_LENGTH; i++) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); g.endFill(); g.lineStyle(0, 0xCC0066); g.beginFill(0xCC0066, 0.5); g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); for (i = CHANNEL_LENGTH; i > 0; i--) { n = (bytes.readFloat() * PLOT_HEIGHT); g.lineTo(i * 2, PLOT_HEIGHT - n); } g.lineTo(0, PLOT_HEIGHT); g.endFill(); } private function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); } } }
areSoundsInaccessible()flash.utils.ByteArrayflash.media.Soundflash.media.SoundLoaderContext.checkPolicyFile
stopAll Останавливает воспроизведение всех звуков, воспроизводимых в данный момент. Останавливает воспроизведение всех звуков, воспроизводимых в данный момент.

> Во Flash Professional этот метод не останавливает воспроизведение. Звуки, настроенные для потоковой передачи, снова будут воспроизводиться по мере перехода точки воспроизведения к кадрам, в которых они находятся.

При использовании данного свойства необходимо учесть следующую модель безопасности:

  • По умолчанию вызов метода SoundMixer.stopAll() прекращает воспроизведение только тех звуков, которые находятся в той же изолированной программной среде безопасности, что и вызывающий его объект. Все звуки, воспроизведение которых было начато из другой изолированной программной среды, продолжают воспроизводиться.
  • При загрузке звука с помощью метода load() класса Sound можно задать параметр context, представленный объектом SoundLoaderContext. Если задать свойству checkPolicyFile объекта SoundLoaderContext значение true, проигрыватель Flash Player или Adobe AIR проверяет наличие файла междоменной политики на сервере, с которого загружается звук. Если на сервере есть файл междоменной политики, который допускает домен вызывающего содержимого, то файл может остановить загруженный звук с помощью метода SoundMixer.stopAll(); если же нет, то этого сделать нельзя.

Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application (содержимое, установленное с приложением AIR).

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

В следующем примере метод stopAll() используется для отключения двух звуков, воспроизводимых одновременно.

В конструкторе загружаются и запускаются два разных звуковых файла. Первый звук загружается локально и назначается звуковому каналу. (Предполагается, что файл находится в том же каталоге, что и SWF-файл.) Второй файл загружается и передается в виде потока с сайта Adobe. Для использования метода SoundMixer.stopAll() должны быть доступными все звуки. (Для проверки файла междоменной политики может использоваться объект SoundLoaderContext.) Для каждого звука настроен прослушиватель событий, который вызывается в случае возникновения ошибки ввода/вывода при загрузке звукового файла. Также создается текстовое поле muteButton. Оно прослушивает события щелчка, при которых вызывается метод muteButtonClickHandler().

Если в методе muteButtonClickHandler() текстовое поле содержит MUTE, то метод areSoundsInaccessible() проверяет, имеет ли микшер доступ к файлам. Если файлы доступны, метод stopAll() выключает звуки. При повторном щелчке по текстовому полю возобновляется воспроизведение первого звука, а в текстовом поле снова отображается MUTE. На этот раз метод stopAll() выключает один воспроизводимый звук. Обратите внимание, что метод stop() звукового канала также можно использовать для выключения определенного звука, назначенного каналу. (Для функционального использования канала звук необходимо повторно назначать каналу при каждом вызове метода play().)

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundLoaderContext; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.events.IOErrorEvent; public class SoundMixer_stopAllExample extends Sprite { private var firstSound:Sound = new Sound(); private var secondSound:Sound = new Sound(); private var muteButton:TextField = new TextField(); private var channel1:SoundChannel = new SoundChannel(); public function SoundMixer_stopAllExample() { firstSound.load(new URLRequest("mySound.mp3")); secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3")); firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler); secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler); channel1 = firstSound.play(); secondSound.play(); muteButton.autoSize = TextFieldAutoSize.LEFT; muteButton.border = true; muteButton.background = true; muteButton.text = "MUTE"; muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler); this.addChild(muteButton); } private function muteButtonClickHandler(event:MouseEvent):void { if(muteButton.text == "MUTE") { if(SoundMixer.areSoundsInaccessible() == false) { SoundMixer.stopAll(); muteButton.text = "click to play only one of sound."; } else { muteButton.text = "The sounds are not accessible."; } } else { firstSound.play(); muteButton.text = "MUTE"; } } private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void { trace(errorEvent.text); } } }
bufferTime Число секунд для предварительной загрузки внедренного потокового звука в буфер перед началом передачи звука в поток.int Число секунд для предварительной загрузки внедренного потокового звука в буфер перед началом передачи звука в поток. Данные в загруженном звуке, включая время буферизации, не могут быть получены SWF-файлом, находящимся в другом домене, если не используется файл междоменной политики. Дополнительные сведения о безопасности и звуке см. в описании класса Sound. Данные в загруженном звуке, включая время буферизации, не могут быть получены кодом файла, находящегося в другом домене, если не используется файл междоменной политики. Однако код в изолированной программной среде приложения AIR имеет доступ к данным звуковых файлов, полученных из любого источника. Дополнительные сведения о безопасности и звуке см. в описании класса Sound.

Свойство SoundMixer.bufferTime затрагивает только время буферизации для встроенных потоковых звуков в SWF-файле и не зависит от динамически созданных объектов Sound (т.е. объектов Sound, созданных в ActionScript). Значение свойства SoundMixer.bufferTime не может переопределять или задавать значение по умолчанию для времени буферизации, заданного объектом SoundLoaderContext, который передан методу Sound.load().

Sound
soundTransform Объект SoundTransform, управляющий глобальными свойствами звука.flash.media:SoundTransform Объект SoundTransform, управляющий глобальными свойствами звука. Объект SoundTransform включает свойства для настройки громкости, панорамы, назначения левого и правого динамиков. Объект SoundTransform, использованный в данном свойстве, передает окончательные параметры звука, которые применяются ко всем звукам после задания отдельных параметров звука. SoundTransform
CameraUI Класс CameraUI позволяет захватывать неподвижное изображение или видео с использованием стандартной программы камеры на устройстве.flash.events:EventDispatcher Класс CameraUI позволяет захватывать неподвижное изображение или видео с использованием стандартной программы камеры на устройстве.

Метод launch() отправляет запрос на открытие стандартной программы камеры на устройстве. Захваченное изображение или видео доступно в объекте MediaEvent, отправленном для события complete. Так как стандартная программа камеры позволяет сохранять изображение или видео в разнообразных форматах, нельзя гарантировать возможность загрузки и отображения возвращенного объекта мультимедиа в среде выполнения AIR.

На некоторых платформах объект мультимедиа, возвращенный камерой, доступен как предварительный образ мультимедиа в виде файла. На других устройствах предварительный образ мультимедиа не основан на файлах, и свойства file и relativePath объекта MediaPromise имеют значения null. Не используйте эти свойства в коде, который используется на нескольких платформах.

На некоторых платформах объект мультимедиа автоматически сохраняется в библиотеке мультимедиа устройства. На тех платформах, где изображения и видеоролики не сохраняются автоматически стандартным приложением камеры, объекты мультимедиа можно сохранять с помощью функции CameraRoll addBitmapData ().

На платформе Android стандартная программа камеры не открывается, если внешняя карта для хранения данных недоступна (например, когда пользователь подключил карту как запоминающее устройство USB большой емкости). Кроме того, программа AIR, которая запускает камеру, теряет фокус. Если на устройстве недостаточно ресурсов, работа программы AIR может быть завершена операционной системой до завершения захвата мультимедийного содержимого.

Поддержка в профилях AIR: эта функция поддерживается на мобильных устройствах, но не поддерживается в компьютерных операционных системах или средах AIR для телевизионных устройств. Используйте свойство CameraUI.isSupported, чтобы проверить наличие поддержки в среде выполнения. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

В следующем примере класс CameraUI используется для запуска стандартной программы камеры на устройстве. Когда пользователь делает снимок, изображение добавляется в список отображения. package { import flash.desktop.NativeApplication; import flash.display.Loader; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.ErrorEvent; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MediaEvent; import flash.media.CameraUI; import flash.media.MediaPromise; import flash.media.MediaType; public class CameraUIStillImage extends MovieClip{ private var deviceCameraApp:CameraUI = new CameraUI(); private var imageLoader:Loader; public function CameraUIStillImage() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraUI.isSupported ) { trace( "Initializing camera..." ); deviceCameraApp.addEventListener( MediaEvent.COMPLETE, imageCaptured ); deviceCameraApp.addEventListener( Event.CANCEL, captureCanceled ); deviceCameraApp.addEventListener( ErrorEvent.ERROR, cameraError ); deviceCameraApp.launch( MediaType.IMAGE ); } else { trace( "Camera interface is not supported."); } } private function imageCaptured( event:MediaEvent ):void { trace( "Media captured..." ); var imagePromise:MediaPromise = event.data; if( imagePromise.isAsync ) { trace( "Asynchronous media promise." ); imageLoader = new Loader(); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, asyncImageLoaded ); imageLoader.addEventListener( IOErrorEvent.IO_ERROR, cameraError ); imageLoader.loadFilePromise( imagePromise ); } else { trace( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); showMedia( imageLoader ); } } private function captureCanceled( event:Event ):void { trace( "Media capture canceled." ); NativeApplication.nativeApplication.exit(); } private function asyncImageLoaded( event:Event ):void { trace( "Media loaded in memory." ); showMedia( imageLoader ); } private function showMedia( loader:Loader ):void { this.addChild( loader ); } private function cameraError( error:ErrorEvent ):void { trace( "Error:" + error.text ); NativeApplication.nativeApplication.exit(); } } }
Микаэль Шез (Michael Chaize): Android, AIR и камераcancel Событие cancel отправляется, когда пользователь закрывает пользовательский интерфейс камеры, не сохраняя изображение или видео.flash.events.Event.CANCELflash.events.Event Событие cancel отправляется, когда пользователь закрывает пользовательский интерфейс камеры, не сохраняя изображение или видео. error Событие error отправляется, если не удается открыть стандартную камеру.flash.events.ErrorEvent.ERRORflash.events.ErrorEvent Событие error отправляется, если не удается открыть стандартную камеру. complete Событие complete отправляется после захвата пользователем изображения или видео в пользовательском интерфейсе камеры.flash.events.MediaEvent.COMPLETEflash.events.MediaEvent Событие complete отправляется после захвата пользователем изображения или видео в пользовательском интерфейсе камеры. CameraUI Создает объект CameraUI. Создает объект CameraUI. launch Запускает стандартную программу камеры на устройстве.requestedMediaTypeStringТип захватываемого объекта мультимедиа. Действительные значения для этого параметра определены в классе MediaType:
  • MediaType.IMAGE
  • MediaType.VIDEO
Запускает стандартную программу камеры на устройстве.

С помощью этого класса можно захватить неподвижные изображения или видео. При записи видео на устройстве используется профиль видеокамеры «Низкое качество».

При вызове метода launch() на устройстве открывается стандартная программа камеры. Программа AIR теряет фокус и ожидает, когда пользователь получит неподвижное изображение или завершит запись видео. Когда пользователь выполнит захват необходимого объекта мультимедиа, программа AIR снова получает фокус и этот объект CameraUI отправляет событие complete. Если пользователь отменяет операцию, этот объект CameraUI отправляет событие cancel.

Примечание. Программа AIR может быть закрыта операционной системой Android, если она работает в фоновом режиме и ожидает, когда пользователь завершит получение изображения или видео. В этом случае пользователь должен перезапустить программу. Программа AIR не отправляет событие media для предыдущего захвата изображения.

Доступ к захваченному мультимедийному файлу можно получить с использованием свойства data объекта MediaEvent, отправленного для события complete. Это свойство является экземпляром класса MediaPromise, который можно загрузить в программу с использованием метода loadFilePromise() класса Loader. Обратите внимание, что камера устройства поддерживает сохранение захваченного мультимедийного содержимого во множестве форматов. В этом отношении видео является более проблематичным. Отображение захваченного мультимедийного содержимого в программе AIR может быть невозможно.

MediaTypeMediaPromiseLoader.loadFilePromise()completeflash.events:MediaEventОтправляется после захвата объекта мультимедиа. Отправляется после захвата объекта мультимедиа.cancelflash.events:EventОтправляется, когда пользователь выходит из встроенной программы камеры, не захватив объект мультимедиа. Отправляется, когда пользователь выходит из встроенной программы камеры, не захватив объект мультимедиа.errorflash.events:ErrorEventОтправляется, если стандартная программа камеры уже используется. Отправляется, если стандартная программа камеры уже используется.errorflash.events:ErrorEventОтправляется, если программа AIR, работающая в фоновом режиме, вызывает эту функцию. Отправляется, если программа AIR, работающая в фоновом режиме, вызывает эту функцию.
isSupported Сообщает о поддержке класса CameraUI на текущем устройстве.Boolean Сообщает о поддержке класса CameraUI на текущем устройстве.
SoundCodec Класс SoundCodec является перечислением значений констант, с помощью которых задается свойство codec класса Microphone.Object Класс SoundCodec является перечислением значений констант, с помощью которых задается свойство codec класса Microphone. NELLYMOSER Используется для указания того, что для сжатия аудиоданных должен использоваться кодек Nellymoser.NellyMoserString Используется для указания того, что для сжатия аудиоданных должен использоваться кодек Nellymoser. Данная константа является значением по умолчанию свойства Microphone.codec. SPEEX Используется для указания того, что для сжатия аудиоданных должен использоваться кодек Speex.SpeexString Используется для указания того, что для сжатия аудиоданных должен использоваться кодек Speex. CameraRoll Класс CameraRoll позволяет получать доступ к данным изображения в системной библиотеке мультимедиа или в альбоме «Фотопленка». Поддержка в профилях AIR: эта функция поддерживается на мобильных устройствах, но не поддерживается в компьютерных операционных системах или средах AIR для телевизионных устройств.flash.events:EventDispatcher Класс CameraRoll позволяет получать доступ к данным изображения в системной библиотеке мультимедиа или в альбоме «Фотопленка».

Поддержка в профилях AIR: эта функция поддерживается на мобильных устройствах, но не поддерживается в компьютерных операционных системах или средах AIR для телевизионных устройств. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

Метод CameraRoll.addBitmapData() добавляет изображение в соответствующую библиотеку мультимедиа на устройстве. Чтобы в среде выполнения узнать, поддерживает ли приложение метод CameraRoll.addBitmapData(), проверьте свойство CameraRoll.addBitmapData.

Метод CameraRoll.browseForImage() открывает диалоговое окно выбора изображения, в котором пользователь может выбрать изображение в библиотеке мультимедиа. Когда пользователь выбирает изображение, объект CameraRoll отправляет событие select. Используйте объект MediaEvent, отправленный для этого события, для доступа к выбранному изображению. Чтобы в среде выполнения узнать, поддерживает ли программа метод CameraRoll.browseForImage(), проверьте свойство CameraRoll.supportsBrowseForImage.

cancel Отправляется, когда пользователь отменяет операцию просмотра изображений, не выбирая изображение.flash.events.Event.CANCELflash.events.Event Отправляется, когда пользователь отменяет операцию просмотра изображений, не выбирая изображение. select Отправляется, когда пользователь выбирает изображение в библиотеке мультимедиа устройства.flash.events.MediaEvent.SELECTflash.events.MediaEvent Отправляется, когда пользователь выбирает изображение в библиотеке мультимедиа устройства.

Объект MediaEvent, отправленный для этого события, предоставляет доступ к выбранному мультимедийному содержимому.

error Событие error отправляется при возникновении ошибки.flash.events.ErrorEvent.ERRORflash.events.ErrorEvent Событие error отправляется при возникновении ошибки.

Источники ошибок:

  • Невозможно открыть средство просмотра изображений.
  • Средство просмотра изображений уже используется.
  • Программа AIR, работающая в фоновом режиме, пытается выполнить просмотр изображения.
  • Невозможно добавить изображение в библиотеку мультимедиа.
  • Вызванный метод не поддерживается на устройстве.
complete Сигнализирует о том, что операция addBitmapData() успешно завершена.flash.events.Event.COMPLETEflash.events.Event Сигнализирует о том, что операция addBitmapData() успешно завершена. CameraRoll Создает объект CameraRoll. Создает объект CameraRoll.

В среде ActionScript поддерживается только одна библиотека мультимедиа. Все объекты CameraRoll сохраняются в одном хранилище изображений.

addBitmapData Добавляет изображение в альбом «Фотопленка» устройства.bitmapDataflash.display:BitmapDataобъект BitmapData, содержащий изображение для добавления в программу «Фотопленка». Добавляет изображение в альбом «Фотопленка» устройства.

Чтобы в среде выполнения узнать, поддерживает ли приложение метод CameraRoll.addBitmapData(), проверьте свойство CameraRoll.addBitmapData.

browseForImage Открывает диалоговое окно просмотра изображений, в котором пользователь может выбрать существующее изображение в альбоме «Фотопленка» устройства. Открывает диалоговое окно просмотра изображений, в котором пользователь может выбрать существующее изображение в альбоме «Фотопленка» устройства.

Когда пользователь выбирает изображение, этот экземпляр CameraRoll отправляет событие select, содержащее объект MediaEvent. Используйте свойство data объекта MediaEvent для загрузки изображения. Свойство data является объектом MediaPromise, который можно загрузить с помощью метода loadFilePromise() класса Loader.

Чтобы в cреде выполнения узнать, поддерживает ли программа метод CameraRoll.browseForImage(), проверьте свойство CameraRoll.supportsBrowseForImage.

package flash.media.examples { import flash.media.CameraRoll; import flash.media.MediaPromise; import flash.media.MediaType; import flash.events.MediaEvent; import flash.events.Event; import flash.display.Loader; import flash.display.Sprite; import flash.events.IOErrorEvent; import flash.display.StageAlign; import flash.display.StageScaleMode; public class CameraRollTest extends Sprite{ private var mediaSource:CameraRoll = new CameraRoll(); public function CameraRollTest() { this.stage.align = StageAlign.TOP_LEFT; this.stage.scaleMode = StageScaleMode.NO_SCALE; if( CameraRoll.supportsBrowseForImage ) { log( "Browsing for image..." ); mediaSource.addEventListener( MediaEvent.SELECT, imageSelected ); mediaSource.addEventListener( Event.CANCEL, browseCanceled ); mediaSource.browseForImage(); } else { log( "Browsing in camera roll is not supported."); } } private var imageLoader:Loader; private function imageSelected( event:MediaEvent ):void { log( "Image selected..." ); var imagePromise:MediaPromise = event.data; imageLoader = new Loader(); if( imagePromise.isAsync ) { log( "Asynchronous media promise." ); imageLoader.contentLoaderInfo.addEventListener( Event.COMPLETE, imageLoaded ); imageLoader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR, imageLoadFailed ); imageLoader.loadFilePromise( imagePromise ); } else { log( "Synchronous media promise." ); imageLoader.loadFilePromise( imagePromise ); this.addChild( imageLoader ); } } private function browseCanceled( event:Event ):void { log( "Image browse canceled." ); } private function imageLoaded( event:Event ):void { log( "Image loaded asynchronously." ); this.addChild( imageLoader ); } private function imageLoadFailed( event:Event ):void { log( "Image load failed." ); } private function log( text:String ):void { trace( text ); } } }
MediaEventMediaPromiseLoader.loadFilePromise()selectflash.events:MediaEventОтправляется, когда пользователь выбирает изображение. Отправляется, когда пользователь выбирает изображение.cancelflash.events:EventОтправляется, когда пользователь отменяет операцию обзора. Отправляется, когда пользователь отменяет операцию обзора.errorflash.events:ErrorEventОтправляется, если стандартное средство просмотра изображений уже используется. Отправляется, если стандартное средство просмотра изображений уже используется.errorflash.events:ErrorEventОтправляется, если программа AIR, работающая в фоновом режиме, вызывает эту функцию. Отправляется, если программа AIR, работающая в фоновом режиме, вызывает эту функцию.
supportsAddBitmapData Поддерживается ли метод CameraRoll.addBitmapData().Boolean Поддерживается ли метод CameraRoll.addBitmapData(). В настоящий момент эта функция поддерживается только в приложениях AIR на мобильных устройствах. supportsBrowseForImage Сообщает о наличии поддержки метода CameraRoll.browseForImage().BooleanСообщает о наличии поддержки метода CameraRoll browseForImage(). Сообщает о наличии поддержки метода CameraRoll.browseForImage(). В настоящий момент эта функция поддерживается только в приложениях AIR на мобильных устройствах.
Microphone Используйте класс Microphone для отслеживания или захвата звука с микрофона.flash.events:EventDispatcher Используйте класс Microphone для отслеживания или захвата звука с микрофона.

Чтобы получить ссылку на экземпляр Microphone, используйте метод Microphone.getMicrophone() или Microphone.getEnhancedMicrophone(). Расширенный экземпляр микрофона может выполнять акустическое эхоподавление. Используйте акустическое эхоподавление для создания аудио- или видеоприложений, работающих в реальном времени, в которых не требуются наушники.

Создание приложения чата в реальном времени

Чтобы создать приложение чата в реальном времени, выполните захват звука и отправьте его на сервер Flash Media Server. Используйте классы NetConnection и NetStream для отправки аудиопотока на сервер Flash Media Server. Сервер Flash Media Server может транслировать аудиоданные другим клиентам. Чтобы создать приложение чата, в котором не требуются наушники, используйте акустическое эхоподавление. Акустическое эхоподавление предотвращает появление петли обратной связи, которая возникает, когда звук захватывается микрофоном, выводится на динамики и снова захватывается микрофоном. Чтобы использовать акустическое эхоподавление, вызовите метод Microphone.getEnhancedMicrophone() для получения ссылки на экземпляр Microphone. Задайте свойство Microphone.enhancedOptions в качестве значения экземпляра класса MicrophoneEnhancedOptions для настройки параметров.

Локальное воспроизведение звука с микрофона

Вызовите метод setLoopback() объекта Microphone, чтобы передать звук с микрофона непосредственно на локальный компьютер или аудиовыход устройства. Существует внутренняя угроза появления неуправляемой звуковой обратной связи в том случае, если выходные аудиоданные могут быть захвачены микрофоном. Метод setUseEchoSuppression() позволяет уменьшить, но не исключить, риск усиления обратной связи.

Захват звука с микрофона для локальной записи или обработки

Для захвата звука с микрофона прослушайте события sampleData, отправляемые экземпляром Microphone. Объект SampleDataEvent, отправленный для этого события, содержит аудиоданные.

Сведения о записи видео см. в описании класса Camera.

Поддержка микрофона в среде выполнения

Класс Microphone не поддерживается в среде Flash Player, работающей в мобильном браузере.

Поддержка в профилях AIR: класс Microphone поддерживается в компьютерных операционных системах, но не на всех мобильных устройствах. Он не поддерживается в среде AIR для телевизионных устройств. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

Используйте свойство Microphone.isSupported, чтобы проверить наличие поддержки в среде выполнения. Обратите внимание, что в среде AIR для телевизионных устройств Microphone.isSupported имеет значение true, но Microphone.getMicrophone() всегда возвращает null.

Элементы управления конфиденциальностью

В среде Flash Player отображается диалоговое окно «Конфиденциальность», в котором пользователь может предоставить или запретить доступ к микрофону. Размер окна программы должен составлять не менее 215 x 138 пикселов, что является минимальным размером для отображения диалогового окна, или доступ запрещается автоматически.

Содержимому, выполняющемуся в изолированной программной среде программы AIR, не требуются разрешения для доступа к микрофону, и диалоговое окно не отображается. Содержимому AIR, выполняющемуся за пределами изолированной программной среды программы, требуется разрешение, и диалоговое окно «Конфиденциальность» отображается.

В следующем примере записывается звук с эхокомпенсацией, после того как пользователь разрешает доступ к микрофону на своем компьютере. Метод Security.showSettings() отображает диалоговое окно проигрывателя Flash Player, в котором запрашивается разрешение на доступ к микрофону пользователя. Вызов setLoopBack(true) переводит ввод на локальный динамик, чтобы при выполнения примера можно быть слышать звук.

Добавляется два прослушивателя для событий activity и status. Событие activity отправляется при запуске и после окончания (если это применимо) сеанса методу activityHandler(), который отслеживает информацию события. Событие status отправляется, если присоединенный объект Microphone сообщает информацию о состоянии. Его получает и отслеживает метод statusHandler().

Примечание. Для правильной работы примера к компьютеру должен быть подключен микрофон.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.media.Cameraflash.media.MicrophoneEnhancedModeflash.media.MicrophoneEnhancedOptionsаЙо Бинити (aYo Binitie). Реализация акустического эхоподавления в приложениях Flash или FlexКристоф Конрац (Cristophe Coenraets): Голосовые заметки для платформы AndroidМикаэль Шез (Michael Chaize): AIR, Android и микрофонstatus Отправляется, когда микрофон сообщает о своем состоянии.flash.events.StatusEvent.STATUSflash.events.StatusEvent Отправляется, когда микрофон сообщает о своем состоянии. Если свойство code имеет значение Microphone.Muted, пользователь отказался предоставить SWF-файлу доступ к микрофону. Если свойство code имеет значениеMicrophone.Unmuted, пользователь предоставил SWF-файлу доступ к микрофону.

События состояния не отправляются в программах Adobe AIR; динамическое изменение прав доступа к микрофону невозможно. На большинстве платформ программы AIR могут всегда получать доступ к микрофону. На платформе Android для программы должно быть указано разрешение Android RECORD_AUDIO в дескрипторе программы. Или Android полностью запрещает доступ к микрофону.

Microphone.getMicrophone()
sampleData Отправляется, когда в буфере микрофона есть звуковые данные.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Отправляется, когда в буфере микрофона есть звуковые данные.

Свойство Microphone.rate определяет количество образцов, создаваемых в секунду. Число образцов на событие является коэффициентом, состоящим из числа образов в секунду и времени ожидания между вызовами события.

В следующем примере в течение 4 секунд захватываются образцы звука с микрофона по умолчанию, а затем аудио воспроизводится. Убедитесь, что к компьютеру подключен микрофон. Прослушиватель micSampleDataHandler() регистрирует событие sampleData объекта Microphone. Метод micSampleDataHandler() получает образцы, когда они становятся доступными, а затем добавляет их значения в объект ByteArray. Объекту Timer задано значение 4 секунды. Объект Timer удаляет событие sampleData прослушивателя событий объекта Microphone, создает объект Sound и добавляет в него прослушиватель события sampleData. Прослушиватель события sampleData для объекта Sound, метод playbackSampleHandler(), передает образцы звука объекту Sound для воспроизведения. Эти образцы аудио извлекаются из объекта ByteArray, в котором сохранялись образцы, захваченные объектом Microphone. Образцы записываются в объект Sound два раза, так как образцы объекта Microphone записываются в режиме моно, а объект Sound запрашивает стереопары образцов. Свойству rate объекта Microphone задается значение 44 в соответствии с частотой дискретизации 44 кГц, которую используют объекты Sound. const DELAY_LENGTH:int = 4000; var mic:Microphone = Microphone.getMicrophone(); mic.setSilenceLevel(0, DELAY_LENGTH); mic.gain = 100; mic.rate = 44; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); var timer:Timer = new Timer(DELAY_LENGTH); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); var soundBytes:ByteArray = new ByteArray(); function micSampleDataHandler(event:SampleDataEvent):void { while(event.data.bytesAvailable) { var sample:Number = event.data.readFloat(); soundBytes.writeFloat(sample); } } function timerHandler(event:TimerEvent):void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler); timer.stop(); soundBytes.position = 0; var sound:Sound = new Sound(); sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler); sound.play(); } function playbackSampleHandler(event:SampleDataEvent):void { for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++) { var sample:Number = soundBytes.readFloat(); event.data.writeFloat(sample); event.data.writeFloat(sample); } } В следующем примере записывается звук с эхокомпенсацией, после того как пользователь разрешает доступ к микрофону на своем компьютере. Метод Security.showSettings() отображает диалоговое окно проигрывателя Flash Player, в котором запрашивается разрешение на доступ к микрофону пользователя. Вызов setLoopBack(true) переводит ввод на локальный динамик, чтобы при выполнения примера можно быть слышать звук.

Добавляется два прослушивателя для событий activity и status. Событие activity отправляется при запуске и после окончания (если это применимо) сеанса методу activityHandler(), который отслеживает информацию события. Событие status отправляется, если присоединенный объект Microphone сообщает информацию о состоянии. Его получает и отслеживает метод statusHandler().

Примечание. Для правильной работы примера к компьютеру должен быть подключен микрофон.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Microphone; import flash.system.Security; public class MicrophoneExample extends Sprite { public function MicrophoneExample() { var mic:Microphone = Microphone.getMicrophone(); Security.showSettings("2"); mic.setLoopBack(true); if (mic != null) { mic.setUseEchoSuppression(true); mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler); mic.addEventListener(StatusEvent.STATUS, statusHandler); } } private function activityHandler(event:ActivityEvent):void { trace("activityHandler: " + event); } private function statusHandler(event:StatusEvent):void { trace("statusHandler: " + event); } } }
flash.events.SampleDataEvent
activity Отправляется, когда микрофон начинает или заканчивает запись из-за отсутствия звука.flash.events.ActivityEvent.ACTIVITYflash.events.ActivityEvent Отправляется, когда микрофон начинает или заканчивает запись из-за отсутствия звука.

Чтобы указать, сколько звука требуется для запуска события со свойством activating в значении true или сколько времени должно пройти без звука для запуска этого события со свойством activating в значении false, используйте метод Microphone.setSilenceLevel().

Чтобы объект Microphone мог отправлять события активности, программа должна отслеживать входные данные путем вызова метода setLoopback( true ), прослушивания событий sampleData или подключения микрофона к объекту NetStream.

setSilenceLevel()
getEnhancedMicrophone Возвращает ссылку на расширенный объект Microphone, который может выполнить акустическое эхоподавление.Ссылка на объект Microphone для записи аудио. В случае неудачной инициализации расширенного аудио возвращает значение null. flash.media:Microphoneindexint-1Значение индекса микрофона. Возвращает ссылку на расширенный объект Microphone, который может выполнить акустическое эхоподавление. Используйте акустическое эхоподавление для создания приложений аудио- или видеочата, в которых не требуются наушники.

Параметр index для методов Microphone.getEnhancedMicrophone() и Microphone.getMicrophone() работает одинаково.

Важно. В любой момент времени доступен только один экземпляр расширенного устройства микрофона. Все остальные экземпляры объекта Microphone перестают предоставлять аудиоданные и получают событие StatusEvent со свойством code, имеющим значение Microphone.Unavailable. В случае неудачной инициализации расширенного аудио при вызове этого метода возвращается значение null, установка значения Microphone.enhancedOptions не имеет силы и все существующие экземпляры Microphone работают прежде.

Чтобы настроить расширенный объект Microphone, задайте свойство Microphone.enhancedOptions. Следующий код демонстрирует использование расширенного объекта Microphone и полнодуплексного акустического эхоподавления при локальном тестировании.

	     var mic:Microphone = Microphone.getEnhancedMicrophone();
	     var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();
	     options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;
	     mic.enhancedOptions = options;
	     mic.setLoopBack(true);
	 

Метод setUseEchoSuppression () игнорируется при использовании акустического эхоподавления.

Когда SWF-файл пытается обратиться к объекту, возвращенному методом Microphone.getEnhancedMicrophone(), например при вызове метода NetStream.attachAudio(), проигрыватель Flash Player отображает диалоговое окно «Конфиденциальность», с помощью которого пользователь может разрешить или запретить доступ к микрофону. (Убедитесь в том, что размеры рабочей области составляют не менее 215 х 138 пикселов. Это минимальный размер, необходимый проигрывателю Flash Player для отображения диалогового окна.)

Microphone.getMicrophone()Microphone.enhancedOptionsMicrophone.status
getMicrophone Возвращает ссылку на объект Microphone для записи аудио.Ссылка на объект Microphone для записи аудио. flash.media:Microphoneindexint-1Значение индекса микрофона. Возвращает ссылку на объект Microphone для записи аудио. Для начала записи аудио, необходимо присоединить объект Microphone к объекту NetStream (см. NetStream.attachAudio()).

Многочисленные вызовы метода Microphone.getMicrophone() ссылаются на один микрофон. Таким образом, если код содержит строки mic1 = Microphone.getMicrophone() и mic2 = Microphone.getMicrophone(), то и mic1 и mic2 ссылаются на один и тот же микрофон (по умолчанию).

Как правило, не следует передавать значение для index. Просто используйте метод Microphone.getMicrophone() для получения ссылки на микрофон по умолчанию. В разделе настроек микрофона на панели «Параметры Flash Player» пользователь может задать микрофон по умолчанию, который должно использовать приложение. (Доступ к панели параметров настройки Flash Player можно получить, щелкнув правой кнопкой мыши по содержимому Flash Player в веб-браузере.) Если передать значение для параметра index, то метод может ссылаться не на тот микрофон, который выберет пользователь. Параметр index можно использовать в редких случаях, например, если приложение записывает аудио одновременно с двух микрофонов. Содержимое, выполняемое в Adobe AIR, также использует установку Flash Player для микрофона по умолчанию.

Используйте свойство Microphone.index для получения значения индекса текущего объекта Microphone. Затем можно передать это значение другим методам класса Microphone.

Когда SWF-файл пытается обратиться к объекту, возвращенному методом Microphone.getMicrophone(), например при вызове метода NetStream.attachAudio(), проигрыватель Flash Player отображает диалоговое окно «Конфиденциальность», с помощью которого пользователь может разрешить или запретить доступ к микрофону. (Убедитесь в том, что размеры рабочей области составляют не менее 215 х 138 пикселов. Это минимальный размер, необходимый проигрывателю Flash Player для отображения диалогового окна.)

Когда пользователь отвечает на запрос диалогового окна, отправляется соответствующее событие status. Также можно проверить свойство Microphone.muted для определения, предоставил пользователь доступ к микрофону или нет.

Если метод Microphone.getMicrophone() возвращает значение null, это значит, что микрофон используется другим приложением или в системе не установлены микрофоны. Чтобы узнать, установлены ли микрофоны, используйте Microphones.names.length. Чтобы отобразить панель «Настройки микрофона» проигрывателя Flash Player, где пользователь может выбрать микрофон для метода Microphone.getMicrophone, используйте метод Security.showSettings().

Следующий пример демонстрирует, как можно запросить доступ к микрофону пользователя с помощью статического метода Microphone.getMicrophone() и прослушивания события status. Пример предоставлен ActionScriptExamples.com. var mic:Microphone = Microphone.getMicrophone(); mic.setLoopBack(); mic.addEventListener(StatusEvent.STATUS, mic_status); var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; tf.text = "Detecting microphone..."; addChild(tf); function mic_status(evt:StatusEvent):void { tf.text = "Microphone is muted?: " + mic.muted; switch (evt.code) { case "Microphone.Unmuted": tf.appendText("\n" + "Microphone access was allowed."); break; case "Microphone.Muted": tf.appendText("\n" + "Microphone access was denied."); break; } }
Microphone.statusflash.net.NetStream.attachAudio()flash.system.Security.showSettings()statusflash.events:StatusEventОтправляется, когда микрофон сообщает о своем состоянии. Если свойство code имеет значение Microphone.Muted, пользователь отказался предоставить SWF-файлу доступ к микрофону. Если свойство code имеет значение Microphone.Unmuted, пользователь предоставил SWF-файлу доступ к микрофону. Отправляется, когда микрофон сообщает о своем состоянии.
setLoopBack Направляет записываемое микрофоном аудио на локальные динамики.stateBooleantrue Направляет записываемое микрофоном аудио на локальные динамики. setSilenceLevel Задает минимальный входной уровень, который будет обрабатываться как звук и (дополнительно) продолжительность тишины, по которой настоящую тишину можно будет отличить от паузы.silenceLevelNumberУровень звука, необходимый для активации микрофона и передачи события activity. Диапазон допустимых значений — от 0 до 100. timeoutint-1Число миллисекунд, которое должно пройти без активности, прежде чем проигрыватель Flash Player или Adobe AIR зарегистрирует остановку звука и отправит событие dispatch. Значение по умолчанию 2000 (две секунды). (Примечание. Значение по умолчанию, показываемое в подписи, -1, — это внутреннее значение, предписывающее проигрывателю Flash Player или Adobe AIR использовать значение 2000.) Задает минимальный входной уровень, который будет обрабатываться как звук и (дополнительно) продолжительность тишины, по которой настоящую тишину можно будет отличить от паузы.
  • Чтобы микрофон совсем не улавливал звук, передайте значение 100 для silenceLevel; в этом случае событие activity никогда не отправляется.
  • Чтобы определить уровень звука, в данный момент улавливаемый микрофоном, используйте Microphone.activityLevel.

Speex включает систему обнаружения речевой активности (Voice Activity Detection, VAD) и обеспечивает автоматическое уменьшение полосы пропускания при отсутствии речевой активности. При использовании кодека Speex компания Adobe рекомендует установить значение уровня тишины на 0.

Обнаружение активности — это способность определять, когда уровень звука указывает на то, что пользователь говорит. Когда пользователь не говорит, можно экономить полосу пропускания, так как не требуется передавать соответствующий аудиопоток. Эти сведения также можно использовать для визуальной обратной связи, чтобы сообщить пользователям о том, что они (или другие) молчат.

Значения тишины прямо соответствуют значениям активности. Полную тишину представляет значение активности 0. Постоянный громкий шум (настолько громкий, насколько это возможно зарегистрировать на основе текущей настройки усиления) соответствует значению активности 100. После соответствующей регулировки усиления значение активности составляет меньше, чем значение тишины, когда вы не говорите. Во время разговора значение активности превышает значение тишины.

Этот метод похож на Camera.setMotionLevel(); они оба используются для определения момента отправки события activity. Однако эти методы имеют в значительной степени различное влияние на публикацию потоков.

  • Метод Camera.setMotionLevel() предназначен для определения движения и не влияет на использование полосы пропускания. Даже если видеопоток не обнаруживает движения, видео все равно передается.
  • Метод Microphone.setSilenceLevel() предназначен для оптимизации использования полосы пропускания. Когда аудиопоток считается тихим, аудиоданные не передаются. Вместо этого отправляется одно сообщение, свидетельствующее о наступлении тишины.
flash.media.Camera.setMotionLevel()flash.media.Microphone.activityLevelflash.media.Microphone.activityflash.media.Microphone.gainflash.media.Microphone.silenceLevelflash.media.Microphone.silenceTimeout
setUseEchoSuppression Определяет, используется ли функция эхокомпенсации аудиокодека.useEchoSuppressionBooleanБулево значение, обозначающее разрешение на использование эхоподавления (true) или не (false). Определяет, используется ли функция эхокомпенсации аудиокодека. Значение по умолчанию — false, если пользователь не выбрал «Уменьшить эхо» на панели «Параметры микрофона» проигрывателя Flash Player.

Эхокомпенсацией называется попытка уменьшить эффект звуковой обратной связи, возникающей при улавливании звука из динамика микрофоном, подключенным к той же системе. (Следует отличать эхокомпенсацию от акустического эхоподавления, при котором обратная связь убирается полностью. Метод setUseEchoSuppression() игнорируется, когда вызывается метод getEnhancedMicrophone() для акустического эхоподавления.)

Как правило, эхокомпенсацию рекомендуется использовать, когда записываемый звук воспроизводится на том же компьютере через динамики, а не наушники. Если SWF-файл разрешает пользователям указывать устройство вывода звука, можно вызвать методMicrophone.setUseEchoSuppression(true), если они используют динамики и собираются использовать микрофон.

Пользователи могут также регулировать параметры на панели параметров микрофона проигрывателя Flash Player.

flash.media.Microphone.setUseEchoSuppression()flash.media.Microphone.useEchoSuppression
activityLevel Уровень звука, распознаваемый микрофоном.Number Уровень звука, распознаваемый микрофоном. Значения находятся в диапазоне от 0 (звук не определяется) до 100 (определяется очень громкий звук). Значение этого свойства помогает определить подходящее значение для передачи методу Microphone.setSilenceLevel().

Если для свойства микрофона muted установлено значение true, это свойство всегда имеет значение -1.

flash.media.Microphone.getMicrophone()flash.media.Microphone.setSilenceLevel()flash.media.Microphone.gain
codec Кодек, используемый для сжатия аудио.String Кодек, используемый для сжатия аудио. Доступные кодеки: Nellymoser (по умолчанию) и Speex. Класс перечисления SoundCodec содержит различные значения, действительные для свойства codec.

При использовании кодека Nellymoser можно установить частоту дискретизации с помощью Microphone.rate(). При использовании кодека Speex частота дискретизации составляет 16 кГц.

Speex включает систему обнаружения речевой активности (Voice Activity Detection, VAD) и обеспечивает автоматическое уменьшение полосы пропускания при отсутствии речевой активности. При использовании кодека Speex компания Adobe рекомендует установить значение уровня тишины на 0. Для установки уровня тишины используйте метод Microphone.setSilenceLevel().

setSilenceLevel()
enableVAD Включение обнаружения голосовой активности Speex.Boolean Включение обнаружения голосовой активности Speex. encodeQuality Качество зашифрованной речи при использовании кодека Speex.int Качество зашифрованной речи при использовании кодека Speex. Допускаются значения от 0 до 10. Значением по умолчанию является 6. Более высокие значение подразумевают лучшее качество, но требуют большей пропускной способности в соответствии с таблицей ниже. Приведенные значения скорости потока являются чистыми значениями без учета данных пакетирования.

Уровень качестваНеобходимая скорость потока (килобит в секунду)0 3.9515.7527.7539.80412.8516.8620.6723.8827.8934.21042.2

Кодек
enhancedOptions Управляет улучшенными параметрами микрофона.flash.media:MicrophoneEnhancedOptions Управляет улучшенными параметрами микрофона. Дополнительные сведения см. в описании класса MicrophoneEnhancedOptions. Это свойство игнорируется у нерасширенных экземпляров объекта Microphone. flash.media.MicrophoneEnhancedOptionsframesPerPacket Количество речевых кадров Speex, передаваемых в пакете (сообщении).int Количество речевых кадров Speex, передаваемых в пакете (сообщении). Длина каждого кадра составляет 20 мс. Значение по умолчанию — два кадра в пакете.

Чем больше кадров в сообщении Speex, тем уже необходимая полоса пропускания, но дольше задержка при отправке сообщения. При уменьшении количества кадров Speex увеличивается необходимая полоса пропускания, но сокращается задержка.

gain Степень усиления сигнала микрофоном.Number Степень усиления сигнала микрофоном. Действительны значения от 0 до 100. Значением по умолчанию является 50. flash.media.Microphone.gainindex Индекс микрофона согласно содержимому массива, возвращаемого функцией Microphone.names.int Индекс микрофона согласно содержимому массива, возвращаемого функцией Microphone.names. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesisSupported Свойству isSupported задается значение true, если текущая платформа поддерживает класс Microphone, в противном случае задается значение false.Boolean Свойству isSupported задается значение true, если текущая платформа поддерживает класс Microphone, в противном случае задается значение false. muted Определяет наличие у пользователя доступа к микрофону: нет доступа (true), или доступ разрешен (false).Boolean Определяет наличие у пользователя доступа к микрофону: нет доступа (true), или доступ разрешен (false). При изменении этого значения отправляется событие status. Дополнительные сведения см. в описании метода Microphone.getMicrophone(). flash.media.Microphone.getMicrophone()flash.media.Microphone.statusname Имя текущего устройства звукозаписи, возвращаемое данным устройством.String Имя текущего устройства звукозаписи, возвращаемое данным устройством. flash.media.Microphone.getMicrophone()flash.media.Microphone.namesnames Массив строк, содержащих имена всех доступных устройств звукозаписи.Array Массив строк, содержащих имена всех доступных устройств звукозаписи. При возвращении имен пользователю не отображается панель параметров конфиденциальности. Этот массив передает индекс от нуля для каждого устройства звукозаписи и количество этих устройств в системе посредством свойства Microphone.names.length. Дополнительные сведения см. в разделе в описании класса Array.

Вызов метода Microphone.names требует обширного анализа аппаратных средств, и на составление массива может потребоваться несколько секунд. В большинстве случаев можно использовать микрофон по умолчанию.

Примечание. Для определения имени текущего микрофона используйте свойство name.

Arrayflash.media.Microphone.nameflash.media.Microphone.getMicrophone()
noiseSuppressionLevel Максимальное ослабление шума в дБ (отрицательное число), используемое для кодека Speex.int Максимальное ослабление шума в дБ (отрицательное число), используемое для кодека Speex. Если включено, перед сжатием кодеком Spеex звука, захваченного с микрофона, выполняется шумоподавление. Чтобы отключить шумоподавление, нужно задать значение 0. Шумоподавление по умолчанию включено с ослаблением -30 дБ. Игнорируется, когда выбран кодек Nellymoser. rate Частота, с которой микрофон записывает звук, в кГц.int Частота, с которой микрофон записывает звук, в кГц. Допустимыми являются значения 5, 8, 11, 22 и 44. Значение по умолчанию — 8 кГц, если его поддерживает звукозаписывающее устройство. В противном случае, значением по умолчанию становится ближайший уровень записи выше 8 кГц, поддерживаемый звукозаписывающим устройством, обычно это 11 кГц.

Примечание. Фактическая частота немного отличается от значения rate, как описано в следующей таблице.

Значение rateФактическая частота4444 100 Гц2222 050 Гц1111 025 Гц88 000 Гц55 512 Гц
flash.media.Microphone.rate
silenceLevel Уровень звука, необходимый для активации микрофона и передачи события activity.Number Уровень звука, необходимый для активации микрофона и передачи события activity. Значением по умолчанию является 10. flash.media.Microphone.gainflash.media.Microphone.setSilenceLevel()silenceTimeout Число миллисекунд с момента, когда микрофон камера прекратила распознавать звук, до вызова события activity.int Число миллисекунд с момента, когда микрофон камера прекратила распознавать звук, до вызова события activity. Значение по умолчанию 2000 (две секунды).

Для установки этого значения используйте метод Microphone.setSilenceLevel().

flash.media.Microphone.setSilenceLevel()
soundTransform Управляет звуком этого объекта Microphone, когда микрофон работает в режиме петли.flash.media:SoundTransform Управляет звуком этого объекта Microphone, когда микрофон работает в режиме петли. useEchoSuppression Возвращает true, если эхокомпенсация включена, в противном случае возвращает false.Boolean Возвращает true, если эхокомпенсация включена, в противном случае возвращает false. Значение по умолчанию — false, если пользователь не выбрал «Уменьшить эхо» на панели «Параметры микрофона» проигрывателя Flash Player. flash.media.Microphone.setUseEchoSuppression()
StageVideo Объект StageVideo использует аппаратные функции ускорения устройства, при наличии, чтобы отобразить интерактивный или сделал запись видеоролика в программе.flash.events:EventDispatcher Объект StageVideo использует возможности аппаратного ускорения устройства (при их наличии) для отображения эфирного или записанного видео в программе. Возможности аппаратного ускорения доступны на большинстве устройств. Объект StageVideo поддерживает те же видеоформаты, что и объект Video. Дополнительные сведения об этих форматах см. в описании класса flash.net.NetStream.

Поддержка профиля AIR: В AIR 2.5, эта функция поддерживается только на устройствах, которые выполняют AIR для телевидения. Дополнительные сведения о поддержке API-интерфейса в разных профилях см. в разделе «Поддержка в профилях AIR».

Видео, отображенное объектом StageVideo, всегда появляется в прямоугольной области в рабочей области позади всех объектов списка отображения Flash. Поэтому объект StageVideo использует аппаратное ускорение, поддерживая при этом самый распространенный случай отображения видео: прямоугольная область просмотра с наложением на нее элементов управления.

Преимущества использования объекта StageVideo вместо объекта Video:

  • Оптимальная производительность воспроизведения видео благодаря использованию аппаратного ускорения.
  • Пониженное потребление ресурсов процессора и электропитания.
  • Гибкость и креативность при разработке содержимого, например элементов управления видео, которые появляются перед объектом StageVideo.

Поскольку объект StageVideo использует возможности аппаратного ускорения устройства, на него накладываются следующие ограничения по сравнению с объектом Video.

  • Область отображения видео может иметь только прямоугольную форму. Нельзя использовать более сложные области отображения, например области, имеющие эллиптическую или неправильную форму.
  • Объект StageVideo нельзя поворачивать.
  • Объект StageVideo нельзя кэшировать в виде растрового изображения.
  • BitmapData нельзя использовать для доступа к видеоданным.
  • Видео нельзя встраивать в SWF-файл. Объект StageVideo можно использовать только с объектом NetStream.
  • К объекту StageVideo нельзя применять фильтры, режимы наложения и альфа-значения.
  • К объекту StageVideo нельзя применять преобразования цвета, 3D-преобразования или матричные преобразования.
  • К объекту StageVideo нельзя применять маску или масштабирование scale9Grid.
  • Режимы наложения, применяемые к экранным объектам, которые находятся перед объектом StageVideo, не применяются к нему.
  • Объект StageVideo можно размещать только на границах полных пикселей.
  • Для каждого SWF-файла Flash Player разрешает отображать видео не более чем четырем объектам StageVideo одновременно. Однако фактическое ограничение может быть ниже, в зависимости от аппаратных ресурсов устройства. В среде AIR для телевизионных устройств одновременное отображение видео возможно только в одном объекте StageVideo.
  • Хронометраж видео не синхронизируется с хронометражем содержимого Flash, которое отображается в среде выполнения.
  • Хотя видеопрезентация — это наилучшее имеющееся решение для данных аппаратных средств устройства, она не идентична с точностью до пикселя на разных устройствах. Небольшие отклонения имеют место из-за различия аппаратного обеспечения и драйверов.
  • Несколько устройств не поддерживают все необходимые цветовые пространства. Например, некоторые устройства не поддерживают BT.709, стандарт H.264. В этих случаях можно использовать BT.601 для быстрого отображения.
  • Нельзя использовать видео рабочей области с параметрами WMODE, например normal, opaque или transparent. Видео рабочей области во всех режимах, кроме полноэкранного, поддерживает только параметр WMODE=direct. WMODE не действует в Safari 4 и более поздних версиях, IE 9 и более поздних версиях, а также в среде AIR для TV.

Далее приводятся сводные сведения об использовании объекта StageVideo для воспроизведения видео:

  1. Прослушайте StageVideoAvailabilityEvent. Событие STAGE_VIDEO_AVAILABILITY, чтобы узнать, когда вектор Stage.stageVideos изменился. (Не поддерживается для AIR 2.5 для TV.)
  2. Если событие StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY сообщает о доступности видео рабочей области, используйте объект Vector Stage.stageVideos в обработчике событий для получения доступа к объекту StageVideo. В AIR 2.5 для TV используйте Stage.stageVideos после визуализации первого кадра SWF. Примечание. Создать объект StageVideo невозможно.
  3. Подключите объект NetStream с использованием StageVideo.attachNetStream().
  4. Воспроизведение видео использование NetStream.play ().
  5. Прослушивайте событие StageVideoEvent.RENDER_STATE на объекте StageVideo, чтобы определить состояние воспроизведения видео. Получение этого события также указывает, что свойства ширины и высоты видео были инициализированы или изменены.
  6. Прослушивайте событие VideoEvent.RENDER_STATE на объекте Video. Это событие предлагает те же самые состояния, что и событие StageVideoEvent.RENDER_STATE. Таким образом, его можно также использовать для определения доступности ускорения графического процессора. Получение этого события также указывает, что свойства ширины и высоты видео были инициализированы или изменены. (Не поддерживается для AIR 2.5 для TV.)

Если событие StageVideoEvent.RENDER_STATE обозначает, что видео не может быть воспроизведено, можно вернуться к использованию объекта Video вместо объекта StageVideo. Это событие отправляется после того, как видео было присоединено к объекту NetStream и воспроизводится. Кроме того, в зависимости от платформы любое изменение состояния воспроизведения может приводить к отправке события. Обработайте событие StageVideoEvent.RENDER_STATE, чтобы убедиться, что приложение воспроизводит видео или не воспроизводит его.

Если воспроизводящееся видео переходит в полноэкранный режим из режима WMODE, который не поддерживает видео рабочей области, видео рабочей области может стать доступным. Аналогично, если пользователь выходит из полноэкранного режима, видео рабочей области может стать недоступным. В этих случаях вектор Stage.stageVideos изменяется. Чтобы получить уведомление об этом изменении, прослушивайте событие StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABITY. ПРИМЕЧАНИЕ. Это уведомление недоступно в AIR 2.5 для TV.

flash.events.StageVideoEventflash.events.StageVideoAvailabilityEventflash.events.VideoEventflash.display.Stage.stageVideosflash.media.Videoflash.net.NetStreamИспользование класса StageVideo для рендеринга с аппаратным ускорениемrenderState Отправляет объектом StageVideo при изменении состояния визуализации объекта StageVideo.flash.events.StageVideoEvent.RENDER_STATEflash.events.StageVideoEvent Отправляет объектом StageVideo при изменении состояния визуализации объекта StageVideo. attachNetStream Задает видеопоток для отображения в пределах объекта StageVideo в программе.netStreamflash.net:NetStreamОбъект NetStream. Чтобы разорвать соединение с объектом StageVideo, передайте значение null. Задает видеопоток для отображения в пределах объекта StageVideo в программе. Видеопоток является видеофайлом, воспроизводимым с помощью NetStream.play(), или имеет значение null. Видеофайл может храниться в локальной файловой системе или на сервере Flash Media Server. Если аргумент netStream имеет значение null, видео больше не воспроизводится в объекте StageVideo.

Перед вызовом метода attachNetStream() во второй раз вызовите метод close() подключенного в данный момент объекта NetStream. Вызов метода close() позволяет высвободить все ресурсы, в том числе аппаратные декодеры, участвующие в воспроизведении видео. Затем можно вызвать метод attachNetStream() с другим объектом NetStream или значением null.

Не нужно использовать этот метод, если видеофайл содержит только аудио. Аудиокомпонент видеофайла воспроизводится автоматически при вызове метода NetStream.play(). Чтобы управлять аудиосодержимым, связанным с видеофайлом, используйте свойство soundTransform объекта NetStream, воспроизводящего видеофайл.

colorSpaces Возвращает имена доступных цветовых пространств для этой поверхности видео. Возвращает имена доступных цветовых пространств для этой поверхности видео. Обычно этот список включает значения BT.601 и BT.709. В некоторых конфигурациях поддерживается только значение BT.601, а это значит, что визуализация видео может не выполняться в правильном цветовом пространстве.

Примечание. В среде AIR для TV значение «BT.601» обозначает программное воспроизведение, и значение «BT.709» обозначает аппаратное воспроизведение.

depth Уровень глубины объекта StageVideo относительно других объектов StageVideo.intГлубина объекта StageVideo относительно других объектов StageVideo. Уровень глубины объекта StageVideo относительно других объектов StageVideo.

Объекты StageVideo всегда отображают позади других объектов на рабочей область. Если платформа поддержки больше чем один объект StageVideo, глубина свойства обозначают уровень глубины объекта StageVideo. Свойство depth нижнего объекта StageVideo имеет наименьшее значение. Если несколько объектов StageVideo имеют одинаковый параметр глубины, порядок их отображения в объекте stage,stageVideos Vector определяет их относительную глубину.

Примечание. В среде AIR для телевизионных устройств поддерживается только один объект StageVideo. Поэтому данное свойство не применяется на этих устройствах. Это заполнитель для будущей поддержки на других устройствах.

flash.display.Stage.stageVideos
pan Параметр панорамирования для отображения видео, указанный в качестве объекта Point.flash.geom:PointЗначение Пункта не допустимо. RangeErrorRangeErrorЗадает, какой прямоугольник измененного масштаб изображения видеоролика выводится на экран. Параметр панорамирования для отображения видео, указанный в качестве объекта Point.

По умолчанию значением pan является (0,0). Это значение по умолчанию позволяет расположить видео по центру прямоугольника, указанного с помощью StageVideo.viewPort.

Значение pan действительно, только если свойство zoom не имеет значение по умолчанию, равное (1.0, 1.0). Когда видео отображается в прямоугольнике StageVideo.viewPort со значением zoom по умолчанию, платформа изменяет размер видео в соответствии с размером прямоугольника. Поэтому все видео является видимым. Однако, если указан коэффициент масштабирования, видео отображается не полностью. В этом случае можно установить значение pan для указания вложенного прямоугольника видео, отображаемого в прямоугольнике StageVideo.viewPort.

Действительные значения свойства pan находятся в диапазоне от (-1.0, -1.0) до (1.0, 1.0). В частности:

  • Если свойство pan имеет значение (-1.0, -1.0), верхний левый пиксел видео помещается в верхний левый угол прямоугольника StageVideo.viewPort.
  • Если свойство pan имеет значение (1.0, 1.0), нижний правый пиксел видео помещается в нижний правый угол прямоугольника StageVideo.viewPort.
  • Если свойство pan имеет значение (1.0, -1.0), верхний правый пиксел видео помещается в верхний правый угол прямоугольника StageVideo.viewPort.
  • Если свойство pan имеет значение (-1.0, 1.0), нижний левый пиксел видео помещается в нижний левый угол прямоугольника StageVideo.viewPort.

При значениях от -1,0 до 1,0 панорамирование выполняется согласно масштабу.

Если для свойства pan установлено значение, лежащее за пределами действительного диапазона, создается исключение RangeError. Среда выполнения восстанавливает последнее действительное значение.

Кроме того, для использования объекта StageVideo необходимо назначить элементу объекта Stage.stageVideos Vector переменную StageVideo. Если задается свойство pan переменной StageVideo, базовый элемент Stage.stageVideos Vector также изменяется. Если впоследствии этот элемент назначается другой переменной StageVideo для воспроизведения другого видео, сбросьте свойство pan.

zoom
videoHeight Целое число, задающее высоту видеопотока в пикселах.int Целое число, задающее высоту видеопотока в пикселах.

Например, это свойство можно использовать, чтобы пользователь просматривал видео с той же высотой, с какой оно было получено, независимо от размера прямоугольника StageVideo.viewPort.

videoWidth Целое число, задающее ширину видеопотока в пикселах.int Целое число, задающее ширину видеопотока в пикселах.

Например, это свойство можно использовать, чтобы пользователь просматривал видео с той же шириной, с какой оно было получено, независимо от размера прямоугольника StageVideo.viewPort.

viewPort Абсолютные значения положения и размера поверхности видео в пикселах.flash.geom:RectangleЗначение Rectangle недействительно. RangeErrorRangeError Абсолютные значения положения и размера поверхности видео в пикселах.

Видео располагается относительно верхнего левого угла рабочей области.

Действительные значения свойств x и y объекта viewPort Rectangle находятся в диапазоне от -8192 до 8191. Поэтому можно расположить видео полностью или частично за пределами рабочей области. Можно также сделать размер видео больше размера рабочей области. Для этого установите значения свойств width и height свойства viewPort, чтобы они превышали значения рабочей области.

zoom Параметр масштабирования видео, указанный в качестве объекта Point.flash.geom:PointЗначение Point не допустимо. RangeErrorRangeErrorПараметр «Масштаб» видеоролика. Параметр масштабирования видео, указанный в качестве объекта Point.

Точка масштабирования является масштабным коэффициентом. По умолчанию значением zoom является (1.0, 1.0). При значении по умолчанию видео полностью отображается в прямоугольнике StageVideo.viewPort.

Действительные значения свойства zoom находятся в диапазоне от (1.0, 1.0) до (16.0, 16.0). Свойство x объекта масштаба Point задает значение масштабирования горизонтальных пикселов, а свойство y — значение масштабирования вертикальных пикселов.

Например, если для свойства zoom установлено значение (2.0, 2.0), отображается только половина горизонтальных пикселов и половина вертикальных пикселов в прямоугольнике StageVideo.viewPort. То есть размер видео соответствует размеру прямоугольника StageVideo.viewPort, но видео отображается наполовину, создавая эффект двукратного увеличения. Аналогично, если для свойства zoom установлено значение (16.0, 16.0), отображается только 1/16 горизонтальных пикселов и 1/16 вертикальных пикселов в прямоугольнике StageVideo.viewPort, благодаря чему происходит максимальное шестнадцатикратное увеличение масштаба.

При задании свойства zoom задайте свойство pan, чтобы в прямоугольнике StageVideo.viewPort отображался соответствующий вложенный прямоугольник видео.

Рассмотрим следующий случай, когда полезно установить разные значения для свойств x и y объекта Point zoom. Во-первых, обратите внимание, когда видео отображается в прямоугольнике StageVideo.viewPort со значением zoom по умолчанию, платформа изменяет размер видео в соответствии с размером прямоугольника. Если видео точно не масштабируется по размеру прямоугольника StageVideo.viewPort, оно может отображаться с искажением. То есть пропорции видео и прямоугольника StageVideo.viewPort не равны. Например, это может произойти, если видео имеет разные ширину и высоту, но свойство StageVideo.viewPort задает квадрат. Чтобы устранить искажение, задайте разные значения свойств x и y объекта Point zoom. Затем задайте свойство pan, чтобы в прямоугольнике StageVideo.viewPort отображался подходящий вложенный прямоугольник видео.

Если для свойства zoom установлено значение, лежащее за пределами действительного диапазона, создается исключение RangeError. Среда выполнения восстанавливает последнее действительное значение.

Кроме того, для использования объекта StageVideo необходимо назначить элементу объекта Stage.stageVideos Vector переменную StageVideo. Если задается свойство zoom переменной StageVideo, базовый элемент Vector Stage.stageVideos также изменяется. Если впоследствии этот элемент назначается другой переменной StageVideo для воспроизведения другого видео, сбросьте свойство zoom.

кастрюля
MicrophoneEnhancedOptions Класс MicrophoneEnhancedOptions обеспечивает параметры конфигурации для расширенного аудио (акустическое эхоподавление).Object Класс MicrophoneEnhancedOptions обеспечивает параметры конфигурации для расширенного аудио (акустическое эхоподавление). Благодаря акустическому эхоподавлению несколько пользователей могут общаться в приложении аудио- или видеочата без наушников.

Чтобы использовать акустическое эхоподавление, вызовите метод Microphone.getEnhancedMicrophone() для получения ссылки на расширенный объект Microphone. Задайте свойство Microphone.enhancedOptions в качестве значения экземпляра класса MicrophoneEnhancedOptions.

flash.media.Microphone.enhancedOptionsflash.media.Microphone.getEnhancedMicrophone()autoGain Включение автоматической регулировки усиления. Boolean Включение автоматической регулировки усиления. Алгоритм автоматической регулировки усиления во временной области используется вместе с подавлением шума. Значением по умолчанию является off. echoPath Задает контур эхо (в миллисекундах), используемый для акустического эхоподавления.int Задает контур эхо (в миллисекундах), используемый для акустического эхоподавления. Чем длиннее контур эхо, тем эффективней эхоподавление. Более длинный контур эхо также обуславливает более длительную задержку и приводит к повышению вычислительной сложности. Значением по умолчанию является 128 (рекомендуется). Другое возможное значение — 256. isVoiceDetected Показывает, обнаружен ли голосовой сигнал на входе объекта Microphone.int Показывает, обнаружен ли голосовой сигнал на входе объекта Microphone.

Возможные значения: -1 — неактивный; 0 — голос не определяется; 1 — голос определяется.

mode Управляет расширенным режимом микрофона.String Управляет расширенным режимом микрофона. Значение по умолчанию FULL_DUPLEX для всех микрофонов, которые подключаются не через USB. Значение по умолчанию для микрофонов USB: HALF_DUPLEX. Другие возможные значения и описания см. в разделе MicrophoneEnhancedMode. flash.media.MicrophoneEnhancedModenonLinearProcessing Включает нелинейную обработку.Boolean Включает нелинейную обработку. Нелинейная обработка подавляет остаточное эхо в разговоре одного человека. Используется методика нелинейной обработки во временной области. Выключение нелинейной обработки для музыкальных источников. Значение по умолчанию — true (включение нелинейной обработки).
Sound Класс Sound позволяет работать со звуком в приложении.flash.events:EventDispatcher Класс Sound позволяет работать со звуком в приложении. Класс Sound позволяет создавать объект Sound, загружать в него и воспроизводить внешние МР3-файлы, закрывать поток звука и получать данные о звуке, такие как сведения о количестве байтов в потоке и метаданные ID3. Более детальное управление звуком выполняется через источник звука (объект SoundChannel или Microphone звука) и через свойства класса SoundTransform, управляющего выводом звука на динамики компьютера.

В проигрывателе Flash Player 10 и более поздних версий и в AIR 1.5 и более поздних версий этот класс можно также использовать для работы с динамически создаваемым звуком. В таком случае объект Sound использует функцию, назначенную обработчику события sampleData, для выполнения опроса на наличие звуковых данных. Звук воспроизводится по мере его извлечения из объекта ByteArray, наполненного звуковыми данными. Можно также использовать метод Sound.extract() для извлечения данных из объекта Sound, которые можно обработать перед записыванием в поток для воспроизведения.

Для управления звуками, встроенными в SWF-файл используются свойства класса SoundMixer.

Примечание. Звуковой API-интерфейс в ActionScript 3.0 отличается от такового в ActionScript 2.0. В ActionScript 3.0 невозможно организовывать объекты Sound в виде иерархии для управления их свойствами.

При использовании данного класса необходимо учесть следующую модель безопасности:

  • Загрузка и воспроизведение звука запрещены, если вызывающий файл находится в изолированной программной среде сети, а звуковой файл для загрузки сохранен на локальном компьютере.
  • По умолчанию загрузка и воспроизведение звука не разрешены, если вызывающий локальный файл пытается загрузить и воспроизвести удаленный звук. Пользователь должен явно определить права, чтобы разрешить этот тип доступа.
  • Запрещены определенные операции со звуком. Данные в загруженном звуке не могут быть получены файлом, находящимся в другом домене, если не используется файл междоменной политики. Данное ограничение распространяется на следующие API-интерфейсы для работы со звуком: Sound.id3, SoundMixer.computeSpectrum(), SoundMixer.bufferTime и класс SoundTransform.

Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application (содержимое, установленное с приложением AIR).

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

В следующем примере отображаются сведения о звуковых событиях, происходящих по мере открытия и воспроизведения МР3-файла. Чтобы запустить данный пример, поместите файл MySound.mp3 в тот каталог, где находится рассматриваемый SWF-файл. package { import flash.display.Sprite; import flash.events.*; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; public class SoundExample extends Sprite { private var url:String = "MySound.mp3"; private var song:SoundChannel; public function SoundExample() { var request:URLRequest = new URLRequest(url); var soundFactory:Sound = new Sound(); soundFactory.addEventListener(Event.COMPLETE, completeHandler); soundFactory.addEventListener(Event.ID3, id3Handler); soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler); soundFactory.load(request); song = soundFactory.play(); } private function completeHandler(event:Event):void { trace("completeHandler: " + event); } private function id3Handler(event:Event):void { trace("id3Handler: " + event); } private function ioErrorHandler(event:Event):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler: " + event); } } }
flash.net.NetStreamMicrophoneSoundChannelSoundMixerSoundTransformprogress Отправляется в случае получения данных в ходе операции загрузки.flash.events.ProgressEvent.PROGRESSflash.events.ProgressEvent Отправляется в случае получения данных в ходе операции загрузки. load()open Отправляется при запуске операции загрузки.flash.events.Event.OPENflash.events.Event Отправляется при запуске операции загрузки. load()ioError Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки.flash.events.IOErrorEvent.IO_ERRORflash.events.IOErrorEvent Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки. load()id3 Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3.flash.events.Event.ID3flash.events.Event Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3. Sound.id3complete Отправляется после успешной загрузки данных.flash.events.Event.COMPLETEflash.events.Event Отправляется после успешной загрузки данных. load()sampleData Отправляется при запросе средой выполнения новых аудиоданных.flash.events.SampleDataEvent.SAMPLE_DATAflash.events.SampleDataEvent Отправляется при запросе средой выполнения новых аудиоданных. Следующий пример воспроизводит простую гармоническую волну. var mySound:Sound = new Sound(); function sineWaveGenerator(event:SampleDataEvent):void { for ( var c:int=0; c<8192; c++ ) { event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25); } } mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play(); extract()play()flash.events.SampleDataEventSound Создает новый объект Sound.streamflash.net:URLRequestnull URL-адрес, указывающий на внешний МР3-файл. contextflash.media:SoundLoaderContextnull Дополнительный объект контекста SoundLoader, который может задать время буферизации (минимальное число миллисекунд, в течение которых данные MP3 будут храниться в буфере объекта Sound) и указать, следует ли приложению проверять наличие файла междоменной политики перед загрузкой звука. Создает новый объект Sound. При передаче действительного объекта URLRequest конструктору Sound он автоматически вызывает функцию load() для объекта Sound. Если конструктору Sound не передается действительный объект URLRequest, необходимо самостоятельно вызвать функцию load() для объекта Sound, иначе поток не загрузится.

После вызова load() для объекта Sound невозможно загрузить другой звуковой файл в этот объект. Чтобы загрузить другой звуковой файл, нужно создать новый объект Sound.

В проигрывателе Flash Player 10 и более поздних версий, а также в AIR 1.5 и более поздних версий, вместо метода load() можно использовать обработчик событий sampleData для динамической загрузки звука в объект Sound.
close Закрывает поток, в результате чего загрузка данных прекращается.Не удалось закрыть поток или поток не был открыт. IOErrorflash.errors:IOError Закрывает поток, в результате чего загрузка данных прекращается. После вызова метода close() данные из потока не считываются. В следующем примере, когда пользователь нажимает кнопку «Стоп», вызывается метод Sound.close() и поток звука останавливается.

В конструкторе создается текстовое поле для кнопки «Пуск» и «Стоп». Когда пользователь щелкает текстовое поле, вызывается метод clickHandler(). Он обрабатывает запуск и остановку воспроизведения звукового файла. Обратите внимание, что в зависимости от сетевого подключения или времени нажатия кнопки «Стоп» большая часть файла может быть уже загружена и на остановку воспроизведения звукового файла может потребоваться время. Для перехвата возможных ошибок ввода/вывода при закрытии потока используется блок try...catch. Например, если звук загружается из локального каталога и поток не передается, перехватывается ошибка 2029 с сообщением «Объект URLStream не имеет открытого канала».

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.MouseEvent; import flash.errors.IOError; import flash.events.IOErrorEvent; public class Sound_closeExample extends Sprite { private var snd:Sound = new Sound(); private var button:TextField = new TextField(); private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); public function Sound_closeExample() { button.x = 10; button.y = 10; button.text = "START"; button.border = true; button.background = true; button.selectable = false; button.autoSize = TextFieldAutoSize.LEFT; button.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(button); } private function clickHandler(e:MouseEvent):void { if(button.text == "START") { snd.load(req); snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); button.text = "STOP"; } else if(button.text == "STOP") { try { snd.close(); button.text = "Wait for loaded stream to finish."; } catch (error:IOError) { button.text = "Couldn't close stream " + error.message; } } } private function errorHandler(event:IOErrorEvent):void { button.text = "Couldn't load the file " + event.text; } } }
extract Извлекает необработанные звуковые данные из объекта Sound.Количество образцов, записанных в объект ByteArray, который указан в параметре target. Numbertargetflash.utils:ByteArrayОбъект ByteArray, в котором размещаются извлеченные звуковые образцы. lengthNumberКоличество звуковых образцов для извлечения. Образец содержит и левый, и правый канал — т. е. два 32-разрядных значения с плавающей запятой. startPositionNumber-1Образец, с которого начинается извлечение. Если не указать значение, первый вызов метода Sound.extract() начнет извлечение с начала звука; последующие вызовы метода startPosition без указания значения продолжат последовательное извлечение данных из файла. Извлекает необработанные звуковые данные из объекта Sound.

Данный метод предназначен для использования при работе с динамическими данными, используя функцию, назначенную событию sampleData, для другого объекта Sound. То есть можно использовать этот метод для извлечения звуковых данных из объекта Sound. Затем можно записать данные в массив байтов, который другой объект Sound использует для потокового воспроизведения динамического звука.

Звуковые данные будут помещены в целевой массив байтов, начиная с текущей позиции массива. Аудиоданные всегда представлены в формате стереозвучания с частотой дискретизации 44 100 Гц. Образец имеет значение типа 32-разрядного числа с плавающей запятой, которое может быть преобразовано в значение типа «число» при помощи метода ByteArray.readFloat().

В следующем примере выполняется загрузка файла mp3 и используется метод extract() класса Sound для доступа к звуковым данным.

Данные mp3 загружены в объект Sound — sourceSnd. Когда приложение загружает данные mp3, оно вызывает функцию loaded() (обработчик событий для события complete объекта sourceSnd). Второй объект Sound, outputSound, используется для воспроизведения измененного звука. Объект outputSound имеет прослушиватель событий sampleData; поэтому объект выполняет отправку периодических событий sampleData после вызова метода play() объекта. Метод upOctave() возвращает массив байтов измененных звуковых данных на основе исходных звуковых данных. Он возвращает звук, который на одну октаву выше, за счет пропуска каждого второго звукового сэмпла в исходных данных. Обработчик событий для события sampleData записывает возвращенный массив байтов в свойство data объекта outputSound. Массив байтов data добавляется к выходным звуковым данным для объекта outputSound.

Чтобы проверить этот пример, добавьте файл test.mp3 в каталог, в котором находится SWF-файл.

var sourceSnd:Sound = new Sound(); var outputSnd:Sound = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); sourceSnd.load(urlReq); sourceSnd.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); outputSnd.play(); } function processSound(event:SampleDataEvent):void { var bytes:ByteArray = new ByteArray(); sourceSnd.extract(bytes, 4096); event.data.writeBytes(upOctave(bytes)); } function upOctave(bytes:ByteArray):ByteArray { var returnBytes:ByteArray = new ByteArray(); bytes.position = 0; while(bytes.bytesAvailable > 0) { returnBytes.writeFloat(bytes.readFloat()); returnBytes.writeFloat(bytes.readFloat()); if (bytes.bytesAvailable > 0) { bytes.position += 8; } } return returnBytes; }
play()sampleData
load Инициирует загрузку внешнего файла MP3 с заданного URL-адреса.Сетевая ошибка помешала загрузке файла. IOErrorflash.errors:IOErrorЛокальные ненадежные файлы изолируются от Интернета. Этого можно избежать, если переклассифицировать этот файл как локальный с сетевым подключением или доверенный. SecurityErrorSecurityErrorНельзя подключаться к общепринятым зарезервированным портам. Полный список заблокированных портов см. в разделе «Ограничение API-интерфейсов сетевого подключения» в руководстве ActionScript 3.0 Developer's Guide (руководстве разработчика по ActionScript 3.0). SecurityErrorSecurityErrorЗначением свойства digest объекта stream не является null. Свойство digest объекта URLRequest следует задавать только при вызове метода URLLoader.load() во время загрузки SWZ-файла (компонент платформы Adobe). IOErrorflash.errors:IOErrorstreamflash.net:URLRequest URL-адрес, указывающий на внешний МР3-файл. contextflash.media:SoundLoaderContextnull Дополнительный объект контекста SoundLoader, который может задать время буферизации (минимальное число миллисекунд, в течение которых данные MP3 будут храниться в буфере объекта Sound) и указать, следует ли приложению проверять наличие файла междоменной политики перед загрузкой звука. Инициирует загрузку внешнего файла MP3 с заданного URL-адреса. При передаче действительного объекта URLRequest конструктору Sound он сам вызывает Sound.load(). Вызывать Sound.load() самостоятельно нужно только тогда, когда классу Sound не передан объект URLRequest или передано значение null.

После вызова load() для объекта Sound невозможно загрузить другой звуковой файл в этот объект. Чтобы загрузить другой звуковой файл, нужно создать новый объект Sound.

При использовании данного метода необходимо учесть следующую модель безопасности:

  • Вызов метода Sound.load() запрещен, если вызывающий файл находится в локальной для файловой системы изолированной программной среде, а звук — в сетевой изолированной программной среде.
  • Для доступа из доверенной локальной среды, или изолированной локальной среды с сетевым подключением, требуется разрешение web-сайта, которое можно получить с помощью файла политики URL-адресов.
  • Нельзя подключаться к общепринятым зарезервированным портам. Полный список заблокированных портов см. в разделе «Ограничение API-интерфейсов сетевого подключения» в руководстве ActionScript 3.0 Developer's Guide (руководстве разработчика по ActionScript 3.0).
  • Можно запретить использование SWF-файлом этого метода путем установки параметра allowNetworking для тегов object и embed на странице HTML, содержащей SWF-содержимое.

В приложении Flash Player 10 и более поздней версии при использовании типа содержимого multipart (например, multipart/form-data), в котором содержится загрузка (обозначена параметром filename в заголовке content-disposition в теле оператора POST), к операции POST применяются правила безопасности для загрузок:

  • Операция POST должна быть выполнена в ответ на действие, инициированное пользователем, такое как щелчок мыши или нажатие клавиши.
  • Если операция POST является междоменной (назначением операции POST не является сервер, на котором содержится SWF-файл, отправляющий запрос POST), целевой сервер должен предоставить файл политик URL, в котором разрешен междоменный доступ.

Кроме того, все объекты multipart Content-Type должны иметь допустимый синтаксис (в соответствии со стандартами RFC2046). Если синтаксис является недопустимым, к операции POST применяются правила безопасности, действующие для загрузок.

В Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application (содержимое, установленное с приложением AIR).

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

В следующем примере демонстрируется процесс загрузки звукового файла.

В конструкторе создается объект URLRequest, чтобы указать местоположение звукового файла — подкаста компании Adobe. Файл загружается в блок try...catch, чтобы перехватить возможные ошибки при загрузке. В случае ошибки ввода/вывода вызывается метод errorHandler(), и в текстовом поле отчета о прогрессе отображается сообщение об ошибке. По мере выполнения загрузки отправляется событие ProgressEvent.PROGRESS, и вызывается метод progressHandler(). В данном случае событие ProgressEvent.PROGRESS используется в качестве таймера для расчета прогресса загрузки.

Метод progressHandler() делит значение bytesLoaded, переданное с объектом ProgressEvent, на значение bytesTotal, чтобы вычислить процент загружаемых звуковых данных. Затем эти значения отображаются в текстовом поле. (Обратите внимание, что если файл небольшой, сохранен в кэше или находится в локальном каталоге, то прогресс может быть незаметным.)

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.ProgressEvent; import flash.events.IOErrorEvent; public class Sound_loadExample extends Sprite { private var snd:Sound = new Sound(); private var statusTextField:TextField = new TextField(); public function Sound_loadExample(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(ProgressEvent.PROGRESS, progressHandler); this.addChild(statusTextField); } private function progressHandler(event:ProgressEvent):void { var loadTime:Number = event.bytesLoaded / event.bytesTotal; var LoadPercent:uint = Math.round(100 * loadTime); statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" + "Bytes being loaded: " + event.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + LoadPercent + "%.\n"; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
play Создает новый объект SoundChannel для воспроизведения звука.Объект SoundChannel, используемый для управления звуком. Этот метод возвращает значение null, если не установлена звуковая карта или нет доступных аудиоканалов. Одновременно доступно не больше 32 каналов. flash.media:SoundChannelstartTimeNumber0Исходное положение в миллисекундах, с которого должно начинаться воспроизведение. loopsint0Определяет, сколько раз звук возвращается к значению startTime, прежде чем прекратится воспроизведение звукового канала. sndTransformflash.media:SoundTransformnullИсходный объект SoundTransform, назначенный для звукового канала. Создает новый объект SoundChannel для воспроизведения звука. Этот метод возвращает объект SoundChannel, к которому нужно обращаться, чтобы остановить воспроизведение или отрегулировать громкость. (Чтобы управлять громкостью, панорамой и балансом, необходимо использовать объект SoundTransform, назначенный звуковому каналу.) В следующем примере после загрузки файла пользователь может выбрать начальное положение (время начала) звукового файла с помощью графической полосы.

Конструктор вызывает метод Sound.load(), чтобы начать загрузку звуковых данных. Затем вызывается метод Sound.play(), который начнет воспроизведение, как только будет загружено достаточно данных. Метод Sound.play() возвращает объект SoundChannel, с помощью которого можно управлять воспроизведением звука. В текстовом поле отображаются инструкции. Чтобы убедиться, что содержимое, с которого пользователь хочет начать воспроизведение звука, уже загружено, создается объект Sprite с именем bar и отображается после завершения загрузки файла. После успешной загрузки файла отправляется событие Event.COMPLETE, которое запускает метод completeHandler(). Затем метод completeHandler() создает полосу прокрутки и добавляет ее в список отображения. (Чтобы обеспечить интерактивные возможности, вместо объекта Shape используется объект Sprite.) Когда пользователь щелкает по полосе прокрутки, запускается метод clickHandler().

В методе clickHandler() положение по оси Х (event.localX), в котором пользователь щелкает мышкой, используется для определения начальной точки воспроизведения. Так как длина полосы прокрутки составляет 100 пикселей, и она начинается в точке 100 по оси Х, нетрудно вычислить точку воспроизведения в процентном соотношении. Кроме того, файл уже загружен, и поэтому свойство length звукового файла будет иметь значение длины полного файла в миллисекундах. Имея длину файла и положение на линии, можно определить начальное положение для звукового файла. После остановки воспроизведения звука файл запускается снова с выбранного начального положения, переданного в качестве параметра startTime метода play().

package { import flash.display.Sprite; import flash.display.Graphics; import flash.events.MouseEvent; import flash.media.Sound;; import flash.net.URLRequest; import flash.media.SoundChannel; import flash.events.ProgressEvent; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.IOErrorEvent; public class Sound_playExample1 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel = new SoundChannel(); private var infoTextField:TextField = new TextField(); public function Sound_playExample1() { var req:URLRequest = new URLRequest("MySound.mp3"); infoTextField.autoSize = TextFieldAutoSize.LEFT; infoTextField.text = "Please wait for the file to be loaded.\n" + "Then select from the bar to decide where the file should start."; snd.load(req); channel = snd.play(); snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); snd.addEventListener(Event.COMPLETE, completeHandler); this.addChild(infoTextField); } private function completeHandler(event:Event):void { infoTextField.text = "File is ready."; var bar:Sprite = new Sprite(); bar.graphics.lineStyle(5, 0xFF0000); bar.graphics.moveTo(100, 100); bar.graphics.lineTo(200, 100); bar.addEventListener(MouseEvent.CLICK, clickHandler); this.addChild(bar); } private function clickHandler(event:MouseEvent):void { var position:uint = event.localX; var percent:uint = Math.round(position) - 100; var cue:uint = (percent / 100) * snd.length; channel.stop(); channel = snd.play(cue); } private function errorHandler(errorEvent:IOErrorEvent):void { infoTextField.text = "The sound could not be loaded: " + errorEvent.text; } } }
В следующем примере звук должен воспроизводиться один или два раза в зависимости от того, нажмет пользователь кнопку одним или двойным щелчком.

В конструкторе загружается звук, и создается простой прямоугольный объект Sprite с именем button. (Чтобы обеспечить интерактивные возможности, вместо объекта Shape используется объект Sprite.) Предполагается, что звуковой файл находится в том же каталоге, что и SWF-файл. (В данном примере не используется код обработки событий.)

Настраиваются два прослушивателя событий для нажатий кнопки одним или двойным щелчком мыши. Если пользователь щелкает один раз, вызывается метод clickHandler(), который воспроизводит звук. Если пользователь дважды щелкает кнопку, вызывается метод doubleClickHandler(), который воспроизводит звук два раза. Второму аргументу метода play() задается значение 1, в результате чего звук будет возвращаться к времени начала один раз для повторного воспроизведения. Время начала, первый аргумент, имеет значение 0. Это значит, что файл будет воспроизводиться от начальной точки.

package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.media.Sound; import flash.net.URLRequest; public class Sound_playExample2 extends Sprite { private var button:Sprite = new Sprite(); private var snd:Sound = new Sound(); public function Sound_playExample2() { var req:URLRequest = new URLRequest("click.mp3"); snd.load(req); button.graphics.beginFill(0x00FF00); button.graphics.drawRect(10, 10, 50, 30); button.graphics.endFill(); button.addEventListener(MouseEvent.CLICK, clickHandler); button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); this.addChild(button); } private function clickHandler(event:MouseEvent):void { snd.play(); } private function doubleClickHandler(event:MouseEvent):void { snd.play(0, 2); } } }
В следующем примере демонстрируется процесс и воспроизведения загрузки звукового файла.

В конструкторе файл загружается в блок try...catch, чтобы можно было перехватить возможные ошибки при загрузке. Один прослушиватель событий добавляется для объекта Sound: он будет реагировать на событие IOErrorEvent и вызывать метод errorHandler(). Другой прослушиватель добавляется для основного приложения: он будет реагировать на событие Event.ENTER_FRAME и использоваться в качестве таймера для отображения прогресса воспроизведения. И, в завершение, третий прослушиватель добавляется для звукового канала: он будет реагировать на событие Event.SOUND_COMPLETE (по завершении воспроизведения звука) и вызывать метод soundCompleteHandler(). Метод soundCompleteHandler() также удаляет прослушиватель события Event.ENTER_FRAME.

Метод enterFrameHandler() делит значение bytesLoaded, переданное с объектом ProgressEvent, на значение bytesTotal, чтобы вычислить процент загружаемых звуковых данных. Процент воспроизводимых звуковых данных можно определить, разделив значение свойства position звукового канала на длину звуковых данных. Однако если звуковые данные загружены не полностью, свойство length объекта Sound показывает только размер данных, загруженных на текущий момент. Оценка конечного размера полного звукового файла вычисляется путем деления length текущего звукового объекта на значение свойства bytesLoaded, деленное на значение свойства bytesTotal.

Обратите внимание, что если файл небольшой, сохранен в кэше или находится в локальном каталоге, то прогресс может быть незаметным. Кроме того, отрезок времени между началом загрузки звуковых данных и началом воспроизведения загруженных данных определяется значением свойства SoundLoaderContext.buffertime, которое по умолчанию составляет 1000 миллисекунд и может быть изменено.

package { import flash.display.Sprite; import flash.net.URLRequest; import flash.media.Sound; import flash.media.SoundChannel; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; import flash.events.IOErrorEvent; public class Sound_playExample3 extends Sprite { private var snd:Sound = new Sound(); private var channel:SoundChannel; private var statusTextField:TextField = new TextField(); public function Sound_playExample3(){ statusTextField.autoSize = TextFieldAutoSize.LEFT; var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"); try { snd.load(req); channel = snd.play(); } catch (err:Error) { trace(err.message); } snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler); this.addChild(statusTextField); } private function enterFrameHandler(event:Event):void { var loadTime:Number = snd.bytesLoaded / snd.bytesTotal; var loadPercent:uint = Math.round(100 * loadTime); var estimatedLength:int = Math.ceil(snd.length / (loadTime)); var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength)); statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" + "Bytes being loaded: " + snd.bytesLoaded + "\n" + "Percentage of sound file that is loaded " + loadPercent + "%.\n" + "Sound playback is " + playbackPercent + "% complete."; } private function errorHandler(errorEvent:IOErrorEvent):void { statusTextField.text = "The sound could not be loaded: " + errorEvent.text; } private function soundCompleteHandler(event:Event):void { statusTextField.text = "The sound has finished playing."; removeEventListener(Event.ENTER_FRAME, enterFrameHandler); } } }
SoundChannel.stop()SoundMixer.stopAll()
bytesLoaded Возвращает число байтов, доступных в настоящий момент в данном объекте Sound.uint Возвращает число байтов, доступных в настоящий момент в данном объекте Sound. Это свойство обычно необходимо только для внешних загружаемых файлов. bytesTotal Возвращает общее число байтов в данном объекте Sound.int Возвращает общее число байтов в данном объекте Sound. id3 Обеспечивает доступ к метаданным, которые являются частью MP3-файла.flash.media:ID3Info Обеспечивает доступ к метаданным, которые являются частью MP3-файла.

Звуковые МР3-файлы могут содержать теги ID3, передающие метаданные о файле. Если звук MP3, загружаемый с помощью метода Sound.load(), содержит теги ID3, эти свойства можно запрашивать. Поддерживаются только теги ID3, которые могут использовать набор символов UTF-8.

Flash Player 9 и более поздних версий, а также AIR поддерживают теги ID3 2.0, а именно 2.3 и 2.4. В следующих таблицах перечислены стандартные теги ID3 2.0 и представляемые ими типы содержимого. Свойство Sound.id3 обеспечивает доступ к этим тегам посредством формата my_sound.id3.COMM, my_sound.id3.TIME и т.д. В первой таблице описываются теги, к которым можно обратиться и через имя свойства ID3 2.0 и через имя свойства ActionScript. Во второй таблице описаны теги ID3, которые поддерживаются, но не имеют предварительно определенных свойств в ActionScript.

Тег ID3 2.0Соответствующее свойство класса SoundCOMMSound.id3.commentTALBSound.id3.album TCONSound.id3.genreTIT2Sound.id3.songName TPE1Sound.id3.artistTRCKSound.id3.track TYERSound.id3.year

Во следующей таблице описаны теги ID3, которые поддерживаются, но не имеют предварительно определенных свойств в классе Sound. Для обращения к ним требуется вызвать mySound.id3.TFLT, mySound.id3.TIME и т. д. ПРИМЕЧАНИЕ. Ни один из этих тегов не поддерживается во Flash Lite 4.

СвойствоОписаниеTFLTТип файлаTIMEВремяTIT1Описание группы содержимогоTIT2Описание заголовка, названия песни и содержимогоTIT3Уточнение подзаголовка и описанияTKEYКлавиша запускаTLANЯзыкиTLENДлинаTMEDТип материалаTOALНазвание альбома, ролика и изображенияTOFNИмя исходного файлаTOLYАвторы текстовTOPEАртисты и исполнителиTORYГод выпускаTOWNВладелец файла или лицензиатTPE1Ведущие исполнители и солистыTPE2Ансамбль, оркестр или аккомпанементTPE3Уточнение дирижера или исполнителяTPE4Автор интерпретации, ремикса или другого вида модификацииTPOSЧасть набораTPUBИздательTRCKНомер дорожки или позиции в набореTRDAДаты записиTRSNНазвание Интернет-радиостанцииTRSOВладелец Интернет-радиостанцииTSIZРазмерTSRCМеждународный стандартный код записи (ISRC)TSSEПрограммные/аппаратные средства и их параметры, используемые для кодированияTYERГодWXXXКадр ссылки на URL-адрес

При использовании данного свойства необходимо продумать модель безопасности проигрывателя Flash Player.

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

Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application (содержимое, установленное с приложением AIR).

Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.

В следующем примере данные ID3 считываются из звукового файла и отображаются в текстовом поле.

Конструктор загружает звуковой файл, но на запускает его воспроизведение. Предполагается, что файл находится в том же каталоге, что и SWF-файл. Система должна иметь разрешение, чтобы считывать теги ID3 из загруженного звукового файла. Если в файле есть данные ID3 и программа получает разрешение на их чтение, отправляется событие Event.ID3, и заполняется свойство id3 звукового файла. Свойство id3 содержит объект ID3Info со всеми данными ID3.

В методе id3Handler() теги ID3 файла сохраняются в объекте класса ID3Info с именем id3. Инициируется текстовое поле для отображения списка тегов ID3. Цикл for повторяется для отображения всех тегов ID3 2.0 и добавляет имя и значение к содержимому текстового поля С помощью свойств данных ID3 (ID3Info) также добавляется имя исполнителя, название песни и альбома. ActionScript 3.0 и Flash Player 9 и более поздних версий поддерживают теги ID3 2.0, а именно 2.3 и 2.4. Если выполнять итерацию для свойств, как в цикле for, будут отображаться только теги ID3 2.0. Однако данные из более ранних версий также сохраняются в свойстве id3 песни: их можно получить с помощью свойств класса ID3 info. Теги для ID3 1.0 помещаются в конце файла, а теги ID3 2.0 — в начале. (Иногда файлы могут содержать теги и старых и новых версий в одном месте.) Если файл закодирован с использованием тегов двух версий (1.0 и 2.0) в начале и в конце, метод id3Handler() вызывается два раза. Сначала считываются теги версии 2.0, а затем версии 1.0. Если имеются только теги ID3 1.0, то эту информацию можно получить через свойства данных ID3, такие как id3.songname. Для ID3 2.0 свойство id3.TITS получит название песни с помощью нового тега (TITS).

Обратите внимание, что в данном примере не применяется обработка ошибок и, если содержимое ID3 имеет большую длину, результат может выходить за пределы видимой области.

package { import flash.display.Sprite; import flash.media.Sound; import flash.net.URLRequest; import flash.media.ID3Info; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.events.Event; public class Sound_id3Example extends Sprite { private var snd:Sound = new Sound(); private var myTextField:TextField = new TextField(); public function Sound_id3Example() { snd.addEventListener(Event.ID3, id3Handler); snd.load(new URLRequest("mySound.mp3")); } private function id3Handler(event:Event):void { var id3:ID3Info = snd.id3; myTextField.autoSize = TextFieldAutoSize.LEFT; myTextField.border = true; myTextField.appendText("Received ID3 Info: \n"); for (var propName:String in id3) { myTextField.appendText(propName + " = " + id3[propName] + "\n"); } myTextField.appendText("\n" + "Artist: " + id3.artist + "\n"); myTextField.appendText("Song name: " + id3.songName + "\n"); myTextField.appendText("Album: " + id3.album + "\n\n"); this.addChild(myTextField); } } }
SoundLoaderContext.checkPolicyFile
isBuffering Возвращает состояние буферизации внешних файлов MP3.Boolean Возвращает состояние буферизации внешних файлов MP3. Если значение true, воспроизведение приостанавливается, пока объект ожидает загрузки дополнительных данных. isURLInaccessible Указывает, усечено ли свойство Sound.url.Boolean Указывает, усечено ли свойство Sound.url. Когда свойство isURLInaccessible имеет значение true, свойство Sound.url содержит только домен конечного URL-адреса, с которого загружается содержимое. Например, свойство усекается, если содержимое загружается со страницы http://www.adobe.com/assets/hello.mp3 и свойство Sound.url имеет значение http://www.adobe.com. Свойство isURLInaccessible имеет значение true, только когда верны все перечисленные ниже условия.
  • Во время загрузки звукового файла произошла переадресация HTTP.
  • SWF-файл, вызывающий метод Sound.load(), находится не в том домене, к которому относится конечный URL-адрес звукового файла.
  • SWF-файл, вызывающий метод Sound.load(), не имеет разрешения на доступ к звуковому файлу. Разрешение на доступ к звуковому файлу предоставляется так же, как для свойства Sound.id3: создайте файл политики и используйте свойство SoundLoaderContext.checkPolicyFile.

Примечание. Свойство isURLInaccessible впервые добавлено в версии Flash Player 10.1 и AIR 2.0. Однако оно доступно для SWF-файлов, созданных во всех версиях, если его поддерживает среда выполнения Flash. Таким образом, использование «строгого режима» в некоторых инструментах разработки приводит к возникновению ошибки. Чтобы обойти эту ошибку, используйте косвенный синтаксис mySound ["isURLInaccessible"] или выключите строгий режим. Если для разработки используется ПО Flash Professional CS5 или Flex SDK 4.1, этот API-интерфейс можно использовать и скомпилировать для сред выполнения, выпущенных до Flash Player 10.1 и AIR 2.

Для содержимого приложения в AIR это свойство всегда имеет значение false.

urlid3flash.media.SoundLoaderContext.checkPolicyFile
length Длина текущего звука в миллисекундах.Number Длина текущего звука в миллисекундах. url URL-адрес, с которого был загружен звук.String URL-адрес, с которого был загружен звук. Это свойство применимо только к объектам Sound, загруженным с помощью метода Sound.load(). Для объектов Sound, связанных с ресурсами звука из библиотеки SWF-файла, свойство url имеет значение null.

При первом вызове Sound.load(), свойство url сначала имеет значение null, так как окончательный URL еще неизвестен. Свойство url получит другое значение, как только объект Sound отправит событие open.

Свойство url содержит окончательный абсолютный URL, с которого загружался звук. Как правило, значение url совпадает со значением параметра stream метода Sound.load(). Однако, если методу Sound.load() был передан относительный URL-адрес, то значение свойства url будет представлять абсолютный URL-адрес. Если HTTP-сервер переадресует исходный запрос URL, то свойство url отражает конечный URL, с которого фактически был загружен файл. Такое сообщение абсолютного конечного URL эквивалентно поведению метода LoaderInfo.url.

В некоторых случаях значение свойства url усекается; дополнительные сведения см. в описании свойства isURLInaccessible.

load()flash.display.LoaderInfo.urlisURLInaccessible
MicrophoneEnhancedMode Класс MicrophoneEnhancedMode является перечислением значений констант, с помощью которых задается свойство «mode» класса MicrophoneEnhancedMode.Object Класс MicrophoneEnhancedMode является перечислением значений констант, с помощью которых задается свойство mode класса MicrophoneEnhancedOptions. flash.media.MicrophoneEnhancedOptionsFULL_DUPLEX Используйте этот режим, чтобы обе стороны могли говорить одновременно.fullDuplexString Используйте этот режим, чтобы обе стороны могли говорить одновременно. Акустическое эхоподавление работает в полнодуплексном режиме. Полнодуплексный режим представляет собой эхоподавление наивысшего качества. В этом режиме требуется использовать высококачественные микрофоны и динамики и наибольшую вычислительную мощность. Не используйте этот режим с микрофоном USB. HALF_DUPLEX Используйте этот режим для более старых и менее качественных динамиков и микрофонов.halfDuplexString Используйте этот режим для более старых и менее качественных динамиков и микрофонов. Акустическое эхоподавление работает в полудуплексном режиме. В полудуплексном режиме одновременно может говорить только одна сторона. Полудуплексный режим задействует более простую обработку, чем полнодуплексный. Полудуплексный режим является режимом по умолчанию для USB-микрофонов.

Если приложение использует стандартную настройку enhancedOptions и микрофон USB, Flash Player автоматически переходит в режим halfDuplex. Если приложение использует стандартную настройку enhancedOptions и встроенный микрофон, Flash Player работает в режиме fullDuplex.

HEADSET Используйте этот режим, когда обе стороны используют наушники.headsetString Используйте этот режим, когда обе стороны используют наушники. Акустическое эхоподавление работает в режиме низкого эхосигнала. В этом режиме требуется наименьшая вычислительная мощность. OFF Все расширенные функции аудиосистемы отключены.offString Все расширенные функции аудиосистемы отключены. SPEAKER_MUTE Используйте этот режим, когда звук динамика отключен.speakerMuteString Используйте этот режим, когда звук динамика отключен. Акустическое эхоподавление выключено. Расширенная аудиосистема обеспечивает шумоподавление или автоматическое управление усилением (если включено). flash.media.MicrophoneEnhancedOptions.autoGain
Video Класс Video отображает эфирное или записанное видео в приложении, не внедряя видео в SWF-файл.flash.display:DisplayObject Класс Video отображает эфирное или записанное видео в приложении, не внедряя видео в SWF-файл. Этот класс создает объект Video, который воспроизводит любой из следующих видов видеосодержимого: записанные видеофайлы, сохраненные на сервере или локально, или эфирное видео, захватываемое пользователем в реальном времени. Объект Video — это экранный объект в списке отображения приложения, который представляет визуальное пространство пользовательского интерфейса, в котором воспроизводится видео.

При использовании сервера Flash Media Server объект Video позволяет передавать эфирное видео, захватываемого пользователем, на сервер и транслировать его с сервера другим пользователям. С помощью этих функций можно разрабатывать мультимедийные приложения, такие как простой видеопроигрыватель, видеопроигрыватель с несколькими точками публикации с одного сервера на другой или приложение для обмена видеосодержимым для сообщества пользователей

Flash Player 9 и более поздних версий поддерживает публикацию и воспроизведение FLV-файлов, закодированных с помощью кодека Sorenson Spark или On2 VP6, а также поддерживает альфа-канал. Видеокодек On2 VP6 использует меньшую пропускную способности, чем более старые технологии, и предоставляет дополнительные фильтры подавления блочноcти и реверберации. Дополнительные сведения о воспроизведении видео и поддерживаемых форматах см. в описании класса flash.net.NetStream.

Flash Player 9.0.115.0 и более поздних версий поддерживает множественное отображение для оптимизации качества и производительности визуализации во время выполнения. Для воспроизведения видео проигрыватель Flash Player использует оптимизацию множественного отображения, если свойству smoothing объекта Video задано значение true.

Как и с другими экранными объектами в списке отображения, можно управлять различными свойствами объектов Video. Например, можно перемещать объект Video в рабочей области, используя свойства x и y, можно изменять размер с помощью свойств height и width и т.д.

Для потокового воспроизведения видео нужно использовать метод attachCamera() или attachNetStream(), чтобы прикрепить видео к объекту Video. После этого нужно добавить объект Video в список отображения с помощью метода addChild().

Если используется Flash Professional, объект Video можно также поместить в рабочую область, а не добавлять его методом addChild(). Это делается следующим образом.

  1. Если панель «Библиотека» скрыта, выберите «Окно» > «Библиотека», чтобы показать ее.
  2. Добавьте встроенный объект Video в библиотеку, открыв меню «Параметры» справа на строке заголовка панели «Библиотека» и выберите «Создать видео».
  3. В диалоговом окне «Свойства видео» присвойте имя встроенному объекту Video, которое будет использоваться в библиотеке и нажмите кнопку «ОК».
  4. Перетащите объект Video в рабочую область и с помощью Инспектора свойств присвойте ему уникальное имя экземпляра, например my_video. (Не называйте его Video.)

В программах AIR на компьютере при воспроизведении видео в полноэкранном режиме отключаются все функции управления питанием и экранной заставки (если это разрешено операционной системой).

Примечание. Класс Video не является подклассом класса InteractiveObject, поэтому он не может отправлять события мыши. Однако можно использовать метод addEventListener() контейнера экранного объекта, содержащего объект Video.

В следующем примере объект Video с классами NetConnection и NetStream используется для загрузки и воспроизведения FLV-файла. Чтобы запустить данный пример, вам потребуется FLV-файл, имя и место расположения которого совпадают с переменной, переданной videoURL. В данном случае, FLV-файл Video.flv находится в том же каталоге, где размещается SWF-файл.

В данном примере код, создающий объекты Video и NetStream, а также вызывающий методы Video.attachNetStream() и NetStream.play(), размещен в функции обработчика. Обработчик вызывается только при успешном подключении к объекту NetConnection (другими словами, когда событие netStatus возвращает объект info со свойством code, что свидетельствует об успешном выполнении задачи). Рекомендуется перед вызовом NetStream.play() дождаться успешного подключения.

package { import flash.display.Sprite; import flash.events.*; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class VideoExample extends Sprite { private var videoURL:String = "Video.flv"; private var connection:NetConnection; private var stream:NetStream; public function VideoExample() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Unable to locate video: " + videoURL); break; } } private function connectStream():void { stream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); var video:Video = new Video(); video.attachNetStream(stream); stream.play(videoURL); addChild(video); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function asyncErrorHandler(event:AsyncErrorEvent):void { // ignore AsyncErrorEvent events. } } }
attachCamera()attachNetStream()flash.media.Camera.getCamera()flash.net.NetConnectionflash.net.NetStreamflash.display.DisplayObjectContainer.addChild()flash.display.Stage.addChild()Работа с видеоVideo Создает новый экземпляр Video.widthint320Ширина видео в пикселях. heightint240Высота видео в пикселях. Создает новый экземпляр Video. Если не заданы значения для свойств width и height используются значения по умолчанию. Свойства width и height объекта Video можно настроить и после создания с помощью Video.width и Video.height. Когда создается новый объект Video, нулевые значения ширины и высоты не допускаются; при их передаче используются значения по умолчанию.

После создания объекта Video следует вызвать метод DisplayObjectContainer.addChild() или DisplayObjectContainer.addChildAt(), чтобы добавить его в родительский объект DisplayObjectContainer.

Следующий пример демонстрирует загрузку внешнего файла FLV. var MyVideo:Video = new Video(); addChild(MyVideo); var MyNC:NetConnection = new NetConnection(); MyNC.connect(null); var MyNS:NetStream = new NetStream(MyNC); MyNS.play("http://www.helpexamples.com/flash/video/clouds.flv"); MyVideo.attachNetStream(MyNS); //the clouds.flv video has metadata we're not using, so create //an error handler to ignore the message generated by the runtime //about the metadata MyNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); function asyncErrorHandler(event:AsyncErrorEvent):void { //ignore metadata error message }
attachCamera Задает видеопоток с камеры для отображения в пределах объекта Video в окне приложения.cameraflash.media:CameraОбъект Camera, получающий видеоданные. Чтобы разорвать соединение с объектом Video, передайте значение null. Задает видеопоток с камеры для отображения в пределах объекта Video в окне приложения.

Используйте этот метод, чтобы присоединить к объекту Video эфирное видео, захватываемое пользователем в реальном времени. Эфирное видео можно воспроизводить локально на том же компьютере или устройстве, с которого оно передается, или передавать на Flash Media Server и затем транслировать его другим пользователям.

Примечание. В приложении AIR для ОС iOS видео, передаваемое камерой, не может быть выведено на экран, когда приложение использует режим визуализации с помощью графического процессора.

Пример использования этого метода см. в примере для метода Camera.getCamera().
Video.attachNetStream()flash.media.Camera
attachNetStream Задает видеопоток для отображения в пределах объекта Video в окне приложения.netStreamflash.net:NetStreamОбъект NetStream. Чтобы разорвать соединение с объектом Video, передайте значение null. Задает видеопоток для отображения в пределах объекта Video в окне приложения. Видеопоток является либо видеофайлом, воспроизводимым методом NetStream.play(), объектом Camera или имеет значение null. Если используется видеофайл, его можно сохранить в локальной файловой системе или на сервере Flash Media Server. Если аргумент netStream имеет значение null, воспроизведение видео в объекте Video прекращается.

Не нужно использовать этот метод, если видеофайл содержит только аудио. Аудиокомпонент видеофайлов воспроизводится автоматически при вызове метода NetStream.play(). Чтобы управлять аудиосодержимым, связанным с видеофайлом, используйте свойство soundTransform объекта NetStream, воспроизводящего видеофайл.

См. пример использования этого метода в конце описания класса.
Video.attachCamera()flash.net.NetStream.soundTransformflash.net.NetStream.play()SoundTransform
clear Удаляет отображаемое в данный момент изображение в объекте Video (а не видеопоток). Удаляет отображаемое в данный момент изображение в объекте Video (а не видеопоток). Данный метод используется для обработки текущих изображений. Например, можно удалить последнее изображение или отобразить информацию ждущего режима, не скрывая объект Video. Video.attachCamera()deblocking Указывает тип фильтра, применяемого к дешифрованному видео в ходе последующей обработки.int Указывает тип фильтра, применяемого к дешифрованному видео в ходе последующей обработки. Значение по умолчанию — 0, оно позволяет видеокомпрессору при необходимости применять фильтр подавления блочности.

Сжатие видео может приводить к нежелательным искажениям. Можно использовать свойство deblocking, чтобы настраивать фильтры, уменьшающие блочность и реверберацию (для видео, сжатого с помощью кодека On2).

Блочностью называются видимая несогласованность между границами соседних квадратов, составляющих каждый видеокадр. Реверберацией называется шум вокруг элементов видеоизображения.

Имеется два фильтра подавления блочности: один в кодеке Sorenson, а другой в On2 VP6. Кроме того, при использовании кодека On2 VP6 становится доступным фильтр подавления реверберации. При настройке фильтров используйте одно из следующих значений.

  • 0 — позволяет видеокомпрессору при необходимости применять фильтр подавления блочности.
  • 1 — не использует фильтр подавления блочности.
  • 2 — использует фильтр подавления блочности Sorenson.
  • 3 — (только для кодека On2) использует фильтр подавления блочности On2, но не фильтр подавления реверберации.
  • 4 — (только для кодека On2) использует фильтр подавления блочности и реверберации On2.
  • 5 — (только для кодека On2) использует фильтр подавления блочности и более производительный фильтр On2 подавления реверберации.

Если при использовании кодека Sorenson для видео выбирается значение больше 2, то по умолчанию используется значение 2.

Использование фильтра подавления блочности оказывает общее влияние на производительность воспроизведения, обычно оно не требуется для широкополосного видео. Если пользовательская система недостаточно мощная, то, если включен фильтр подавления блочноcти, при воспроизведении видео могут возникнуть проблемы.

smoothing Определяет, должно ли выполняться сглаживание (интерполяция) видео при масштабировании.Boolean Определяет, должно ли выполняться сглаживание (интерполяция) видео при масштабировании. Для реализации смягчения среда выполнения должна работать в высококачественном режиме. Значение по умолчанию — false (без сглаживания).

При воспроизведении видео с помощью Flash Player 9.0.115.0 и более поздних версий, этому свойству необходимо задать значение true, чтобы применить оптимизацию изображения методом множественного отображения.

videoHeight Целое число, задающее высоту видеопотока в пикселах.int Целое число, задающее высоту видеопотока в пикселах. Для потоков в реальном времени это свойство имеет то же значение, что и свойство Camera.height объекта Camera, получающего видеопоток. Для записанных видеофайлов это значение является высотой видеоролика.

Например, это свойство можно использовать, чтобы пользователь просматривал видео с сохранением того размера, в каком оно было получено, независимо от действительного размера объекта Video в рабочей области.

flash.media.Camera.height
videoWidth Целое число, задающее ширину видеопотока в пикселах.int Целое число, задающее ширину видеопотока в пикселах. Для эфирных потоков это свойство имеет то же значение, что и свойство Camera.width объекта Camera, получающего видеопоток. Для записанных видеофайлов это значение является шириной видеоролика.

Например, это свойство можно использовать, чтобы пользователь просматривал видео с сохранением того размера, в каком оно было получено, независимо от действительного размера объекта Video в рабочей области.

flash.media.Camera.width