什么是流?
流(Streaming):近年在Internet上出现的新概念,定义非常广泛,主要是指通过网络传输多媒体数据的技术总称。
流式传输分为两种:顺序流式传输 (Progressive Streaming)和实时流式传输 (Real time Streaming)。
实时流式传输是实时传送,特别适合现场事件。“实时”(real time)是指在一个应用中数据的交付必须与数据的产生保持精确的时间关系,这需要相应的协议支持,就产生了流媒体协议。
什么是流协议?
流协议:在两个通信系统之间传输多媒体文件的一套规则,它定义了视频文件将如何分解为小数据包以及它们在互联网上传输的顺序,RTMP ,RTSP HLS及是比较常见的流媒体协议,具体对比如下:
什么是RTSP?
RTSP(Real Time Streaming Protocol):实时流传输协议,是 TCP/IP 协议体系中种基于文本的应用层协议,设计用于娱乐、会议系统中控制流媒体服务器。RTSP用于在希望通讯的两端建立并控制媒体会话,客户端通过发出VCR-style命令如play、record和pause等来实时控制媒体流,因此 RTSP 又称为“因特网录像机遥控协议”。
RTSP由哥伦比亚大学, 网景和RealNetworks公司提交的IETF RFC标准.该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
RTSP在体系结构上位于RTP和RTCP之上, 它使用TCP或RTP完成数据传输RTSP控制信息和媒体数据流可以交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据传送可通过RTP/RTCP等协议来完成。该协议用于C/S模型, 用于在客户端和服务器端建立和协商实时流会话.
RTSP体系结构
RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输如下图所示。
图1 RTSP体系
RTSP、RTP、RTCP三协议协作关系
RTSP协议:负责服务器与客户端之间的请求与响应
RTP协议:负责传输媒体数据
RTCP协议:在RTP传输过程中提供传输信息,如图所示:
图2 RTSP、RTP、RTCP协作关系
什么是RTP协议?
rtp协议:负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。
RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个基数UDP端口号。RTP默认端口号5004,所以RTCP端口号默认为5005。
图1中RTP被划分在传输层,它建立在UDP上。同UDP协议一样,为了实现其实时传输功能,RTP也有固定的封装形式。RTP用来为端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。
RTP协议封装
填充位P 需要1bit:,若p=1则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。填充可能用于某些具有固定长度的加密算法或者用在底层数据单元中传输多个RTP包扩展。
(X)需要1bit:置“1”表示RTP报头后紧随一个扩展报头参与源数(CSRC计数(CC) )4位,CSRC计数包括紧接在固定头后CSRC标识符个数。
标记(M)需要1个bit:其具体解释由应用文档来定义。例如,对于视频流,它表示一帧的结束,而对于音频,则表示一次谈话的开始。
有效载荷类型 需要7bit:它指示在用户数据字段中承载数据的载荷类别,记录后面资料使用哪种编码,接收端找出相应的 decoder 解码出来。
序列号 需要16bit: 每发送一个RTP数据包,序列号加一,接收机可以据此检测包损和重建包序列。序列号的初始值是随机的(不可预测),以使即便在源本身不加密时(有时包要通过翻译器,它会这样做) ,对加密算法泛知的普通文本攻击也会更加困难。
时间戳 需要32bit:时标反映RTP数据包中第一个八进制数的采样时刻,采样时刻必须从单调、线性增加的时钟导出,以允许同步与抖动计算。时标可以让receiver端知道在正确的时间将资料播放出来。只有系列号而没有时标,并不能完整按照顺序的将data播放出来,因为如果data中间有一段是没有资料的,只有系列号的话会造成错误。
SSRC 需要32bit:SSRC段标识同步源。此标识不是随机选择的,目的在于使同一RTP包连接中没有两个同步源有相同的SSRC标识。尽管多个源选择同一个标识的概率很低,所有RTP实现都必须探测并解决冲突。
CSRC列表 0到15项,每项32bit:CSRC列表表示包内的对载荷起作用的源。标识数量由CC段给出。如超出15个作用源,也仅标识15个。