HLS错误类型
Hls所有错误都通过唯一的单个事件发出信号。
每个错误按以下方式分类:
Hls.ErrorTypes.NETWORK_ERROR
对于网络相关的错误Hls.ErrorTypes.MEDIA_ERROR
媒体/视频相关错误Hls.ErrorTypes.OTHER_ERROR
对于所有其他错误
侦听错误示例代码:
hls.on(Hls.Events.ERROR, function (event, data) { varerrorType=data.type; varerrorDetails=data.details; varerrorFatal=data.fatal; switch (data.details) { caseHls.ErrorDetails.FRAG_LOAD_ERROR: // ....break; default: break; } });
致命错误恢复
hls.js 提供了通过以下 2 种方法“尝试”恢复致命网络和媒体错误:
hls.startLoad()
用以恢复网络错误。hls.recoverMediaError()
用以恢复媒体错误。
错误恢复示例代码:
varhls=null; functionfnCameraPlayer(id){ varvideo=document.getElementById(id); varvideoSrc=video.getAttribute('rtmpPath'); if (video.canPlayType('application/vnd.apple.mpegurl') ||video.canPlayType('application/x-mpegURL')) { video.src=videoSrc; video.addEventListener('loadedmetadata', function() { video.play(); }); } elseif (Hls.isSupported()) { hls=newHls(); hls.loadSource(videoSrc); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function(event, data) { video.play(); }); hls.on(Hls.Events.ERROR, function (event, data) { if (data.fatal) { switch(data.type) { caseHls.ErrorTypes.NETWORK_ERROR: if (data.details===Hls.ErrorDetails.MANIFEST_LOAD_ERROR||data.details===Hls.ErrorDetails.MANIFEST_LOAD_TIMEOUT||data.details===Hls.ErrorDetails.MANIFEST_PARSING_ERROR) { hls.loadSource(videoSrc) } else { hls.startLoad() } break; caseHls.ErrorTypes.MEDIA_ERROR: hls.recoverMediaError(); break; default: hls.destroy(); break; } } }); } }
hls.swapAudioCodec()
如果调用后仍然引发媒体错误hls.recoverMediaError()
,调用此方法可能有助于 解决音频解码器不匹配的问题。
工作流程应该是:
关于第一媒体错误:调用hls.recoverMediaError()
如果在第一个媒体错误之后“快速”引发另一个媒体错误:首先调用hls.swapAudioCodec()
,然后调用hls.recoverMediaError()
。
参考地址:hls的使用方式