- 直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看,HLS主要是延时比较大,RTMP主要优势在于延时低。
一.RTMP的特点
RTMP (Real Time Messaging Protocol,实时消息传送协议)
RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议
这个协议建立在TCP协议或者轮询HTTP协议之上。
RTMP本质上是流协议
优势
1.Adobe支持得很好:
RTMP实际上是现在编码器输出的工业标准协议,基本上所有的编码器(摄像头之类)都支持RTMP输出。原因在于PC市场巨大,PC主要是Windows,Windows的浏览器基本上都支持flash,Flash又支持RTMP支持得非常好。
2.稳定性高,适合长时间播放:
因为RTMP支持的很完善,所以能做到flash播放RTMP流长时间不断流, 当时测试是100万秒,即10天多可以连续播放。
若做CDN或者大中型集群分发,选择稳定性高的协议一定是必要的。
3.延迟较低:
比起YY的那种UDP私有协议,RTMP算延迟大的(延迟在1-3秒),比起HTTP流的延时(一般在10秒以上)RTMP算低延时。一般的直播应用,只要不是电话类对话的那种要求,RTMP延迟是可以接受的。在一般的视频会议应用中,RTMP延时也能接受,原因是别人在说话的时候我们一般在听,实际上1秒延时没有关系,我们也要思考(话说有些人的CPU处理速度还没有这么快)。
4.有累积延迟:
技术一定要知道弱点,RTMP有个弱点就是累积误差,原因是RTMP基于TCP不会丢包。所以当网络状态差时,服务器会将包缓存起来,导致累积的延迟;待网络状况好了,就一起发给客户端。这个的对策就是,当客户端的缓冲区很大,就断开重连。
5.编码器接入
编码器输出到互联网(还可以输出为UDP主播之类的应用),主要是RTMP。
譬如专业编码器,或者flash网页编码器,或者FMLE,或者ffmpeg,或者安防摄像头,都支持RTMP输出。
若需要接入多种设备,譬如提供云服务;或者希望网页直接采集摄像头;或者能在不同编码器之间切换,那么RTMP作为服务器的输入协议会是最好的选择。
6.系统容错
容错有很多种级别,RTMP的集群实现时可以指定N上层,在错误时切换不会影响到下层或者客户端,另外RTMP的流没有标识,切到其他的服务器的流也可以继续播放。 HLS 的流热备切换没有这么容易。
若对于直播的容错要求高,譬如降低出问题的概率,选择RTMP会是很好的选择。
7.可监控
在监控系统或者运维系统的角度看,流协议应该比较合适监控。
HTTP的流监控感觉没有那么完善。这个不算绝对优势,但比较有利。
8.支持加密
RTMPE和RTMPS为加密协议。虽然HLS也有加密,但在PC平台上flash对RTMPE/RTMPS支持应该比较不错劣势
1.协议复杂
RTMP协议比起HTTP复杂很多,导致性能低下。
测试发现两台服务器直连100Gbps网络中,HTTP能跑到60Gbps,但是RTMP只能跑到10Gbps,CPU占用率RTMP要高很多。
复杂协议导致在研发,扩展,维护软件系统时都没有HTTP那么方便,所以HTTP服务器现在大行其道,apache/nginx/tomcat,N多HTTP服务器;而RTMP协议虽然早就公开,但是真正在大规模中分发表现良好的没有,adobe自己的FMS在CDN中都经常出问题。
2.Cache麻烦
流协议做缓存不方便。譬如点播,若做RTMP流协议,边缘缓存RTMP会很麻烦。
如果是HTTP,缓存其实也很麻烦,但是HTTP服务器的缓存已经做了很久,所以只需要使用就好。这是为何点播都走HTTP的原因。- 经过测量发现,在网络状况良好时:
- RTMP延时可以做到0.8秒左右。
- 多级边缘节点不会影响延迟(和SRS同源的某CDN的边缘服务器可以做到)
- Nginx-Rtmp延迟有点大,估计是缓存的处理,多进程通信导致?
- GOP是个硬指标,不过SRS可以关闭GOP的cache来避免这个影响.
- 服务器性能太低,也会导致延迟变大,服务器来不及发送数据。
- 客户端的缓冲区长度也影响延迟。
譬如flash客户端的NetStream.bufferTime设置为10秒,那么延迟至少10秒以上。
二.HTTP的特点
Real Time Messaging Protocol(简称 RTMP)
是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。
和 HLS 一样都可以应用于视频直播,但是实时性比 HLS 要好。
一般使用这种协议来上传视频流,也就是视频流推送到服务器。
HTTP说的是HTTP流,譬如各大视频网站的点播流,
HTTP本质上还是文件分发。
-
优势
1.性能很高
HTTP的性能没得说,协议简单,各种HTTP高性能服务器也完善。
如果分发的量特别大,譬如点播视频网站,没有直播的实时性要求,HTTP协议是最好选择。
2.没有碎片
HTTP比HLS没有碎片,HTTP分发大文件会比小文件分发方便很多。
特别是存储,小文件的性能超低,是个硬伤。
3.穿墙
互联网不可能不开放HTTP协议,否则就不叫互联网。所以任何端口封掉,也不会导致HTTP流看不了。(不过RTMP也能穿墙,用RTMPT协议)。 -
劣势
1.实时性差
基本上没有实时性这个说法。
2.原生支持不好
就PC上flash对于HTTP流支持还可以,Android/IOS上似乎只能mp4,总之移动端对于HTTP的支持不是很完善。
三.HLS的特点
HLS (HTTP Live Streaming) 是Apple的动态码率自适应技术。
主要用于PC和Apple终端的音视频服务。
包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
#EXTM3U m3u文件头
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号
#EXT-X-TARGETDURATION 每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE 是否允许cache
#EXT-X-ENDLIST m3u8文件结束符
#EXTINF 指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效
mystream-12.ts
-
优势
1.性能高
和HTTP一样
2. 穿墙
和HTTP一样。
3.原生支持很好
IOS上支持完美。Android上支持差些。PC/flash上现在也有各种as插件支持HLS。 -
劣势
1.实时性差
基本上HLS的延迟在10秒以上。
2.文件碎片
若分发HLS,码流低,切片较小时,小文件分发不是很友好。
特别是一些对存储比较敏感的情况,譬如源站的存储,嵌入式的SD卡。
- Httpflv 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。实质上也是HTTP模式,它形成的文件极小、加载速度极快。
四.协议分发方式的比较
互联网上的两种主要的分发方式:HLS和RTMP,
什么时候用谁,完全决定于应用场景。
还有其他的分发方式,这些分发方式不属于互联网常见和通用的方式,不予以比较:
1. UDP
譬如YY的实时应用,视频会议等等,或者RTSP之类。这类应用的特点就是实时性要求特别高,以毫秒计算。
TCP家族协议根本就满足不了要求,所以HTTP/TCP都不靠谱。这类应用没有通用的方案,必须自己实现分发(服务端)和播放(客户端)。
2. P2P
譬如RTMFP或者各家自己的协议。这类应用的特点是节省带宽。
目前PC/flash上的RTMFP比较成熟,Android上的P2P属于起步群雄纷争标准不一,IOS上P2P应该没有听说过。
3. RTSP
这种不是互联网上的主要应用,在其他领域譬如安防等有广泛应用。
另外,HTTP的也分为几种:
1. HTTP progressive
早期流媒体服务器分发http文件时,以普通的http文件分发,这种叫做渐进式下载,意思就是如果文件很大譬如1小时时长1GB大小,想从中间开始播放是不行的。但这种方式已经是作古了,很多http服务器支持http文件的seek,就是从中间开始播放。
2. HTTP stream
支持seek的HTTP流,譬如各家视频网站的点播分发方式。或者稍微复杂点的,譬如把一个大文件切几段之后分发。目前在pc/flash上点播国内的主流分发是这种方式。
3. HLS
这种是现在适配方式最广(除了flash, 需要额外的as库支持),在PC上有vlc,Android/IOS原生播放器就支持播放HLS,HTML5里面的url可以写HLS地址。总之,在移动端是以HLS为主。
4. HDS
adobe自己的HLS,和不好用。
5. DASH
各家提出的HLS,目前还没有广泛应用。
对比以下互联网上用的流媒体分发方式:
- HLS:apple的HLS,支持点播和直播。
- HTTP:即HTTP stream,各家自己定义的http流,应用于国内点播视频网站。
- RTMP:直播应用,对实时性有一定要求,以PC为主。
五.协议的应用方式
- 推荐的方式是:
- 编码器输出RTMP协议。
- 流媒体系统接入使用RTMP协议。
- 流媒体系统内部直播分发使用RTMP。
- PC+直播+实时性要求高:使用flash播放RTMP。
- PC+直播+没有实时性要求:使用RTMP或者HLS均可。
- PC+点播:使用HTTP或者HLS。
- Apple IOS/OSX:都使用HLS(实时性要求高得自己解析RTMP,或者使用外部库,
譬如https://www.vitamio.org) - Andorid:和IOS一样,不过可以确定的是可以自己开发支持RTMP。
六.RTSP、 RTMP、HTTP的共同点及区别
-
共同点
1. RTSP RTMP HTTP都是在应用应用层。
2.理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 -
区别
1. HTTP: 即超文本传送协议(ftp即文件传输协议)。
HTTP:(Real Time Streaming Protocol),实时流传输协议。
HTTP全称Routing Table Maintenance Protocol(路由选择表维护协议)。
2.HTTP将所有的数据作为文件做处理。http协议不是流媒体协议。
RTMP和RTSP协议是流媒体协议。
3. RTMP协议是Adobe的私有协议,未完全公开,RTSP协议和HTTP协议是共有协议,并有专门机构做维护。
4. RTMP协议一般传输的是flv,f4v格式流,RTSP协议一般传输的是ts,mp4格式的流。HTTP没有特定的流。
5. RTSP传输一般需要2-3个通道,命令和数据通道分离,HTTP和RTMP一般在TCP一个通道上传输命令和数据。
文章部分摘自:
https://www.cnblogs.com/my_life/articles/5593892.html