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