2009-04-24 8 views
6

Debido a limitaciones (bastante molestas) en muchos teléfonos J2ME, los archivos de audio no pueden reproducirse hasta que se hayan descargado por completo. Por lo tanto, para reproducir transmisiones en vivo, me veo obligado a descargar trozos a la vez, y construir ByteArrayInputStream s, que luego alimentar a los jugadores.Alternativas a los búferes rotativos en Jugadores en J2ME?

Esto funciona bien, excepto que hay una brecha molesta de aproximadamente 1/4 de segundo cada vez que termina una secuencia y se necesita una nueva. ¿Hay alguna manera de resolver este problema o el problema anterior?

+0

Creo que lo que desea son las clases SourceStream y DataSource que se encuentran en javax.microedition.media.protocol, que se encuentran aquí http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol /DataSource.html –

Respuesta

0

Edit2: O usted podría mirar esto que parece ser exactamente lo que quiere: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

crearía dos clases de jugadores y asegurarse de que había recibido suficientes trozos antes de empezar a jugar con ellos. Entonces comenzaría a jugar el primer fragmento a través del jugador uno y cargaría el segundo en el jugador dos. Luego usaría la clase TimeBase para hacer un seguimiento de cuánto tiempo ha pasado y cuando sabía que el primer fragmento terminaría (usted debe saber cuánto tiempo debe tocar cada fragmento), entonces comenzaría a reproducir el segundo fragmento a través del segundo jugador y carga el tercer trozo en el primero y así sucesivamente hasta que no haya más trozos para jugar.

La clave aquí está utilizando la clase TimeBase correctamente para saber cuándo hacer la transición. Creo que eso debería eliminar la molesta apuesta de brecha de 1/4 de segundo entre los fragmentos. Espero que eso funcione, avíseme si lo hace porque suena realmente interesante.

EDITAR: Player.prefetch() también podría ser útil aquí para reducir la latencia.

1

Desafortunadamente no puede deshacerse de estos espacios, al menos no en cualquier dispositivo en el que lo haya probado. De hecho, es muy molesto. Es parte de la especificación que no puede transmitir audio o video a través de HTTP.

Si desea transmitir desde un servidor, la única forma de hacerlo es usar un servidor RTSP en su lugar, aunque deberá verificar la compatibilidad con este en su dispositivo.

Y falsificar RTSP utilizando un servidor local en el dispositivo (rtsp: // localhost ...) tampoco funciona ... Lo intenté también.

2

La única buena manera de reproducir pistas largas (3 minutos y más) con J2ME JSR135, moderadamente confiable, en la mayor cantidad de teléfonos que existen, es usar una URL "file: //" cuando crea el reproductor , o para que el valor de entrada en realidad provenga de un FileConnection.

los teléfonos blackberry recientes pueden usar un ByteArrayInputstream solo cuando tienen una gran memoria de almacenamiento Java disponible.

muchos teléfonos con el sistema operativo Symbian te permitirán colocar archivos en un área privada para la aplicación J2ME mientras aún puedes reproducir pistas en la misma ubicación.