您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > RTSP协议学习笔记
第一部分:总体概述一、流媒体概念流媒体包含广义和狭义两种内涵:广义上的流媒体指的是使音频和视频形成稳定和连续的传输流和回放流的一系列技术、方法和协议的总称,即流媒体技术;狭义上的流媒体是相对于传统的下载-回放方式而言的,指的是一种从Internet上获取音频和视频等多媒体数据的新方法,它能够支持多媒体数据流的实时传输和实时播放。通过运用流媒体技术,服务器能够向客户机发送稳定和连续的多媒体数据流,客户机在接收数据的同时以一个稳定的速率回放,而不用等数据全部下载完之后再进行回放。二、流媒体协议实时传输协议(Real-timeTransportProtocol,RTP)是在Internet上处理多媒体数据流的一种网络协议,利用它能够在一对一(unicast,单播)或者一对多(multicast,多播)的网络环境中实现传流媒体数据的实时传输。RTP通常使用UDP来进行多媒体数据的传输,但如果需要的话可以使用TCP或者ATM等其它协议,整个RTP协议由两个密切相关的部分组成:RTP数据协议和RTP控制协议。实时流协议(RealTimeStreamingProtocol,RTSP)最早由RealNetworks和Netscape公司共同提出,它位于RTP和RTCP之上,其目的是希望通过IP网络有效地传输多媒体数据。实时流传输协议RTSP(Real-timeStreamingProtocol,RFC2326)、实时传输协议(RTPReal-timeTransferProtocol,RFC3550)、实时传输控制协议(RTCPReal-timeTransportControlProtocol,RFC1889)、会话描述协议(SDPSessionDescriptionProtocol,RFC2327)。目前在流媒体传输技术中使用最多的就是基于RTSP/RTP的流媒体传输。RTSP对应ISO网络七层参考模型的应用层,和HTTP有点类似,也是一种文本协议,主要是实现对流的控制。有关RTSP/RTP以及RTCP之间的关系可以参考下图:通过上图可以看出三者之间的关系,RTSP协议基于TCP完成RTSP请求报文和响应报文的传输,RTP协议基于UDP协议完成流媒体数据的实时传输,RTCP协议基于UDP协议提供客户端和服务器有关当前网络拥塞和以及实时流传输质量等信息。在智能网络相机上也需要实现基于RTSP/RTP的H.264实时流的传输。RTCP暂时还未实现,这在流媒体技术中是比较高级的应用。第二部分:RTP协议RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。RTP数据报的头部格式如图1所示:图1RTP头部格式其中比较重要的几个域及其意义如下:1、Version(V):RFC1889Version(2)2、Padding填充标志(P):False3、Extension扩展标志(X):False4、CSRC(Contributingsourceidentifierscount)记数(CC):表示CSRC标识的数目。CSRC标识紧跟在RTP固定头部之后,用来表示RTP数据报的来源,RTP协议允许在同一个会话中存在多个数据源,它们可以通过RTP混合器合并为一个数据源。例如,可以产生一个CSRC列表来表示一个电话会议,该会议通过一个RTP混合器将所有讲话者的语音数据组合为一个RTP数据源。5、M:标志位。标志位的具体解释可由具体协议规定。如可用于帧边界标志。6、负载类型(Payloadtype)(PT):标明RTP负载的格式,包括所采用的编码算法、采样频率、承载通道等。例如,类型2表明该RTP数据包中承载的是用ITUG.721算法编码的语音数据,采样频率为8000Hz,并且采用单声道。对于H.264来说,该值为105。7、序列号(sequencenumber):用来为接收方提供探测数据丢失的方法,但如何处理丢失的数据则是应用程序自己的事情,RTP协议本身并不负责数据的重传。序列号用于对RTP包进行计数。每发送一个RTP包,序列号加1。序列号的初始值可以置为零,也可用随机数开始。为了更加安全,应从一个随机初始化值开始。8、时间戳(Timestamp):记录了负载中第一个字节的采样时间,时间戳的增量为采样频率/帧率。接收方根据时间戳能够确定数据的到达是否受到了延迟抖动的影响,但具体如何来补偿延迟抖动则是应用程序自己的事情。按RFC3984规定,采用90000HZ的时钟,所以如果帧率为15,则时间戳增量为6000。RTP规定一次会话的初始时间戳必须随机选择,但协议没有规定时间戳的单位。由上图可知,如果只有系列号,并不能完整按照顺序的将data播放出来,因为如果data中间有一段是没有资料的,只有系列号的话会造成错误,需搭配上让它知道在哪个时间将data正确播放出来,如此我们才能播放出正确无误的信息。9、SSRC:同步源识别符。若只使用下个同步源,则SSRC应该一样。10、CSRC:可无。从RTP数据报的格式不难看出,它包含了传输媒体的类型、格式、序列号、时间戳以及是否有附加数据等信息,这些都为实时的流媒体传输提供了相应的基础。RTP本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。RTP协议的目的是提供实时数据(如交互式的音频和视频)的端到端传输服务,因此在RTP中没有连接的概念,它可以建立在底层的面向连接或面向非连接的传输协议之上;RTP也不依赖于特别的网络地址格式,而仅仅只需要底层传输协议支持组帧(Framing)和分段(Segmentation)就足够了;另外RTP本身还不提供任何可靠性机制,这些都要由传输协议或者应用程序自己来保证。在典型的应用场合下,RTP一般是在传输协议之上作为应用程序的一部分加以实现的,如图2所示:RTP是目前解决流媒体实时传输问题的最好办法,要在Linux平台上进行实时传送编程,可以考虑使用一些开放源代码的RTP库,如LIBRTP、JRTPLIB等。JRTPLIB是一个面向对象的RTP库,它完全遵循RFC1889设计,在很多场合下是一个非常不错的选择。JRTPLIB是一个用C++语言实现的RTP库,这个库使用socket机制实现网络通讯因此可以运行在Windows、Linux、FreeBSD、Solaris、Unix和VxWorks等多种操作系统上。第三部分:RTCP协议RTCP控制协议需要与RTP数据协议一起配合使用,当应用程序启动一个RTP会话时将同时占用两个端口,分别供RTP和RTCP使用。RTP本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完成。RTCP的一个关键作用就是能让接收方同步多个RTP流,比如音频和视频流。通常RTCP会采用与RTP相同的分发机制,向会话中的所有成员周期性地发送控制信息,应用程序通过接收这些数据,从中获取会话参与者的相关资料,以及网络状况、分组丢失概率等反馈信息,从而能够对服务质量进行控制或者对网络状况进行诊断。RTCP协议的功能是通过不同的RTCP数据报来实现的,主要有如下几种类型:SR发送端报告,所谓发送端是指发出RTP数据报的应用程序或者终端,发送端同时也可以是接收端。RR接收端报告,所谓接收端是指仅接收但不发送RTP数据报的应用程序或者终端。SDES源描述,主要功能是作为会话成员有关标识信息的载体,如用户名、邮件地址、电话号码等,此外还具有向会话成员传达会话控制信息的功能。BYE通知离开,主要功能是指示某一个或者几个源不再有效,即通知会话中的其他成员自己将退出会话。APP由应用程序自己定义,解决了RTCP的扩展性问题,并且为协议的实现者提供了很大的灵活性。RTCP数据报携带有服务质量监控的必要信息,能够对服务质量进行动态的调整,并能够对网络拥塞进行有效的控制。由于RTCP数据报采用的是多播方式,因此会话中的所有成员都可以通过RTCP数据报返回的控制信息,来了解其他参与者的当前情况。在一个典型的应用场合下,发送媒体流的应用程序将周期性地产生发送端报告SR,该RTCP数据报含有不同媒体流间的同步信息,以及已经发送的数据报和字节的计数,接收端根据这些信息可以估计出实际的数据传输速率。另一方面,接收端会向所有已知的发送端发送接收端报告RR,该RTCP数据报含有已接收数据报的最大序列号、丢失的数据报数目、延时抖动和时间戳等重要信息,发送端应用根据这些信息可以估计出往返时延,并且可以根据数据报丢失概率和时延抖动情况动态调整发送速率,以改善网络拥塞状况,或者根据网络状况平滑地调整应用程序的服务质量。第四部分:SRTP和SRTCP协议RTSP安全实时传输协议(SecureReal-timeTransportProtocol或SRTP)是在实时传输协议(Real-timeTransportProtocol或RTP)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。它是由DavidOran(思科)和RolfBlom(爱立信)开发的,并最早由IETF于2004年3月作为RFC3711发布。由于实时传输协议和可以被用来控制实时传输协议的会话的实时传输控制协议(RTPControlProtocol或RTCP)有着紧密的联系,安全实时传输协议同样也有一个伴生协议,它被称为安全实时传输控制协议(SecureRTCP或SRTCP);安全实时传输控制协议为实时传输控制协议提供类似的与安全有关的特性,就像安全实时传输协议为实时传输协议提供的那些一样。在使用实时传输协议或实时传输控制协议时,使不使用安全实时传输协议或安全实时传输控制协议是可选的;但即使使用了安全实时传输协议或安全实时传输控制协议,所有它们提供的特性(如加密和认证)也都是可选的,这些特性可以被独立地使用或禁用。唯一的例外是在使用安全实时传输控制协议时,必须要用到其消息认证特性。第五部分:RTSP协议一、RTSP协议概述RTSP(Real-TimeStreamProtocol)作为一个应用层协议,提供了一个可供扩展的框架,它的意义在于使得实时流媒体数据的受控和点播变得可能。总的说来,RTSP是一个流媒体表示协议,主要用来控制具有实时特性的数据发送,但它本身并不传输数据,而是必须依赖于下层传输协议所提供的某些服务。RTSP可以对流媒体提供诸如播放、暂停、快进等操作,它负责定义具体的控制消息、操作方法、状态码等,此外还描述了与RTP间的交互操作。RTSP和RTP的关系RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话二、RTSP协议与HTTP协议区别RTSP在制定时较多地参考了HTTP/1.1协议,甚至许多描述与HTTP/1.1完全相同。RTSP之所以特意使用与HTTP/1.1类似的语法和操作,在很大程度上是为了兼容现有的Web基础结构,正因如此,HTTP/1.1的扩展机制大都可以直接引入到RTSP中。1.RTSP引入了几种
本文标题:RTSP协议学习笔记
链接地址:https://www.777doc.com/doc-2856229 .html