实时视频流方案对比

  1. 1. 实时直播协议简介
    1. 1.1 RTMP
    2. 1.2 HLS
    3. 1.3 HTTP FLV
    4. 1.4 WebRTC
  2. 2. 协议对比
  3. 3. 支持性对比
  4. 4. 设计方案
    1. 4.1 传统方案
    2. 4.2 WebRTC
    3. 5. 视频分辨率对带宽的影响
  5. 6. 总结

实时视频流方案对比

1. 实时直播协议简介

1.1 RTMP

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。RTMP实际上是现在编码器输出的工业标准协议,基本上所有的编码器(摄像头之类)都支持RTMP输出。
由于RTMP是由Adobe制定的协议,所以需要使用flash插件进行视频的播放。2017年7月25日,Adobe Systems公司宣布,计划在2020年底逐步淘汰Flash播放器插件,所以RTMP的使用会受到限制。

1.2 HLS

HLS (HTTP Live Streaming)是Apple的动态码率自适应技术。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5 是直接支持这个。
HLS实现的方式是将大的视频切割成小的切片,然后通过http协议发送到客户端。在实时视频流中,需要缓存一段时间的视频,然后进行切割。这也导致HLS在实时视频流中有很大的延迟。

1.3 HTTP FLV

HTTP Flv是将RTMP封装到http协议中。为了摆脱Adobe又能在http进行流传输的RTMP的变种。但是在客户端,仍然依赖flash插件。为了摆脱客户端浏览器使用flash,又开发除了flv.js来播放HTTP Flv。

1.4 WebRTC

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox…)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现,W3C等组织正在制定Javascript 标准API,目前是WebRTC 1.0版本,Draft状态;另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。

2. 协议对比

项目 RTMP WebRTC HLS HTTP-Flv NGINX-RTMP
协议定制者 Adobe Google Apple CERN nginx
延迟 1~3s 200ms~400ms 10s+ 10s+ 5s-10S+
传输方式 tcp流 udp http http流 tcp流
视频封装格式 flv tag 任何格式 Ts文件 flv flv tag
数据分段 连续流 连续流 切片文件 连续流 切片文件
H5支持 不支持 支持 hls.js f flv.js 不支持

3. 支持性对比

项目 RTMP WebRTC HLS HTTP-Flv NGINX-RTMP
Microsoft Edge 不支持 12+ 12+ flv.js 不支持
Google Chrome 默认不支持 28+ 30+ flv.js 默认不支持
Safari 不支持 11+ 6.0+ flv.js 不支持
Android 不支持 29+ 4.1+ 不支持 不支持
iOS 不支持 11+ 3.0+ 不支持 不支持

4. 设计方案

4.1 传统方案

视频都通过SRS然后进行视频分发,带宽的压力集中到CDN上。
CDN的带宽限制了客户端同时播放视频的数量和视频的连续性。

4.2 WebRTC

视频通过P2P进行传输,带宽负载平均到视频设备端,相比传统视频流,设备端负载会变大。因为没有了带宽的压力,所以客户端能播放任意设备端能承载的视频数量。

5. 视频分辨率对带宽的影响

视频服务最大的问题点是带宽

  • 码率:
    视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。
    视频码率影响体积,与体积成正比.码率越大,体积越大;码率越小,体积越小。 “码率”就是失真度,码率越高越清晰。
  • 帧率:
    帧率(Frame rate)是以帧称为单位的位图图像连续出现在显示器上的频率(速率)。
    帧率影响画面流畅度,与画面流畅度成正比.帧率越大,画面越流畅;帧率越小,画面越有跳动感。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。
  • 分辨率:
    分辨率是用于度量图像内数据量多少的一个参数,通常表示成ppi.
    影响图像大小,与图像大小成正比.分辨率越高,图像越大;分辨率越低,图像越小。
分辨率 帧率 码率 带宽
1280*720 20fps 1500 kbps 11.71875M
1280*720 15fps 1300 kbps 10.15625M
1280*720 10fps 1000 kbps 7.8125M
960*540 20fps 1100 kbps 8.59375M
960*540 15fps 900 kbps 7.03125M
960*540 10fps 700 kbps 5.46875M
640*480 20fps 800 kbps 6.25M
640*480 15fps 700 kbps 5.46875M
640*480 10fps 500 kbps 3.90625M
640*360 20fps 700 kbps 5.46875M
640*360 15fps 600 kbps 4.6875M
640*360 10fps 400 kbps 3.125M
480*320 20fps 600 kbps 4.6875M
480*320 15fps 500 kbps 3.90625M
480*320 10fps 400 kbps 3.125M
176*144 15fps 400 kbps 3.125M
176*144 10fps 300 kbps 2.34375M

6. 总结

  • 传统方案视频流经过服务器,所以视频的播放受到服务器带宽的限制。5M带宽只能支持320P视频的流畅播放。
  • WebRTC方案视频流不经过服务器,直接是点对点(P2P)传输,所以对服务器带宽没有要求。

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation