我想在Android設備上開發hls播放器,並且我有一些測試流可以播放。我遇到的一個問題是HLS流只是「停止」,在一些隨機位置凍結,可能會在1分鐘後,或20後。我得到的錯誤是:Android AudioFlinger服務器死亡|媒體服務器死亡
11-20 14:14:10.484: W/AudioSystem(18531):AudioFlinger服務器死亡! 11-20 14:14:10.484:W/IMediaDeathNotifier(18531):媒體服務器死亡
和 11-20 14:14:10.484:E/MediaPlayer的(18531):錯誤(100,0)
我基本上不知道如何防止或重新啓動流如果發生這種情況。我甚至不知道它爲什麼會發生。所以如果有人能回答這個問題,我會很高興:)。
// Create a new media player and set the listeners
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
mMediaPlayer.reset();
return false;
}
});
mMediaPlayer.setDataSource(path);
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepareAsync();
//mMediaPlayer.prepare();
if(extras.getString("type") == "VOD") {
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
}
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setScreenOnWhilePlaying(true);
//mMediaPlayer.setOnVideoSizeChangedListener(this);
//mcontroller = new MediaController(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
public void onPrepared(MediaPlayer mediaplayer) {
Log.d(TAG, "onPrepared called");
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed) {
runOnUiThread(new Runnable() {
public void run() {
startVideoPlayback();
}
});
}
mcontroller = new MediaController(this);
mcontroller.setMediaPlayer(this);
mcontroller.setAnchorView(findViewById(R.id.surface));
mcontroller.setEnabled(true);
handler.post(new Runnable() {
public void run() {
mcontroller.setEnabled(true);
mcontroller.show();
}
});
}
請告訴您是否需要更多代碼。
好吧,是它的Android設備誰不小心滴連接或數據包不是從服務器到達的設備?由於我是一個noob,我可能有很多東西,我可以添加,使它更好地工作,我相信。 我可以重新連接我的當前設置嗎? – DreamHawk
這實際上是一個不好的答案......即使我寫了HLS(我的道歉),我仍然在考慮定期HTTP流式傳輸。考慮到段文件應該相對較短,您可能不希望請求特定的字節。最簡單的方法是當你收到這樣的錯誤時,通過reset/setDataSource/prepare/start過程。 – Dave
謝謝,這是一種合適的方式嗎? 由於android設備或服務器,MediaPlayer會斷開連接嗎? – DreamHawk