私はcordova 6.4.0
とcordova-plugin-media
をAndroidアプリケーションのストリーミングラジオ局に使用しています。残念ながら、アプリケーションが適切に応答しない場合があります。Cordovaのメディアプラグイン - ストリーミングストリーミングが動作しない - release()デバイスがフリーズする
ストリームをロードしているときに、ストリームを停止したい(ストリームがダウンしている、またはロードに非常に時間がかかるなど)ために、ユーザーが無線通信をストリーミングしたいとします。
この場合、私はプロセスをキャンセルできません!
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-logはまだ動作していますが、この場合はエラーは表示されません。電源ボタンだけがまだ作動しています(画面のロックとロック解除)。このネジ止め状態から回復する唯一の方法は、デバイスを再起動することです。
メディアストリームが再生されていない場合、どのように取り消す必要がありますか?これはプラグインのバグですか?
添付ファイルは、メディアストリーミングロジックの処理に使用するコードスニペットです。上記のように...基本的には動作しますが、複数回呼び出すとデバイスが遅くなったり、デバイスがフリーズすることさえあります。
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または他のいずれかですか? –
イオンがありません、コードオフ '6.4.0' –
@MichaelB私はあなたがmedia.stop()を最初に呼び出してから、リソースを解放するためにmedia.release()を呼び出してください。試してみてください – Gandhi