1、HTTP 和 HLS
HTTP 视频协议是在互联网普及之后在互联网上看视频的需求下形成的。最初的 HTTP 视频协议,没有任何特别之处,就是通用的 HTTP 文件渐进式下载,但是在这种情况下,视频无法快进或者跳转到文件尚未被下载到的部分,这就对 HTTP 协议提出了范围请求(Range Request)的要求,目前几乎所有 HTTP 服务器都支持范围请求。所谓范围请求指的是请求文件的部分数据,这可以在 HTTP 请求头中通过 Range 字段设置偏移量来实现。
这种方式应用于视频点播还可以,用于直播的话实时性较差,延迟也很高,于是,苹果公司又在 HTTP 协议的基础上推出了 HTTP Live Streaming(简称 HLS)这个流媒体传输协议,主要用于在 iOS 系统中实现流媒体的直播和点播。
相对于常见的流媒体直播协议,HLS 直播最大的不同在于,直播客户端获取到的并不是一个完整的数据流,HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断下载并播放这些小文件。因为服务器总是会将最新的直播数据生成新的小文件,这样客户端只要不停地按顺序播放从服务器获取到的文件,就实现了直播。
由此可见,HLS 是以点播的技术实现直播。由于数据通过 HTTP 协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS 的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
2、RTP 与 RTCP
RTP(Real-time Transport Protocol,实时传输协议)是互联网上针对多媒体数据流的一种实时传输协议。RTP 由紧密连接的两个部分组成:
RTP 协议详细说明了在互联网上传输音频和视频的标准数据包格式,常用于流媒体系统(配合 RTSP 协议,下面会介绍这个协议)、视频会议和视频电话系统(配合 H.263 或 SIP)。
RTP 协议是建立在 UDP 协议之上的,因此本身并没有提供按时发送机制或其他服务质量(QoS)保证,它依赖于底层服务去实现这一过程。RTCP 协议则是 RTP 协议的一个姐妹协议,它会定期在流媒体会话参加者之间传输控制数据,用来为 RTP 所提供的服务质量提供反馈。RTCP 协议会收集相关媒体连接的统计信息,如传输字节数、传输分组数、丢失分组数、时延抖动、单向和双向网络延迟等等,网络应用程序可以利用 RTCP 所提供的信息提高服务质量,比如限制信息流量或改用压缩比较小的编解码器。RTCP 协议本身不提供数据加密或身份认证,其伴生协议 SRTCP(安全的实时传输控制协议)则可用于此类用途。
3、RTSP
RTSP(Real Time Streaming Protocol,实时流协议)协议是最早的视频传输协议,定义了一对多应用程序如何有效通过 IP 网络传输多媒体数据。RTSP 在体系结构上位于 RTP 和 RTCP 之上,是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。RTSP 可基于 RTP 来传送数据,还可以选择 TCP、UDP、组播 UDP 等通道来发送数据,具有很好的扩展性。
RTSP 协议的优势在于可以控制到视频帧,因此可以承载实时性很高的应用,这个优点也是相对于 HTTP 传输方式的最大优点。不过 iOS 系统不支持该协议,Andriod 系统原生支持。
4、RSVP
RSVP 即资源预订协议,使用 RSVP 预留一部分网络资源(即带宽),能在一定程度上为流媒体的传输提供QoS。RSVP、RTSP 与 RTP 协议工作在不同的层次,如下图所示:
5、RTMP
RTMP(Real Time Messaging Protocol,实时消息传输协议)是 Adobe 公司为 Flash 播放器和服务器之间音频、视频和数据传输开发的流媒体协议。它有以下三种变种:
RTMP 协议采用实时的流式传输,所以不会缓存文件到客户端,因此用户想下载 RTMP 协议下的视频是比较难的,该协议下的视频流可以随便拖动,可以从任意时间点向服务器发送请求进行播放,并不需要视频有关键帧。相比之下,HTTP 协议下视频需要有关键帧才可以拖动。RTMP 协议可以支持点播、回放和直播。
因为该协议是 Adobe 公司开发的,所以最初服务器端架设的环境是 FMS(Flash Media
Server),该软件为收费软件,价格昂贵。后来,开源软件 red5 的推出使支持 RTMP 协议的服务器架设成本大大缩小,但是在性能方面不如 FMS 稳定。
6、MMS
MMS(Microsoft Media Server Protocol,微软媒体服务协议)是用来访问并流式接收 Windows 媒体服务器中 .asf
文件的一种协议。MMS 协议用于访问 Windows Media 发布点上的单播内容,是连接Windows Media 单播服务的默认方法。如果用户在 Windows Media Player 中键入一个 URL 以连接内容,而不是通过超链接,则必须使用 MMS 协议引用该流。
小结
综上,在 iOS 中我们可以基于 HLS 实现流媒体传输,在非 iOS 系统可以基于 RTSP 实现流媒体传输,RTMP 则适用于所有系统,而且时延小,尤其适用于直播实现,是目前比较主流的直播流媒体协议,视频点播的主流协议则是 HTTP,对于时延要求不高的直播系统,也可以使用 HTTP 协议,毕竟服务器不需要做任何额外配置即可支持,简单,成本低,使用其它的协议都需要做额外的配置和处理,而且某些软件可能还要收费。
下篇分享,学院君将基于 RTMP 协议介绍视频直播的实现细节。