介绍
自从前几年斗鱼、熊猫TV等直播服务火起来后,直播逐渐进入人们的视野,再加上抖音,快手,天猫直播购物的兴起,企业逐渐将直播纳入了自己营销的系统中,去年直播抓娃娃更是处于风口,获得了一大批用户。
单纯从技术角度来讲,直播技术主要应用为以下几类:
- RTMP协议
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等
eg: 香港卫视:rtmp://live.hkstv.hk.lxdns.com/live/hks- HttpFlv
HttpFlv 就是 HTTP+FIV ,将音视频数据封装成FLV格式,然后通过 HTTP 协议传输给客户端。理解HttpFlv协议,这就是关键。
eg: http://192.168.4.230/abc.flv- HLS
HTTP Live Streaming(HLS)是苹果公司实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播。它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验。
eg: 香港卫视:http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8- WS协议
HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。
eg: ws://192.168.4.230/123456
接下来让我们对比下这四者的区别
RTMP
优势:
1. 实时性高
RTMP实时性可控制在3s中之内,网络状况良好时,延时可控制在0.8s左右
2. 支持加密
RTMPE和RTMPS为加密协议。虽然HLS也有加密,但在PC平台上flash对RTMPE/RTMPS支持比HLS要好。
3. 编码兼容性高
RTMP实际上是现在编码器输出的工业标准协议,基本上所有的编码器(摄像头之类)都支持RTMP输出。原因在于PC市场巨大,PC主要是Windows,Windows的浏览器基本上都支持Flash,Flash又支持RTMP支持得非常好。(由于Flash诸多问题,新版浏览器已经不提倡使用Flash,尤其是chrome,页面默认禁止Flash播放)
4. 稳定性高
在PC平台上flash播放的最稳定方式是RTMP,如果做CDN或者大中型集群分发,选择稳定性高的协议一定是必要的。HTTP也很稳定,但HTTP是在协议上稳定;稳定性不只是服务端的事情,在集群分发,服务器管理,主备切换,客户端的支持上,RTMP在PC分发这种方式上还是很有优势。
5. 系统容错
容错有很多种级别,RTMP的集群实现时可以指定N上层,在错误时切换不会影响到下层或者客户端,另外RTMP的流没有标识,切到其他的服务器的流也可以继续播放。HLS的流热备切换没有这么容易。若对于直播的容错要求高,譬如降低出问题的概率,选择RTMP会是很好的选择。
6. 可监控
在监控系统或者运维系统的角度看,流协议应该比较合适监控。HTTP的流监控感觉没有那么完善。这个不算绝对优势,但比较有利。
劣势
1. 播放兼容性差
RTMP最大软肋,因为是Adobe的私有协议,很多设备都无法直接播放,比如iOS,需要外挂第三方解码器,由此会带来发热、耗电等问题。
HTML5也是无法直接播放RTMP,因此你看到的很多手机网页上的直播,是由下面HLS来推流的。
不过PC端软件一般喜欢采用RTMP播放流媒体
2. 协议复杂
RTMP协议比起HTTP复杂很多,导致性能低下。
3. 有累积延迟
流协议做缓存不方便。譬如点播,若做RTMP流协议,边缘缓存RTMP会很麻烦。如果是HTTP,缓存其实也很麻烦,但是HTTP服务器的缓存已经做了很久,所以只需要使用就好。这是为何点播都走HTTP的原因。
3. Cache麻烦
技术一定要知道弱点,RTMP有个弱点就是累积误差,原因是RTMP基于TCP不会丢包。所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;待网络状况好了,就一起发给客户端。这个的对策就是,当客户端的缓冲区很大,就断开重连。
HLS
优势
- 客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可.
- 使用 HTTP 协议网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器, CDN 支持良好.
- Apple 的全系列产品支持, 由于 HLS 是苹果提出的, 所以在 Apple 的全系列产品包括 iphone, ipad, safari 都不需要安装任何插件就可以原生支持播放 HLS, 现在, Android 也加入了对 HLS 的支持.
- 自多码率自适应, Apple 在提出 HLS 时, 就已经考虑了码流自适应的问题.
劣势
- 相比 RTMP 这类长连接协议, 延时较高, 难以用到互动直播场景.
- 对于点播服务来说, 由于 TS 切片通常较小, 海量碎片在文件分发, 一致性缓存, 存储等方面都有较大挑战.
HttpFlv
优势
1. 性能很高:
HTTP的性能没得说,协议简单,各种HTTP高性能服务器也完善。如果分发的量特别大,譬如点播视频网站,没有直播的实时性要求,HTTP协议是最好选择。
2. 没有碎片:
HTTP比HLS没有碎片,HTTP分发大文件会比小文件分发方便很多。特别是存储,小文件的性能超低,是个硬伤。
3. 穿墙:
互联网不可能不开放HTTP协议,否则就不叫互联网。所以任何端口封掉,也不会导致HTTP流看不了。(不过RTMP也能穿墙,用RTMPT协议)。
劣势
1. 实时性差
基本上没有实时性这个说法。
2. 原生支持不好
就PC上flash对于HTTP流支持还可以,Android/IOS上似乎只能mp4,总之移动端对于HTTP的支持不是很完善。
WS
优势
1. 延迟低:
延迟在100ms左右,用户感受无延迟
2. 适配多平台
主流浏览器都支持此协议,兼容安卓、Ios、windows、mac多平台
3. 省时省力
一套代码支持多平台
4. 高并发
WS协议相对于其他协议来讲,并发量会高很多,占用服务端资源少
5. 可监控
WS协议本质也是TCP协议,三次握手的情况下,开发人员很容易对此进行监控
劣势
1. 编码兼容率不好
2. 需要用户端对传输的数据进行解析,转化为应用级的数据
网友评论