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. 协议对比

项目 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)传输,所以对服务器带宽没有要求。


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub

▄