Я пытаюсь передать URL-адрес Shoutcast с помощью HTML5 Audio в приложении Cordova.
Проблема, с которой я столкнулся, заключается в следующем: похоже, что обратный вызов не срабатывает, когда аудиопоток теряет соединение с URL-адресом ShoutCast. На этом этапе звуковой элемент показывает, что он воспроизводит аудио, но звука нет.
Код
Radio = {
initialized: false,
isBuffering: false,
interrupted: false,
isPlaying: false,
media: null,
trackName: '',
url: 'shoutcast_url',
initialize: function () {
if (!this.media) {
this.media = new Audio(this.url);
this.media.preload = "none";
this.media.onerror = function (e) {
App.alert("Unable to connect to Radio");
Radio.interrupt();
};
this.media.onwaiting = function (e) {
Radio.set_buffering(true);
};
this.media.onplaying = function (e) {
Radio.set_buffering(false);
};
}
},
set_buffering: function (value) {
...
}
сценарий
- Подключитесь к Интернету (скажем, через горячую точку) и запустите аудио-радио.
- Отключите точку доступа из Интернета.
После воспроизведения буферизованного содержимого звук перестает воспроизводиться. Но не вызываются обратные вызовы, которые указывают на потерю соединения.
-
media.networkState
-2
(NETWORK_LOADING) -
media.playbackRate
-1
(воспроизведение вперед с обычной скоростью) -
media.readyState
-4
(HAVE_ENOUGH_DATA) -
media.preload
none
Обратные вызовы, которые я пробовал (которые не срабатывали, когда соединение было потеряно):
-
onstalled
-
onreset
-
onsuspend
-
onerror
-
onprogress
-
onwaiting
Вопрос. Есть ли звуковой обратный вызов, который срабатывает, когда он не может воспроизвести звук из-за отсутствия соединения?
Если нет, есть ли какой-либо метод, который будет обновлять readyState
или networkState
? Если это так, я могу просто установить таймер для проверки этих значений.