2011-08-28 61 views
20

我正在構建一個應用程序,該應用程序在onButtonClick上成功顯示MP4視頻文件。我想預先緩衝或預加載視頻的URI(遠程URL),以便在點擊按鈕後不會延遲播放視頻。我希望它能夠立即點擊並播放,因此,在應用程序啓動啓動屏幕上進行預加載或緩衝似乎是一個合適的解決方案。唯一的是我不知道如何。我擁有大量的Android圖書,但幾乎沒有任何圖書可以覆蓋緩衝區,或者只覆蓋音頻。Android應用程序開發中的預加載或預緩衝區.mp4視頻

任何人都可以讓我知道如何緩衝以前的活動視頻?

謝謝。

+1

你想只緩衝一部分視頻嗎? 如果沒有,您可以將MP4下載到閃存然後像文件一樣播放。 – braden

+0

不確定,但您是否嘗試致電開始,然後立即致電暫停或停止? –

+0

你有沒有找到解決方案? –

回答

0

本機Android瀏覽器不會緩衝媒體文件(音頻或視頻),因此無法在HTML5上執行此操作。正如@ bradenV2所說,你可以將文件複製到內存中(如果它是應用程序,可以使用Phonegap)。

2

可以使用的MediaPlayer準備的視頻,像這樣:

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

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

通話prepareAsync()的媒體播放器會緩衝視頻後。 MediaPlayer.OnPreparedListener.onPrepared()會告訴你媒體播放器是否已準備好播放。

只要勾選準備國旗,並呼籲mediaplayer.start()當您點擊按鈕「onButtonClick」

+0

感謝您的回答。我想創建一個視頻播放列表來預緩存即將播放的視頻。我應該使用2個MediaPlayers嗎?像每個視頻之間的過渡是即時的。我正在考慮在兩名球員之間交替。你會推薦這種方法嗎? – codeshark

+0

你可以這樣做,或者你可以創建一個「預加載助手」類,預先下載視頻上傳。 – leegor

+0

如果視頻A正在播放,並且我將數據源設置爲視頻B並調用prepareAsync(),是否會停止在mediaPlayer中運行視頻A?通過預加載助手類,將使用第二個mediaPlayer?另外,你有什麼想法使用新的ExoPlayer android類?謝謝! – codeshark

3

谷歌發佈ExoPlayer它提供了媒體播放一個更高的水平:http://developer.android.com/guide/topics/media/exoplayer.html

它支持不同的狀態,如在後臺緩衝:

// 1. Instantiate the player. 
player = ExoPlayer.Factory.newInstance(RENDERER_COUNT); 
// 2. Construct renderers. 
MediaCodecVideoTrackRenderer videoRenderer = … 
MediaCodecAudioTrackRenderer audioRenderer = ... 
// 3. Inject the renderers through prepare. 
player.prepare(videoRenderer, audioRenderer); 

我用它在我自己的項目中,它似乎很高效。另外谷歌做了玩家的全面演示:https://github.com/google/ExoPlayer/tree/master/demo/src/main/java/com/google/android/exoplayer/demo/full這比簡單的演示更強大。

+0

謝謝你的回答雨果。編號喜歡創建一個視頻播放列表應用程序。這些視頻將通過IP。像每個視頻之間的過渡是即時的。在視頻播放完之前,請先編輯即將播放的下一個視頻。我應該使用兩個Exoplayer實例嗎?這可能嗎?你會推薦這種方法嗎? – codeshark

+0

我不是那個外行人支持許多實例,但我確信應該有辦法做到這一點。我考慮使用ExoPlayer,你可以在github上打開一個問題:https://github.com/google/ExoPlayer –

相關問題