2013-04-22 7 views
5

Sto sviluppando una piccola applicazione Android in cui sto giocando il collegamento rtsp usando un lettore multimediale Android. Funziona correttamente su meno di Android 16 API. ma il problema è che quando ho eseguito su Android 16 ci vuole un sacco di tempo per giocare e un po 'di tempo ancora non play.following è il codice che sto usandolive Ritardo audio in streaming durante la riproduzione in Android-16?

sdrPlayer = new MediaPlayer(); 
sdrPlayer.setDataSource(url); 
sdrPlayer.prepare(); 
sdrPlayer.setOnCompletionListener(video.this); 
sdrPlayer.setOnPreparedListener(video.this); 
sdrPlayer.setOnBufferingUpdateListener(video.this); 
sdrPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

seguito sono riportati alcuni casi di test

  1. ZTE N860 - Prende circa 4 a 5 minuti per avviare la riproduzione della radio.
  2. Samsung Galaxy S4 - L'audio non funziona affatto. Chiama il metodo di avvio nel metodo onprepare ma non c'è audio.
  3. Samsung SCH1415 - Prende circa 8 minuti per avviare la riproduzione della radio
  4. HTC V5 - L'audio non funziona sempre. Inizia a suonare ma non c'è audio. Il comportamento è incoerente e ciò sta causando una maggiore frustrazione .
+0

Nitin, suggerisco di annusare il traffico al server se è possibile e confrontare i 2 scambi RTSP. Ricordo di aver letto da qualche parte che l'aggiornamento dell'implementazione RTSP su alcune versioni di Android ha rotto molte applicazioni esistenti. Se questo è il caso, dovresti vedere alcune differenze nello scambio RTSP. – Ralf

+0

Innanzitutto grazie per il commento @Ralf ma Android 16 impiega sempre del tempo per caricare il link la prima volta quando carichiamo il link e in qualche occasione in modo casuale. Anche il metodo di riproduzione del lettore multimediale dà true.so non posso mostrare il progresso. ma alcune volte funziona correttamente. È possibile che il server invii sempre alcuni bit danneggiati all'inizio e alcune volte. – Nitin

+0

I tempi di attesa sono causati dalla dimensione del buffer audio. Credo che la dimensione sia stata aumentata con Android 16+. Qual è la tua domanda? Dal momento che non puoi controllare la dimensione del buffer sei sfortunato se vuoi usare MediaPlayer. La mia applicazione utilizza un lettore basato su FFmpeg in modo da poter controllare la dimensione del buffer. –

risposta

3

per la riproduzione di collegamento RTSP si dovrebbe usare sdrPlayer.prepareAsync(); invece di

sdrPlayer.prepare(); 

perché la documentazione dice

Si prepara il lettore per la riproduzione, in modo asincrono. Dopo aver impostato l'origine dati e la superficie di visualizzazione, è necessario chiamare prepare() o prepareAsync(). Per gli stream, è necessario chiamare prepareAsync(), che restituisce immediatamente, piuttosto che bloccare finché non è stato memorizzato un numero sufficiente di dati.

+0

Proverò questa risposta grazie – Nitin

Problemi correlati