【发布时间】:2016-06-06 10:31:58
【问题描述】:
我正在尝试在 Cordova 应用程序上使用 HTML5 音频流式传输 Shoutcast URL。
我遇到的问题是:当音频流失去连接到 ShoutCast URL 时,似乎没有触发回调。在这个阶段,音频元素显示它正在播放音频,但是没有音频。
代码
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
我尝试的回调(连接丢失时没有触发)是:
onstalledonresetonsuspendonerroronprogressonwaiting
问题 - 是否有一个音频回调会在由于缺少连接而无法播放音频时触发?
如果没有,有什么方法可以更新readyState 或networkState?如果是这样,我可以设置一个计时器来检查这些值。
【问题讨论】:
-
您能展示一下您是如何聆听这些事件的吗?例如,停滞的应该可以工作,如此处所述:developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events
-
@RaymondCamden 将我当前的代码添加到问题中。我在
initialize()中添加了回调。 -
那么您是否尝试过停滞不前? this.media.addEventListener("stalled", ...
-
不,我没有添加事件监听器。我认为
onstalled的功能是一样的。无论如何,我会在尝试后更新问题。 -
@RaymondCamden
this.media.addEventListener("stalled", ..也不会触发。第一次播放媒体时它会触发,但当我断开 Internet 连接时它不会触发....
标签: javascript cordova streaming html5-audio shoutcast