我正在使用cordova 6.4.0
與cordova-plugin-media
流式無線電臺在Android應用程序。不幸的是,有一種情況是應用程序沒有正確響應。我們假設用戶想要流式放大器,但是當流加載時,他想中止它(例如,因爲流被關閉,或者需要很長時間才能加載)。Cordova媒體插件 - 停止流式傳輸不工作 - 釋放()凍結設備
在這種情況下,我無法取消該過程!
media = new Media("http://direct.franceinfo.fr/live/franceinfo-midfi.mp3?ID=f9fbk29m84", mediaPlayerSuccess, mediaPlayerFail, mediaPlayerStatus);
media.play();
現在我想取消緩衝流的過程,但我無法。功能:
media.pause();
media.stop();
正在ADB日誌中引發錯誤消息並正在調用mediaPlayer-onError回調函數。
D/AudioPlayer(3362): AudioPlayer Error: pausePlaying() called during invalid state: 1
...
D/AudioPlayer(3362): AudioPlayer Error: stopPlaying() called during invalid state: 1
media.release()
命令停止加載流!然而,只是釋放流而不停止它,會導致其他相當大的問題:
如果您在媒體對象上調用media.release()
,大多數時間系統反應非常緩慢並掛起幾秒鐘。但如果你經常這樣做,系統完全凍結。這意味着它不再支持遠程控制命令。 Adb日誌仍在工作,但在這種情況下不顯示任何錯誤。只有POWER按鈕仍在工作(它鎖定和解鎖屏幕)。從這種擰緊狀態恢復的唯一方法是重新啓動設備。
我應該如何取消媒體流,如果它沒有播放,但呢?這是插件中的錯誤嗎?
附加是代碼片段,我用它來處理媒體流式邏輯。就像上面所描述的那樣......它基本上可以工作,但是如果你多次調用它,它會減慢甚至凍結設備。
function radioControl(action, media_src){
//media_src is a webradio-streamurl.
if(action == 'play') {
// Initial Play
if(media === null){
mediaCreateObject(media_src);
}
// If we get PLAY but on antoher station
else if(media.src != media_src){
mediaReleaseRessources();
mediaCreateObject(media_src);
}
//interrupt_timer = false;
if(media === null){
mediaCreateObject(media_src);
}
media.play();
}
else if (action === 'pause') {
//If we get "pause", but it didn't even start yet
if(media._duration == -1){
mediaReleaseRessources();
}
else{
media.pause();
}
}
}
function mediaCreateObject(media_src){
media = new Media(media_src, mediaPlayerSuccess, mediaPlayerFail, mediaPlayerStatus);
}
function mediaReleaseRessources(){
media.release();
}
這是離子1或2或任何其他? –
No ionic,just cordova'6.4.0' –
@MichaelB我覺得你必須先調用media.stop(),然後調用media.release()來釋放資源。請試試 – Gandhi