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

 

相关文章
|
9月前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
324 1
|
编解码 JavaScript iOS开发
如何生成HLS协议的M3U8文件
什么是HLS协议:   HLS(Http Live Streaming)是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。
4242 0
|
3月前
|
编解码 索引
RTMP 和 HLS 协议的优缺点
【10月更文挑战第26天】RTMP和HLS协议各有优缺点,在选择使用哪种协议时,需要根据具体的直播场景、观众群体、设备兼容性、服务器性能等因素进行综合考虑,以选择最适合的直播协议。
|
6月前
|
Web App开发 编解码 前端开发
怎么把rtsp视频流转成webrtc接口
【8月更文挑战第8天】将RTSP视频流转换为WebRTC接口涉及多个步骤:首先使用工具如webrtc-streamer、ffmpeg等从RTSP源获取视频流;接着对流进行解码与编码至WebRTC兼容格式(如VP8、H.264);然后利用WebSocket建立客户端与服务器间的双向信令通道;再通过JavaScript创建WebRTC PeerConnection并交换SDP信息;最后添加Track传输视频数据,并在接收端解析显示。使用webrtc-streamer可简化这一过程,其API支持多种操作如添加ICE候选、创建Offer等。
961 2
|
6月前
|
监控 开发工具 数据安全/隐私保护
Windows平台如何实现多路RTSP|RTMP流合成后录像或转发RTMP服务
本文介绍了在Windows平台上实现多路RTSP/RTMP视频流的合并技术。主要应用场景包括驾考、全景摄像头以及多路会议录制等。技术实现上,文章详细展示了如何使用特定的SDK来解码并回调YUV或RGB数据,再将这些数据按照图层形式进行合成。示例代码中给出了初始化参数、设置视频帧回调函数、以及如何配置不同图层的具体步骤。最终,合成后的视频可以推送到RTMP服务器、注入到本地RTSP服务,或是直接录制为MP4文件。此外,还提供了添加实时文字水印的方法,并展示了四路视频流合成后的“四宫格”效果。
184 0
|
8月前
|
数据安全/隐私保护 索引 Python
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
详尽分享视频相关的hls协议、VLC播放器、m3u文件的播放
155 0
|
9月前
|
流计算
HLS协议解析
HLS协议解析
182 1
|
容器
flv拉流在项目中如何使用(二)
这里主要是我们不能使用video容器自带的暂停和播放按钮了,我们要隐藏原来的自己实现暂停和播放。暂停和播放说白了就是断流和重新拉流
178 1
|
编解码 开发工具 C#
RTSP/RTMP播放端录像不可忽视的几个设计要点
很多开发者提到,拉取的摄像机(一般RTSP流)或RTMP流,如果需要录制,需要考虑哪些因素,本文以大牛直播SDK的Windows平台拉流端录像为例(github),做个简单的介绍:
193 0
|
定位技术 开发工具 Windows
如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析
在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输,并通过h264 sei方式就可以把数据放入h264 Access Unit中传输。
346 0