【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

这篇具有很好参考价值的文章主要介绍了【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

大家好,欢迎来到停止重构的频道。

本期我们详细讨论直播的相关协议,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。

我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。

我们按这样的顺序讨论​

1、  RTMP、HTTP-FLV 

2、  HLS 

3、  Web-RTC 

4、  RTSP 

RTMP、HTTP-FLV协议

RTMP和HTTP-FLV都是建立在FLV封装之上的。

RTMP一般用作直播源推流HTTP-FLV一般用作直播观看

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

我们先讨论RTMP,RTMP协议是既可以推流、也可以拉流的协议

RTMP地址是rtmp://开头的,且推流地址与播放地址是一样的。

但是由于浏览器摒弃了Flash播放器,而且据说高并发下可能会出现一些不稳定的问题,所以RTMP一般只用作直播源推流推流到直播CDN等场景。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

RTMP协议需要特定的流媒体服务软件,如SRS、加入了RTMP插件的Nginx等。

在往期直播工作原理中讨论过,此类流媒体服务软件实际上就是音视频数据的中转站,数据一般只在内存中循环覆盖,不会写入磁盘。

RTMP协议的延迟是比较低的,大概在1-3秒左右。

RTMP通信是建立在TCP长连接通道上的,在封装音视频数据时会强制切片,限制每个数据包的大小。

强制切片也一定程度保证了实时性。有一定的弱网抵抗能力,因为每个数据包都不会太大,所以当某个数据包校验失败时,重新发送的成本不会太大,但也由于合并数据包会加大CPU压力,所以是有一定的性能消耗的。

RTMP协议还有一些变种协议,如RTMPT、RTMPS等,这里不作展开讨论。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

我们再讨论HTTP-FLV协议。

地址是http://开头的,是基于HTTP协议的HTTP-FLV可以简单地理解为RTMP的HTTP协议版本。功能和工作原理上是相似的,上面提到的RTMP切片数据功能HTTP-FLV也是有的。

但是,HTTP-FLV协议一般只能用作拉流观看

HTTP-FLV协议的延迟也是比较低的,大概在1-3秒左右,但实际体验下来 HTTP-FLV延迟会略高于RTMP,但是HTTP-FLV相对RTMP适配更多的播放场景。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

HTTP-FLV直播流一般需要需加入插件才能播放,如网页需要引入flv.js后,浏览器才能播放。HTTP-FLV直播流,这里需要特别感谢B站开源的flv.js,它促进了HTTP-FLV在浏览器的普及。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

HTTP-FLV协议需要特定的流媒体服务软件,如加入了HTTP-FLV插件的Nginx等。

值得一提的是,Nginx的HTTP-FLV插件是包含RTMP功能的,所以一般HTTP-FLV的流媒体服务,推流是以RTMP协议,拉流是用HTTP-FLV协议。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

现在比较流行的方案是,直播源推流是RTMP协议,直播拉流观看是HTTP-FLV协议。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

HLS协议

HLS协议一般只用作拉流观看,但是从严格意义上讲,HLS协议并不是流式协议。

它工作原理很简单,就是通过HTTP协议下载静态文件

不同的是,HLS协议的文件由两部分组成,一是多个只有几秒长度的.ts碎片视频文件,另一个是记录这些视频文件地址的.m3u8索引文件,且这些静态文件都是直接写入磁盘的。

更具体的说,HLS观看地址是以http://开头、.m3u8结尾的,实际上这个地址就是索引文件的地址,客户端获取到索引文件后,就可以下载对应的碎片视频文件并开始播放了。

由于HLS协议实际上是通过HTTP协议请求文件的,且HLS相关文件是直接写入磁盘的,所以并不需要特殊的流媒体服务软件,使用Nginx等HTTP服务就可以了

HLS协议可以用于点播和直播观看,其适配多种播放场景,一般加入插件就可以播放了,如网页加入HLS的js插件就可以播放了,苹果设备是原生支持HLS协议的。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

点播的场景下,也就是普通网络视频观看的场景下。

.m3u8索引文件会记录所有的碎片视频文件地址,HLS在点播的场景下,优势是更加明显的。

由于HLS的相关文件是无状态的静态文件,且每个文件的大小是有限的,所以负载均衡、CDN加速的效果更佳明显。

HLS协议的点播视频,会比.mp4、.flv的视频更快地播放出来,且在加载中跳转视频也会更加顺滑。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

直播的场景下,转码软件可以直接生成HLS相关文件到磁盘,客户端通过HTTP服务下载文件即可。

另外,也可以在Nginx加入RTMP插件,转码软件以RTMP协议推流到Nginx,再由Nginx生成HLS相关文件。

其中,后一种方案更加推荐,因为它对于前期研发和后期对接直播CDN的过度更加顺滑。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

另外,直播场景下的HLS相关文件与点播是有些不同的

视频流数据每几秒会打包成一个以.ts为后缀的碎片视频文件,每生成一个新的视频文件都会同步更新.m3u8索引文件

且碎片视频文件的个数是有上限的,当达到上限后,默认会将最旧的视频文件删除且更新.m3u8索引文件。

所以在直播的场景下,客户端也需要不断定时重新获取.m3u8索引文件。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 HLS协议在直播的场景下是没什么优势的。

虽然HLS协议的直播流也可以适配很多播放场景,但是由于需要生成静态文件,直播延迟很大大概在5-30秒左右,使用直播CDN的话,由于边缘节点同步等问题,直播延迟甚至可能会达到1分钟左右。

当然HLS协议也有一定的优势,在直播时移,也就是直播转点播,或者录播,也就是点播转直播的场景, 理论上只需要修改索引文件就可以了。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

另外,HLS协议的.m3u8索引文件支持二级索引,就是高清、标清、流畅等多个观看地址可以整合到一个索引文件。播放器可以根据当前带宽自动切换不同的观看地址,大部分网页播放器的“自动”也是因为这个。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

这里补充一个HLS协议的小知识点。

由于HLS协议的视频文件、索引文件都是直接写入磁盘的 ,所以如果长时间且多个直播流同时处理,会造成磁盘写入压力过大,机械磁盘可能会磁道会损坏,固态硬盘的寿命会加速衰减。

这种情况下,最好挂载一段内存空间作为HLS相关文件的写入位置,则不会造成磁盘写入压力过大的问题。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

补充说明一下,HLS协议是苹果推出的标准,与HLS协议类似的还有MPEG-DASH协议 HLS、MPEG-DASH的工作原理都是差不多的,只是局部标准不一样,这里不作展开。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

WebRTC协议 

WebRTC协议其实并不是为了直播场景而设计的,WebRTC是一种点对点的视频/语音通话协议。

由于WebRTC是基于UDP的,建立通信后,会不断以流式发送数据,所以延迟会比RTMP还要低。

在一些交互性较高的直播场景,如直播带货等场景,会使用WebRTC作为推流和观看协议 WebRTC的延迟理论上可以达到1秒内。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

WebRTC协议支持推流和拉流,地址一般是以webrtc://开头的,且推流和拉流地址一般也是一样的。

WebRTC虽然是点对点的协议,但是应用在直播场景的话,是需要搭建WebRTC服务器作为流媒体服务的,流媒体服务软件可以使用SRS。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

这里顺便一提,SRS是国内研发的一个比较流行的开源流媒体服务软件,目前4.0已经囊括了RTMP、HLS、WebRTC、HTTP-FLV等主流协议。 

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

RTSP协议 

RTSP一般不用作直播场景,RTSP一般用作摄像头、监控等硬件设备的实时视频流观看与推送上。

尽管RTSP协议也支持推流/拉流,且支持TCP、UDP切换以及其他诸多优点。

但是泛用性不足,特别是现在的浏览器都不支持RTSP的播放。

【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解

 

总结

以上是常用的直播协议的介绍,其中提到的延迟都是单纯的通信延迟,如果要放眼整个直播流程,延迟将会进一步放大。

因为直播延迟包括推流延迟、转码延迟、拉流延迟,即使使用WebRTC作为推流和拉流协议,最终的延迟也会有几秒的延迟。

至于直播延迟的问题,虽然以上协议起了关键作用,但是往往起不到绝对作用。

直播延迟的降低,会涉及到很多问题。如禁止B帧、GPU硬件加速、流媒体服务缓存I帧、码率限制等等细节问题,后续我们会出具体内容详细讨论。文章来源地址https://www.toymoban.com/news/detail-432762.html

到了这里,关于【音视频处理】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别?直播协议详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 用nginx实现一个直播服务—RTMP推流和HTTP-FLV拉流

    用nginx实现一个直播服务—RTMP推流和HTTP-FLV拉流

    目录 一、环境准备 二、安装编译nginx所需的安装包和下载nginx原代码包 三、nginx配置 四、启动nginx服务 五、测试推流和拉流服务 六、摄像头数据采集 七、查看统计 这篇文章主要记录用nginx实现直播服务,通过RTMP推流和通过HTTP-FLV或RTMP拉流,并在页面中播放。 CentOS Linux rel

    2024年02月13日
    浏览(12)
  • nginx 搭建http-flv(rtmp)流媒体的一次尝试

    项目需要通过调用海康摄像头实现远程监控,但是由于网络限制,只能通过代理来调用,因此只能放弃海康官网提供的视频插件,经过一番搜索,决定采用此种方式: nginx 搭建http-flv(rtmp)流媒体 基本的配置什么的,我就不在赘述,可参考网上的方法,经验证后的连接如下:

    2024年02月13日
    浏览(12)
  • Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

    Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

    #!/bin/sh HTTP_FLV_MODULE_PATH=…/nginx-http-flv-module-1.2.7 OpenSSL_PATH=…/openssl-1.1.1d #–prefix=./bin 代表编译完成之后输出的路径地址 #–add-module 将拓展模块添加到当前一起编译 ./configure --prefix=./bin –add-module= H T T P F L V M O D U L E P A T H   − − w i t h − o p e n s s l = HTTP_FLV_MODULE_PATH --with

    2024年04月15日
    浏览(17)
  • 使用JavaCV和Spring Boot搭建HTTP-FLV直播服务:实时播放RTSP、RTMP和桌面投屏画面

    使用JavaCV和Spring Boot搭建HTTP-FLV直播服务:实时播放RTSP、RTMP和桌面投屏画面 摘要: 在本文中,我们将探讨如何使用JavaCV和Spring Boot构建一个简单的HTTP-FLV直播服务,该服务可以在浏览器中通过flv.js进行实时播放RTSP、RTMP和桌面投屏的画面。我们将介绍所需的开发环境和依赖库

    2024年01月20日
    浏览(6)
  • 前端VUE播放RTSP、RTMP、HLS、FLV视频流的解决方案

    前端VUE播放RTSP、RTMP、HLS、FLV视频流的解决方案

    最近有个需求是前端在浏览器显示摄像头传回的RTSP视频流,我和后端都没做过视频流的项目,所以一步步摸索过来,方法和经验供大家参考。前端采用的技术有VUE+video.js+flv.js 从上图可以看出,RTSP流不能直接在浏览器播放,所以需要转码: RTMP的流需要在浏览器中用flash播放

    2024年02月06日
    浏览(11)
  • 华为云云耀云服务器L实例评测|将rtmp延迟降低到500ms以内-srs流媒体服务器测试(rtmp、http-flv、webrtc)

    华为云云耀云服务器L实例评测|将rtmp延迟降低到500ms以内-srs流媒体服务器测试(rtmp、http-flv、webrtc)

    最近华为云提供华为云-云耀云服务器出了一项 征文活动,可以免费试用。于是本人也迫不及待的白嫖体验一下华为云云耀云服务器L实例,该实例配置如下图,系统版本为 本次测试方向是使用SRS开源服务。SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB2

    2024年04月14日
    浏览(8)
  • 音视频开发---ffmpeg rtmp推流

    音视频开发---ffmpeg rtmp推流

    推流是将输入视频数据推送至流媒体服务器, 输入视频数据可以是本地视频文件(avi,mp4,flv......),也可以是内存视频数据,或者摄像头等系统设备,也可以是网络流URL。本篇介绍将本地视频文件通过FFmpeg编程以RTMP直播流的形式推送至RTMP流媒体服务器的方法。 推流的网络拓扑

    2024年02月16日
    浏览(15)
  • 解决http-flv视频在网页端最大只能播放6路的问题

    现在谷歌浏览器由于是同源设置,这个参数是写死到源码中的;nginx-rtmp-flv模块使用的不是http2.0,故大部分浏览器和nginx交互的时候,会因为并发数量的限制,因此最大只能播放6路视频。 1、使用商业版带有http2.0。 2、使用websocket替代http的,但是既有的方案未必支持更改。

    2024年02月12日
    浏览(43)
  • 【音视频】基于NGINX如何播放rtmp视频流

    【音视频】基于NGINX如何播放rtmp视频流

    现阶段直播越来越流行,直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 本文重点介绍基于NGINX如何播放rtmp视频流 可以参考上一篇博文:【音视频】基于webrtc协议浏览器播放rtsp https://blog.csdn.n

    2024年01月19日
    浏览(15)
  • 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如 FMS , Red5 , crtmpserver 等。RTMP协议可用于实现直播、点播应用,通过 FMLE(Flash Media Live Encoder) 推送音

    2023年04月08日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包