I am trying to stream a Shoutcast URL using HTML5 Audio on a Cordova app.
The problem I have run into is this: There appears to be no callback that fires when an audio stream loses connection to the ShoutCast URL. At this stage, the audio element shows that it is playing the audio, but there is no audio.
Code
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) {
...
}
Scenario
- Connect to the Internet (say, through a hotspot) and start the audio radio.
- Disconnect the hotspot from the Internet.
After the buffered content is played, the audio stops playing. But no callbacks are fired that indicate loss of connection.
media.networkState
is2
(NETWORK_LOADING)media.playbackRate
is1
(Playing forward at normal rate)media.readyState
is4
(HAVE_ENOUGH_DATA)media.preload
isnone
The callbacks that I tried, (which did not fire when connection was lost) are:
onstalled
onreset
onsuspend
onerror
onprogress
onwaiting
Question - Is there an audio callback that will fire when it is unable to play the audio due to lack of connection?
If not, is there any method which will update readyState
or networkState
? If so, I could just set a timer to check these values.
initialize()
. – Dunbaronstalled
would function the same. Anyway, I will update the question after I try this out. – Dunbarthis.media.addEventListener("stalled", ..
doesn't fire either. It fires when the media is played the first time, but it does not fire when I disconnect the Internet connection.... – Dunbarended
wasn't triggered either. – Dunbaronaudioprocess
, look at the buffer values, if they all remain to be zeros, you can identify the issue that way... long shot, but believe it would work – Fantom