我在android中使用MediaPlayer
來流式傳輸通過ListView
添加的幾個音頻文件。從ListView
單擊項目時播放音頻。MediaPlayer:音頻將不會從開始流
流很長(35分鐘+),並且如果用戶在流結束之前退出應用程序。然後,在啓動後從ListView
中再次選擇該項目時,該流將從與之相同的地方恢復,而我希望從ListView
中選擇該項目時從頭開始。
下面的代碼:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
musicService.player.reset();
musicService.player.release();
musicService.player = new MediaPlayer();
try {
musicService.player.setDataSource(skURL[position]);
} catch (IOException e) {
e.printStackTrace();
}
musicService.player.setAudioStreamType(AudioManager.STREAM_MUSIC);
musicService.player.prepareAsync();
musicService.player.setOnPreparedListener(this);
}
@Override
public void onPrepared(MediaPlayer mp) {
musicService.playSK();
}
//In the MusicService.java
public void playSK(){
player.start();
}
我試圖尋找位置設置爲0的playSK()
方法以爲這樣就可以解決這個問題就像
public void playSK(){
player.seekTo(0);
player.start();
}
而且部分做了。當選擇ListView
的第一個項目,則該流總是從頭開始,但點擊任何其他項目提供了以下錯誤:
MediaPlayer : error (-2147483648, 0)
MediaPlayer : start called in state 0
MediaPlayer : error (-38, 0)
MediaPlayer : Error (-2147483648, 0)
MediaPlayer : Error (-38, 0)
更新:
所以我決定鑽進去,爲什麼有試圖尋找曲目開始時引起的問題,我發現由於協議例外,mediaplayer無法獲得持續時間。
10-01 17:35:06.065 10031-10031/project D/LOG: data source set
10-01 17:35:06.065 10031-10031/project D/LOG: preparing media player
10-01 17:35:06.067 10031-10066/project D/MediaHTTPConnection: filterOutInternalHeaders: key=User-Agent, val= stagefright/1.2 (Linux;Android 6.0.1)
10-01 17:35:06.070 10031-10031/project D/MediaPlayer: setSubtitleAnchor in MediaPlayer
10-01 17:35:06.073 10031-10031/porject D/LOG: media player prepared
10-01 17:35:06.074 10031-10066/project D/MediaHTTPConnection: proxy null port 0
10-01 17:35:06.171 10031-10066/project W/MediaHTTPConnection: readAt 12648448/32768 => java.net.ProtocolException
10-01 17:43:43.352 21618-21618/project D/LOG: seeking to start
10-01 17:43:43.352 21618-21618/project W/MediaPlayer: Stream has no duration and is therefore not seekable.
如何處理此異常並解決問題?
重點關注MP對象的各種狀態。國際海事組織如果你有正確的軌道加載和播放器處於正確的狀態,你應該有一個NP調用seek() –
更新:我該如何處理ProtocolException? – Devansh
如果你不熟悉ffmpeg,試着將媒體上傳到youtube,然後從youtube下載並重新嘗試在下載的版本上尋找..這可能是好的,因爲utube remux'd它與原子 –