Java Mobile Media API - Java Mobile Media API
В Mobile Media API (MMAPI) является API спецификация для Java ME Платформа CDC и CLDC такие устройства, как мобильные телефоны. В зависимости от того, как это реализовано, API-интерфейсы позволяют приложениям воспроизводить и записывать звуки и видео, а также захватывать неподвижные изображения. MMAPI был разработан под Процесс сообщества Java как JSR 135.
Концепции программирования
Мультимедийный Java API основан на четырех основных типах классов в javax.microedition.media
пакет - Управляющий делами
, то Игрок
, то PlayerListener
и различные виды Контроль
.
Программисты Java ME, желающие использовать JSR 135, сначала использовали бы статические методы Управляющий делами
класс. Хотя есть и другие методы, такие как playTone
, основным используемым методом является createPlayer
. Это требует либо URI или InputStream
, а Тип MIME. В большинстве случаев используются URI. Общие используемые протоколы URI включают:
- файл:
- ресурс: (который может извлекать файл из JAR мидлета, но зависит от реализации)
- http:
- rtsp:
- захват: (используется для записи аудио или видео)
Тип MIME является необязательным и выводится из переданных данных, если не указан.
В createPlayer
метод возвращает реализацию Игрок
интерфейс (даже если вы используете захватить: протокол URI). У этого есть основные методы, которые применимы ко всем проигрывателям, такие как запуск и остановка мультимедиа, а также запрос цикла. Вы также можете setPlayerListener
объекту, реализующему PlayerListener
интерфейс, который будет получать различные события, связанные с клипом (запуск, остановка, окончание медиа и т. д.)
Игрок
классы также имеют getControl
метод, который возвращает реализацию определенного Контроль
. А Контроль
обрабатывает любые дополнительные API, которые не применимы ко всем типам мультимедиа. Любой данный Игрок
может или не может предоставить реализацию любого данного Контроль
.
(Обычно Контроль
вернулся на самом деле Игрок
сам по себе, но это не гарантируется.)
Набор элементов управления, реализованный Игрок
не ограничен; однако некоторые стандартные определены в javax.microedition.media.control
пакет JSR:
Интерфейс управления | Описание |
---|---|
FramePositioningControl | Элемент управления видеоданными, позволяющий получить доступ к отдельным кадрам. |
GUIControl | Элемент управления для данных, требующих отображения, например видео. |
MetaDataControl | Используется для определения информации метаданных, хранящейся в потоке мультимедиа, например названия, авторских прав, автора и т. Д. |
MIDIControl | Полнофункциональный элемент управления, обеспечивающий доступ к MIDI-плееру устройства. |
Управление по каналу тангажа | Используется для управления высотой звука (частотой) аудиоданных. |
RateControl | Используется для управления скоростью воспроизведения проигрывателя. |
RecordControl | Позволяет управлять записью данных с устройства захвата, например видео с камеры или звука с устройства записи звука. |
StopTimeControl | Элемент управления, который позволяет вам установить предустановленное время, когда вы хотите, чтобы проигрыватель прекратил воспроизведение. |
TempoControl | Подобно RateControl, этот элемент управления позволяет вам изменять темп (скорость) воспроизведения для аудиоплеера, обычно MIDI-проигрывателя. |
ToneControl | Полнофункциональный элемент управления, позволяющий воспроизводить монотонные последовательности тонов. |
VideoControl | Расширяет GUIControl и управляет отображением видео. |
Контроль громкости | Самый простой элемент управления, позволяющий регулировать громкость звука в Игрок . |
(Другие могут быть определены в JSR 234 (Расширенные мультимедийные приложения ).
Подмножество JSR 135 определено в JSR 118 (MIDP 2.0).
Жизненный цикл игрока
Независимо от протокола или типа носителя, Игрок
проходит через одни и те же дискретные состояния в течение своего жизненного цикла. Эти состояния перечислены в таблице ниже.
государство | Описание |
---|---|
Нереализованный | Начальное состояние при создании Player. В этом состоянии у плеера недостаточно информации, чтобы получить необходимые ресурсы для обработки мультимедиа. |
Реализовано | Игрок переходит в состояние «Реализовано» после того, как получит необходимую информацию для приобретения ресурсов. В этом состоянии, вероятно, большая часть ресурсов уже приобретена для работы. Однако некоторые ресурсы могут не быть получены на этом этапе, особенно если есть системные зависимости, например, с аудио- или видеодрайвером, где должен быть получен монопольный доступ. |
Предварительно выбрано | Игрок переходит в состояние Prefetched после того, как будут получены все ресурсы, включая дефицитные и системные ресурсы. Находясь в состоянии Prefetched, игрок имеет все необходимое для выполнения своих задач. |
Начал | Player в состоянии Started указывает, что контент, связанный с Player, обрабатывается. |
Закрыто | Игрок переходит в состояние Closed в конце своего жизненного цикла. Игрок в закрытом состоянии больше не может быть использован. |
Реализации
Как и в большинстве спецификаций Java ME, реализации отличаются, несмотря на все усилия авторов спецификации по обеспечению согласованности. Две очевидные области различий заключаются в поддерживаемых элементах управления и в первую очередь в допустимых типах URI. Более неясные области: смешивание поддерживается; многие игры хотели бы воспроизвести музыкальную дорожку и слой MIDI PCM звуковые эффекты на высоте.
Еще один источник крайних различий - производительность. Например, если HTTP клип запрашивается, в какой момент клип загружается? Спецификация признает это, предоставляя два Игрок
методы, которые можно вызвать до начала игры: понимать
и предварительная выборка
. В зависимости от реализации они могут выполнять некоторую часть работы по переводу клипа в состояние воспроизведения, тем самым ускоряя фактическое воспроизведение клипа, когда это необходимо. Некоторые реализации достаточно сложны, чтобы транслировать клип по запросу во время его воспроизведения.
ОС Symbian содержит очень полную реализацию JSR 135, но даже это сильно зависит от основных мультимедийных возможностей устройства, и некоторые производители устройств могут решить не раскрывать более непонятные части Java ME, такие как запись.
Согласованность реализации обеспечивается путем принудительного прохождения всеми реализациями кода Java Комплект совместимости технологий (TCK). Это гарантирует, что проверяется каждая поддерживаемая схема URI, тип MIME и элемент управления, но не проверяет каждую перестановку этих необязательных частей.
Пример кода
пакет org.wikipedia;импорт javax.microedition.midlet. *;импорт javax.microedition.media. *;общественный класс SimplePlayer расширяет Мидлет { защищенный пустота уничтожить приложение(логический arg0) бросает MIDletStateChangeException {} защищенный пустота pauseApp() {} защищенный пустота startApp() бросает MIDletStateChangeException { пытаться { Строка url = "http://upload.wikimedia.org/wikipedia/commons/a/a0/Bass_sample.mid"; Игрок игрок = Управляющий делами.createPlayer(url); игрок.Начните(); } ловить (Исключение е) { е.printStackTrace(); } }}
Смотрите также
Список используемой литературы
- Гоял, Викрам (1 мая 2006 г.). Pro Java ME MMAPI: Mobile Media API для Java Micro Edition (1-е изд.). Apress. п. 250. ISBN 1-59059-639-0.