美文网首页
直播协议的学习总结

直播协议的学习总结

作者: billzheng | 来源:发表于2019-08-05 17:49 被阅读0次
    • 直播应用中,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卡。

    image.png
    • 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

    相关文章

      网友评论

          本文标题:直播协议的学习总结

          本文链接:https://www.haomeiwen.com/subject/hqmmdctx.html