update video player
This commit is contained in:
parent
e5119016fc
commit
353d62846e
6 changed files with 68 additions and 35 deletions
|
@ -227,7 +227,7 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
break;
|
||||
case Hls.ErrorTypes.MEDIA_ERROR:
|
||||
console.log("fatal media error encountered, try to recover");
|
||||
hls.recoverMediaError();
|
||||
handleMediaError();
|
||||
break;
|
||||
default:
|
||||
// cannot recover
|
||||
|
@ -280,6 +280,36 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
}
|
||||
}
|
||||
|
||||
var recoverDecodingErrorDate, recoverSwapAudioCodecDate;
|
||||
|
||||
function handleMediaError() {
|
||||
|
||||
if (!hlsPlayer) {
|
||||
return;
|
||||
}
|
||||
|
||||
var now = Date.now();
|
||||
|
||||
if (window.performance && window.performance.now) {
|
||||
now = performance.now();
|
||||
}
|
||||
|
||||
if (!recoverDecodingErrorDate || (now - recoverDecodingErrorDate) > 3000) {
|
||||
recoverDecodingErrorDate = now;
|
||||
console.log('try to recover media Error ...');
|
||||
hlsPlayer.recoverMediaError();
|
||||
} else {
|
||||
if (!recoverSwapAudioCodecDate || (now - recoverSwapAudioCodecDate) > 3000) {
|
||||
recoverSwapAudioCodecDate = now;
|
||||
console.log('try to swap Audio Codec and recover media Error ...');
|
||||
hlsPlayer.swapAudioCodec();
|
||||
hlsPlayer.recoverMediaError();
|
||||
} else {
|
||||
console.error('cannot recover, last media error recovery failed ...');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function applySrc(elem, src) {
|
||||
|
||||
if (window.Windows) {
|
||||
|
@ -306,7 +336,10 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
// Chrome now returns a promise
|
||||
return promise.catch(function (e) {
|
||||
|
||||
if ((e.name || '').toLowerCase() === 'notallowederror') {
|
||||
var errorName = (e.name || '').toLowerCase();
|
||||
// safari uses aborterror
|
||||
if (errorName === 'notallowederror' ||
|
||||
errorName === 'aborterror') {
|
||||
// swallow this error because the user can still click the play button on the video element
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
@ -646,10 +679,8 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
|
||||
function onError() {
|
||||
|
||||
destroyCustomTrack(this);
|
||||
var errorCode = this.error ? this.error.code : '';
|
||||
errorCode = (errorCode || '').toString();
|
||||
console.log('Media element error code: ' + errorCode);
|
||||
var errorCode = this.error ? (this.error.code || 0) : 0;
|
||||
console.log('Media element error code: ' + errorCode.toString());
|
||||
|
||||
var type;
|
||||
|
||||
|
@ -664,12 +695,15 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
break;
|
||||
case 3:
|
||||
// MEDIA_ERR_DECODE
|
||||
break;
|
||||
handleMediaError();
|
||||
return;
|
||||
case 4:
|
||||
// MEDIA_ERR_SRC_NOT_SUPPORTED
|
||||
break;
|
||||
}
|
||||
|
||||
destroyCustomTrack(this);
|
||||
|
||||
//events.trigger(self, 'error', [
|
||||
//{
|
||||
// type: type
|
||||
|
@ -708,7 +742,7 @@ define(['browser', 'pluginManager', 'events', 'apphost', 'loading', 'playbackMan
|
|||
// simple playback should use the native support
|
||||
if (mediaSource.RunTimeTicks) {
|
||||
//if (!browser.edge) {
|
||||
return false;
|
||||
return false;
|
||||
//}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue