流媒体协议

流媒体

所谓流媒体是指采用流式传输的方式在 Internet 播放的媒体格式。流媒体又叫流式媒体,它是指商家用一个视频传送服务器把节目当成数据包发出,传送到网络上。用户通过解压设备对这些数据进行解压后,节目就会像发送前那样显示出来。

流媒体以流的方式在网络中传输音频、视频和多媒体文件的形式。流媒体文件格式是支持采用流式传输及播放的媒体格式。流式传输方式是将视频和音频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向用户计算机连续、实时传送。在采用流式传输方式的系统中,用户不必像非流式播放那样等到整个文件。全部下载完毕后才能看到当中的内容,而是只需要经过几秒钟或几十秒的启动延时即可在用户计算机上利用相应的播放器对压缩的视频或音频等流式媒体文件进行播放,剩余的部分将继续进行下载,直至播放完毕。

常用的流媒体协议包括了 HLS, RTMP 与 HTTP-FLV 这三种,其对比如下:

协议 优势 缺陷 延迟性
HLS 支持性广 延时巨高 10s 以上
RTMP 延时性好,灵活 量大的话,负载较高 1s 以上
HTTP-FLV 延时性好,游戏直播常用 只能在手机 APP 播放 2s 以上

视频直播协议

直播内容传输的介质是网络,而网络中传播视频或者音频时需要使用对应的协议,目前适合直播场景的常用协议有如下几种。

  • RTMP 协议 (HTML 5 不支持,Flash 支持):RTMP 是一种流媒体协议,是 Adobe 的专利协议。基于 TCP,在国内的使用流行度很高。流行原因:开源软件和开源库的支持稳定完整,最常用的推流和拉流的解决方案基本上能够很稳定的运行。如:开源的 librtmp 推流库,服务端有 nginx-rtmp 插件,拉流有 ijkPlayer 播放库。

  • HTTP-FLV 协议 (HTML 5 不支持,Flash 支持):即使用 HTTP 协议流式的传输媒体内容。相对于 RTMP,HTTP 更简单和广为人知。内容延迟同样可以做到 2~5 秒,打开速度更快,因为 HTTP 本身没有复杂的状态交互。所以从延迟角度来看,HTTP-FLV 要优于 RTMP。

  • HLS 协议 (HTML 支持,Flash 支持):即 Http Live Streaming,是由苹果提出基于 HTTP 的流媒体传输协议。HLS 有一个非常大的优点:HTML5 可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发分享,不需要安装任何独立的 APP,有浏览器即可,所以流行度很高。社交直播 APP,HLS 可以说是刚需 。基于 HLS 的直播流 URL 是一个 m3u8 的文件,里面包含了最近若干个小视频 TS(一种视频封装格式,这里就不扩展介绍)文件。这种播放形式的延时比较高(与 TS 文件的大小有关系),同城网络下能够做到 5~7 秒的延时。

  • RTP/RTCP 协议:即 Real-time Transport Protocol,用于 Internet 上针对多媒体数据流的一种传输层协议。RTCP 传输交互控制的信令,RTP 传输实际的媒体数据。RTP 在视频监控、视频会议、IP 电话上有广泛的应用,因为视频会议、IP 电话的一个重要的使用体验:内容实时性强。

对比上述 3 种协议,RTP 和它们有一个重要的区别就是默认是使用 UDP 协议来传输数据,而 RTMP 和 HTTP 是基于 TCP 协议传输。

使用场景分析:实时音视频流的场景不需要可靠保障,因此也不需要有重传的机制,实时的看到图像声音,网络抖动时丢了一些内容,画面模糊和花屏,完全不重要。TCP 为了重传会造成延迟与不同步,如某一截内容因为重传,导致 1 秒以后才到,那么整个对话就延迟了 1 秒,随着网络抖动,延迟还会增加成 2 秒、3 秒,如果客户端播放是不加以处理将严重影响直播的体验。如何进行优化,会在后面的文章中进行讲解。

总结:在直播协议的选择中,如果选择是 RTMP 或 HTTP-FLV 则意味着有 2~5 秒的内容延迟,但是就打开延迟来说,HTTP-FLV 要优于 RTMP。HLS 则有 5~7 秒的内容延迟。选择 RTP 进行直播则可以做到 1 秒内的直播延迟。但就目前所了解,各大 CDN 厂商没有支持基于 RTP 直播的,所以目前国内主流还是 RTMP 或 HTTP-FLV。