HLS错误处理

简介: hls.js是一个JavaScript库,可实现HTTP Live Streaming客户端。 它依靠HTML5视频和MediaSource扩展进行播放。

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的使用方式

https://github.com/video-dev/hls.js/blob/master/docs/API.md#final-step-destroying-switching-between-streams

 

相关文章
|
6月前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
272 1
|
编解码 JavaScript iOS开发
如何生成HLS协议的M3U8文件
什么是HLS协议:   HLS(Http Live Streaming)是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。
4195 0
|
7天前
|
编解码 索引
RTMP 和 HLS 协议的优缺点
【10月更文挑战第26天】RTMP和HLS协议各有优缺点,在选择使用哪种协议时,需要根据具体的直播场景、观众群体、设备兼容性、服务器性能等因素进行综合考虑,以选择最适合的直播协议。
|
7天前
|
编解码
RTMP 和 HLS 协议的实时性和稳定性哪个更好?
【10月更文挑战第26天】RTMP和HLS协议在实时性和稳定性方面各有优劣,具体选择哪种协议应根据直播的具体需求和应用场景来决定。如果注重实时互动,RTMP可能是更好的选择;如果考虑到兼容性和在不同网络条件下的稳定播放,HLS则更为合适。
|
5天前
|
编解码 监控 网络协议
HLS 和 RTSP 的优势
【10月更文挑战第25天】HLS和RTSP各自的优势使其在不同的应用场景中发挥着重要作用。HLS适用于需要广泛兼容性、自适应码率和简单部署的场景,如在线视频点播、直播等;而RTSP则更适合对实时性、精确播放控制和互操作性要求较高的专业级实时流媒体应用。了解它们的优势有助于根据具体的项目需求选择最合适的流媒体传输协议。
21 6
|
3月前
|
iOS开发 开发者
iOS平台RTMP|RTSP播放器如何实时回调YUV数据
我们在做RTMP、RTSP播放器的时候,有开发者需要自己处理拉取到的YUV数据,做二次分析之用,为此,我们做了以下的设计:InitPlayer之后,再调用SmartPlayerStart()接口之前,设置yuv数据回调即可。
|
5月前
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
100 0
|
6月前
|
流计算
HLS协议解析
HLS协议解析
130 1
|
6月前
|
存储 编解码 容器
什么是 MKV 视频格式及其工作原理
对于希望创建、共享和享受多媒体内容的视频爱好者来说,MKV 视频格式是一种可靠且多功能的选择。 其兼容性、功能和质量使其成为休闲用户和行业专业人士的宝贵选择。
204 0