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