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