HLS和RTMP协议介绍及HLS使用
一、RTMP
1、RTMP,全称
Real Time Messaging Protocol,即实时消息传送协议。Adobe 公司为 Flash
播放器和服务器之间音视频数据传输开发的私有协议。工作在 TCP 之上的明文协议,默认使用端口
1935。协议中的基本数据单元成为消息(Message),传输的过程中消息会被拆分为更小的消息块(Chunk)单元。最后将分割后的消息块通过
TCP 协议传输,接收端再反解接收的消息块恢复成流媒体数据。
2、RTMP优点:RTMP
是专为流媒体开发的协议,对底层的优化比其它协议更加优秀,同时它 Adobe Flash 支持好,基本上所有的编码器(摄像头之类)都支持 RTMP
输出。现在 PC 市场巨大,PC 主要是 Windows,Windows 的浏览器基本上都支持
Flash。另外RTMP适合长时间播放,曾经有过测试,联系 100 万秒,即 10 天多连续播放没有出现问题。最后 RTMP
的延迟相对较低,一般延时在 1-3s 之间,一般的视频会议,互动式直播,完全是够用的。
3、不足:一方面是它是基于 TCP 传输,非公共端口,可能会被防火墙阻拦;另一方面,也是比较坑的一方面是 RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放。
二、HLS
1、HLS
(HTTP Live Streaming) 则是苹果公司基于 HTTP 的流媒体传输协议。主要应用于 iOS 设备,包含(iPhone,
iPad, iPod touch) 以及 Mac OSX 提供音视频直播服务和录制内容(点播)等服务。相对于常见的流媒体协议,HLS
最大的不同在于它并不是一下请求完整的数据流。它会在服务器端将流媒体数据切割成连续的时长较短的 ts 小文件,并通过 M3U8 索引文件按序访问
ts 文件。客户端只要不停的按序播放从服务器获取到的文件,从而实现播放音视频。
2、HLS 的优势:
(1)Apple 的全系列产品支持:由于 HLS 是苹果提出的,所以在 Apple 的全系列产品包括 iPhone、 iPad、safari 都不需要安装任何插件就可以原生支持播放 HLS, 现在 Android 也加入了对 HLS 的支持。
(2)穿透防火墙。基于 HTTP/80 传输,有效避免防火墙拦截
(3)性能高。通过 HTTP 传输, 支持网络分发,CDN 支持良好,且自带多码率自适应,Apple 在提出 HLS 时,就已经考虑了码流自适应的问题。
3、HLS的劣势:
(1)实时性差,延迟高。HLS 的延迟基本在 10s+ 以上
(2)文件碎片。特性的双刃剑,ts 切片较小,会造成海量小文件,对存储和缓存都有一定的挑战
三、常用的M3U8播放器
1、VLC Media Player: VLC是一款开源的多媒体播放器,支持几乎所有的音频和视频格式,包括M3U8。用户只需将M3U8链接粘贴到VLC中,即可流畅播放。
2、JW Player: JW Player是一款流行的网页视频播放器,支持M3U8格式。它提供了丰富的功能,如广告插入、分析和自适应流媒体播放,适合用于商业网站和视频平台。
3、 Video.js: Video.js是一个开源的HTML5视频播放器,支持M3U8格式。它具有良好的可扩展性,用户可以通过插件和主题自定义播放器的外观和功能。
4、HLS.js: HLS.js是一个JavaScript库,专门用于在不支持HLS的浏览器中播放M3U8流。它通过Media Source Extensions(MSE)技术实现流媒体播放,适合开发者在网页中集成M3U8播放功能。
5、 m3u8player: m3u8player是一款流行的媒体服务器软件,支持M3U8格式的流媒体播放。用户可以通过Plex将本地媒体文件和在线流媒体整合在一起,方便地在各种设备上观看。
四、HLS插件使用
HLS.js是一个用于处理HTTP
Live Streaming
(HLS)协议的开源库。由于HLS是由Apple公司提出的,所以在iOS电脑或手机上,你可以直接使用Safari浏览器的<video>播放m3u8格式视频文件。而其他浏览器则需要借助hls.js来兼容m3u8。使用hls.js,不需要任何定制的播放器,只需要<video>元素就能播放m3u8。
(1)加载js和元素
<video id="video" controls autoplay playsinline width=100% ></video> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest/dist/hls.min.js"></script>
(2)调用hls.js,首先判断浏览器是否支持hls,如果支持就实例化new Hls(),加载m3u8源,然后播放。如果不支持hls,而支持苹果原生应用,则播放另一个m3u8源。以下直播是静音自动播放。
<script> var video = document.getElementById('video'); var linkSource="https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8"; if(Hls.isSupported()) { var hls = new Hls({autoStartLoad: true}); hls.loadSource(linkSource); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED,function() { //video.volume = 0;// 自动播放 video.muted = true; // 静音自动播放 video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src =linkSource; video.addEventListener('loadedmetadata',function() { // video.volume = 0;// 自动播放 video.muted = true; // 静音自动播放 video.play(); }); } </script>
用户登录
还没有账号?
立即注册