kaisawind's blog
  • 关于
  • 所有帖子

实时视频流方案对比 - Wed, May 6, 2020

实时视频流方案对比

  • 实时视频流方案对比
    • 1. 实时直播协议简介
      • 1.1 RTMP
      • 1.2 HLS
      • 1.3 HTTP FLV
      • 1.4 WebRTC
    • 2. 协议对比
    • 3. 支持性对比
    • 4. 设计方案
      • 4.1 传统方案
      • 4.2 WebRTC
      • 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. 协议对比

项目RTMPWebRTCHLSHTTP-FlvNGINX-RTMP
协议定制者AdobeGoogleAppleCERNnginx
延迟1~3s200ms~400ms10s+10s+5s-10S+
传输方式tcp流udphttphttp流tcp流
视频封装格式flv tag任何格式Ts文件flvflv tag
数据分段连续流连续流切片文件连续流切片文件
H5支持不支持支持hls.js fflv.js 不支持

3. 支持性对比

项目RTMPWebRTCHLSHTTP-FlvNGINX-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*72020fps1500 kbps11.71875M
1280*72015fps1300 kbps10.15625M
1280*72010fps1000 kbps7.8125M
960*54020fps1100 kbps8.59375M
960*54015fps900 kbps7.03125M
960*54010fps700 kbps5.46875M
640*48020fps800 kbps6.25M
640*48015fps700 kbps5.46875M
640*48010fps500 kbps3.90625M
640*36020fps700 kbps5.46875M
640*36015fps600 kbps4.6875M
640*36010fps400 kbps3.125M
480*32020fps600 kbps4.6875M
480*32015fps500 kbps3.90625M
480*32010fps400 kbps3.125M
176*14415fps400 kbps3.125M
176*14410fps300 kbps2.34375M

6. 总结

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


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub