2009-04-24 14 views
6

A causa di (piuttosto fastidiose) limitazioni su molti telefoni J2ME, i file audio non possono essere riprodotti fino a quando non vengono scaricati completamente. Quindi, per riprodurre i live streaming, sono costretto a scaricare pezzi alla volta e a costruire ByteArrayInputStream s, che poi fornisco ai giocatori.Alternative alla rotazione dei buffer nei giocatori in J2ME?

Questo funziona bene, tranne che c'è un intervallo fastidioso di circa 1/4 di secondo ogni volta che un flusso termina e ne è necessario uno nuovo. C'è un modo per risolvere questo problema o il problema sopra?

+0

Penso che quello che vuoi siano le classi SourceStream e DataSource trovate in javax.microedition.media.protocol trovato qui http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol /DataSource.html –

risposta

0

EDIT2: Oppure si può semplicemente guardare a questo che sembra essere esattamente quello che vuoi: http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/protocol/DataSource.html

vorrei creare due classi Player e fare in modo che avevo ricevuto abbastanza pezzi prima ho iniziato a giocare loro. Poi inizierei a giocare il primo pezzo attraverso il giocatore uno e caricare il secondo nel giocatore due. Quindi userei la classe TimeBase per tenere traccia di quanto tempo è passato e quando sapevo che il primo pezzo sarebbe finito (dovresti sapere per quanto tempo ogni pezzo deve giocare), allora inizierei a giocare il secondo blocco attraverso il secondo giocatore e carica il terzo blocco nel primo e così via e così via fino a quando non ci sono più blocchi da giocare.

La chiave qui sta utilizzando correttamente la classe TimeBase per sapere quando effettuare la transizione. Penso che questo dovrebbe sbarazzarsi della seccante scommessa sul gap di 1/4 di secondo tra blocchi. Spero che funzioni, fammi sapere se lo fa perché sembra davvero interessante.

MODIFICA: Player.prefetch() potrebbe anche essere utile qui per ridurre la latenza.

1

Sfortunatamente non è possibile eliminare queste lacune, almeno non su qualsiasi dispositivo su cui l'ho provato. È davvero molto fastidioso. Fa parte della specifica che non è possibile eseguire lo streaming audio o video su HTTP.

Se si desidera eseguire lo streaming da un server, l'unico modo per farlo è utilizzare un server RTSP, anche se è necessario controllare il supporto per questo sul proprio dispositivo.

E simulare RTSP utilizzando un server locale sul dispositivo (rtsp: // localhost ...) non funziona neanche .. Ho provato anche quello.

2

L'unico buon modo per riprodurre brani lunghi (3 minuti e più) con J2ME JSR135, in modo abbastanza affidabile, sul numero più grande di portatili là fuori, è quello di utilizzare un URL "file: //" quando si crea il lettore , o per fare in modo che l'inputstream provenga da un FileConnection.

I telefoni blackberry recenti possono utilizzare ByteArrayInputstream solo quando dispongono di una grande memoria java heap disponibile.

un sacco di telefoni in esecuzione sul sistema operativo Symbian consentono di mettere i file in un'area privata per l'applicazione J2ME pur essendo ancora in grado di riprodurre tracce nella stessa posizione.

Problemi correlati