1400
A general network error has occurred while downloading resource E.g.: the manifest or a segment of the stream.
Please look at the response of the failed network request to determine the exact reason of the failure.
In case a segment download fails, the player tries to download the same segment from a different CDN, if one is available. In DASH they are specified by BaseURL
. In HLS the player switches to a backup stream. If this fails, the player tries to load different qualities for the same playback position in the stream.
The player will retry to download the resources based on the max_retries, max_cdn_retries and max_mpd_retries
If all of the above fail, the NETWORK_ERROR
is thrown and playback stops.
Failed segment downloads are per default ignored and the player continues with the next segment instead of throwing an error.
In case the manifest is not able to be downloaded, the player will retry to download it based on the max_mpd_retries, mpd_retry_delay or triggered when the mpd_update_period_tolerance is reached.
If the retry logic fails, the NETWORK_ERROR
is thrown and playback stops.
You can try to see what responses are returned for the manifests either in the network tab of the device or by configuring the preprocessHttpResponse in your player config as seen in the example below.
var config = {
network: {
preprocessHttpResponse: function(type, response) {
if (type === bitmovin.player.HttpRequestType.MANIFEST_DASH || type === bitmovin.player.HttpRequestType.MANIFEST_HLS_MASTER) {
// Here you can track all the relevant information, such as status.
console.log('Reply for manifest', response.status, response);
}
return Promise.resolve(response);
}
}
}
Check the console in case there have been CORS issues which block the request. The response status will be reflected with a value of XMLHttpRequest.UNSENT. You can configure the preprocessHttpResponse to listen for requests that failed if you do not have access to the network tab of your device.
var config = {
network: {
preprocessHttpResponse: function(type, response) {
// The value of XMLHttpRequest.UNSENT
var unsentResponseStatus = 0;
if (response.status === unsentResponseStatus) {
// Look for errors in the console or the response from the body below.
console.log(`Response for ${response.url} returned with status=${response.statsus}: `, response.body, response);
}
return Promise.resolve(response);
}
}
}
In case segments are not being able to be loaded, and you do not have access to the network tab of your device, you can use the preprocessHttpResponse to listen in to the incoming responses. This can help narrow down the reason of the failure.
var config = {
network: {
preprocessHttpResponse: function(type, response) {
var notOkResponse = 200;
// Filter for audio and video based on the HttpRequestType
if((type === bitmovin.player.HttpRequestType.MEDIA_AUDIO || type === bitmovin.player.HttpRequestType.MEDIA_VIDEO) && response.status !== notOkResponse){
console.log(`There was a problem loading ${response.url}`, response);
}
return Promise.resolve(response);
}
}
}