2011-08-28 9 views
20

Sto costruendo un'app che sta visualizzando correttamente un file video MP4 su ButtonClick. Voglio pre-buffer o precaricare l'URI del video (URL remoto) in modo da non ritardare la riproduzione del video dopo aver fatto clic sul pulsante. Voglio che clicchi e suoni subito, quindi il pre-caricamento o il buffering sullo schermo di avvio dell'app sembra una soluzione adatta. L'unica cosa è che non so come. Ho un sacco di libri Android, ma quasi nessuno di essi copre il buffering o copre solo l'audio.Pre-Load o Pre-Buffer video .mp4 nello sviluppo di app Android

Qualcuno può farmi sapere come bufferizzare il video su un'attività precedente?

Grazie.

+1

Vuoi solo bufferizzare una parte del video? In caso contrario, è possibile scaricare l'MP4 nella memoria flash, quindi riprodurre come un file. – braden

+0

Non sono sicuro, ma hai provato a chiamare start, quindi chiamare immediatamente la pausa o interrompere? –

+0

hai mai trovato una soluzione? –

risposta

0

Il browser Android nativo non memorizza nel buffer i file multimediali (audio o video), quindi non c'è modo di farlo su HTML5. Come @ bradenV2 ha detto, è possibile copiare il file in memoria (è possibile utilizzare PhoneGap se si tratta di un'app).

2

È possibile utilizzare il MediaPlayer per la preparazione del video, in questo modo:

mediaPlayer = new MediaPlayer(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setOnPreparedListener(<implementation of MediaPlayer.OnPreparedListener>); 

mediaPlayer.setDataSource(dataSource); 
mediaPlayer.prepareAsync(); 

Dopo la chiamata prepareAsync() il mediaplayer si tamponare il vostro video. Il MediaPlayer.OnPreparedListener.onPrepared() ti dirà se il mediaplayer è ancora pronto per giocare.

Basta controllare il flag preparato e chiamare mediaplayer.start() quando si fa clic con il pulsante "onButtonClick"

+0

grazie per questa risposta. Mi piace creare una playlist video che anticipi il prossimo video. Dovrei usare 2 MediaPlayers per questo? Id come la transizione tra ogni video per essere istantaneo. Stavo pensando di alternare i 2 giocatori. Consiglieresti questo approccio? – codeshark

+0

Si può fare questo approccio o è possibile creare una classe "Preload Helper" che pre-download per il video di upcomming. – leegor

+0

Se il video A è in riproduzione e imposto l'origine dati al video B e chiamo prepareAsync(), interromperà l'esecuzione del video A in mediaPlayer? Con Preload Helper class, userai un secondo mediaPlayer? Inoltre, quali sono i tuoi pensieri sull'utilizzo della nuova classe Android di ExoPlayer? Grazie! – codeshark

3

Google ha rilasciato ExoPlayer che fornisce un livello superiore per i media di gioco: http://developer.android.com/guide/topics/media/exoplayer.html

Supporta stato diverso, come il buffering in background :

L'ho usato nel mio progetto e sembra abbastanza efficiente. Inoltre Google ha realizzato una demo completa del player: https://github.com/google/ExoPlayer/tree/master/demo/src/main/java/com/google/android/exoplayer/demo/full che è più potente della semplice demo.

+0

Grazie per questa risposta Hugo. Mi piace creare un'applicazione di playlist video. I video saranno su IP. Id come la transizione tra ogni video per essere istantaneo. Prima che un video finisca di suonare, id preferisce prebuffare il prossimo video in uscita. Dovrei usare due istanze di Exoplayer? È possibile? Consiglieresti questo approccio? – codeshark

+0

Non sono sicuro che l'exoplayer possa supportare molti esempi, ma sono sicuro che ci dovrebbe essere un modo per farlo. Considerando l'utilizzo di ExoPlayer, puoi aprire un problema sul github: https://github.com/google/ExoPlayer –