我正在使用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