La API de medios móviles ( MMAPI ) es una especificación de API para los dispositivos CDC y CLDC de la plataforma Java ME , como los teléfonos móviles . Según cómo se implemente, las API permiten que las aplicaciones reproduzcan y graben sonidos y videos, y que capturen imágenes fijas. MMAPI se desarrolló en el marco del proceso comunitario de Java como JSR 135.
La API multimedia de Java se basa en cuatro tipos principales de clases en el javax.microedition.media
paquete : Manager
, Player
, PlayerListener
y varios tipos de Control
.
Los programadores de Java ME que deseen utilizar JSR 135 primero utilizarán los métodos estáticos de la Manager
clase . Aunque existen otros métodos como playTone
, el método principal utilizado es createPlayer
. Este acepta una URI o una InputStream
, y un tipo MIME . En la mayoría de los casos, se utilizan URI. Los protocolos URI comunes utilizados incluyen:
El tipo MIME es opcional y se infiere de los datos pasados si no se suministran.
El createPlayer
método devuelve una implementación de la Player
interfaz (incluso si utiliza una URI de protocolo de captura ). Tiene métodos básicos que son aplicables a todos los reproductores, como iniciar y detener el contenido multimedia y solicitar que se repita. También puede setPlayerListener
utilizar un objeto que implemente la PlayerListener
interfaz, que recibirá varios eventos relacionados con el clip (inicio, detención, finalización del contenido multimedia, etc.).
Player
Las clases también tienen un getControl
método que devuelve una implementación de un Control
. A Control
maneja cualquier API opcional que no sea aplicable a todos los tipos de medios. Cualquier clase dada Player
puede o no ser capaz de proporcionar una implementación de cualquier clase dada Control
.
(Normalmente, lo Control
que se devuelve es en realidad lo Player
mismo, pero no se garantiza que sea así).
El conjunto de controles implementados por a Player
no está limitado; sin embargo, algunos controles estándar están definidos en el javax.microedition.media.control
paquete por el JSR:
(Se pueden definir otros en JSR 234 ( Suplementos multimedia avanzados ).
Un subconjunto de JSR 135 se define en JSR 118 ( MIDP 2.0).
Independientemente del protocolo o tipo de medio involucrado, el Player
sistema pasa por los mismos estados discretos durante su ciclo de vida. Estos estados se enumeran en la siguiente tabla
Como ocurre con la mayoría de las especificaciones de Java ME, las implementaciones difieren a pesar de los esfuerzos de los autores de las especificaciones por garantizar la coherencia. Dos áreas obvias de diferencias se encuentran en los controles admitidos y en los tipos de URI aceptables en primer lugar. Las áreas más oscuras son si se admite la mezcla ; muchos juegos querrían reproducir una pista de música MIDI y superponer efectos de sonido PCM .
Otra fuente de variación extrema es el rendimiento. Por ejemplo, si se solicita un clip HTTP , ¿en qué momento se descarga el clip? La especificación reconoce esto al proporcionar dos Player
métodos que se pueden llamar antes de la reproducción real: realize
y prefetch
. Según la implementación, estos pueden realizar parte del trabajo de poner el clip en un estado reproducible, lo que hace que sea más rápido reproducirlo cuando sea necesario. Algunas implementaciones son lo suficientemente sofisticadas como para transmitir un clip a pedido mientras se está reproduciendo.
Symbian OS contiene una implementación muy completa de JSR 135, pero incluso esto depende en gran medida de las capacidades multimedia subyacentes del dispositivo, y algunos fabricantes de dispositivos pueden optar por no exponer las partes más oscuras de Java ME, como la grabación.
La coherencia de la implementación se garantiza al obligar a todas las implementaciones a pasar el Kit de compatibilidad de tecnología Java (TCK). Esto garantiza que se pruebe cada esquema de URI, tipo MIME y control admitidos, pero no se prueba cada permutación de estas partes opcionales.
paquete org.wikipedia ; importar javax.microedition.midlet.* ; importar javax.microedition.media.* ; clase pública SimplePlayer extiende MIDlet { void protegido destroyApp ( booleano arg0 ) lanza MIDletStateChangeException {} void protegido pauseApp () {} void protegido startApp () lanza MIDletStateChangeException { try { String url = " http://upload.wikimedia.org/wikipedia/commons/a/a0/Bass_sample.mid" ; Jugador jugador = Manager.createPlayer ( url ) ; jugador.start ( ) ; } catch ( Excepción e ) { e.printStackTrace ( ) ; } } }