[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-01-22 标题【转】流媒体协议介绍rtp/rtcp/rtsp/rtmp/mms/hls分类编程RTP/RTCP/RTSP/RTMP/MMS/HLS 简单笔记RTPRTCPSRTP SRTCPRTSPRTSP和RTP的关系SDPRTMP/RTMPSmmsHLS本文转自【 http://blog.csdn.net/tttyd/article/details/12032357 】有删改。RTP参考文档 RFC3550/RFC3551(Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。RTP协议常用于流媒体系统配合RTCP协议视频会议和一键通Push to Talk系统配合H.323或SIP使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用而且它是建立在UDP协议上的。RTP 本身并没有提供按时发送机制或其它服务质量QoS保证它依赖于低层服务去实现这一过程。 RTP 并不保证传送或防止无序传送也不确定底层网络的可靠性。 RTP 实行有序传送 RTP 中的序列号允许接收方重组发送方的包序列同时序列号也能用于决定适当的包位置例如在视频解码中就不需要顺序解码。RTP 由两个紧密链接部分组成 RTP ― 传送具有实时属性的数据RTP 控制协议RTCP ― 监控服务质量并传送正在进行的会话参与者的相关信息。RTCP实时传输控制协议Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP是实时传输协议RTP的一个姐妹协议。RTCP为RTP媒体流提供信道外out-of-band控制。RTCP本身并不传输数据但和RTP一起协作将多媒体数据打包和发送。RTCP定期在流多媒体会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量Quality of Service提供反馈。RTCP收集相关媒体连接的统计信息例如传输字节数传输分组数丢失分组数jitter单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息试图提高服务质量比如限制信息流量或改用压缩比较小的编解码器。RTCP本身不提供数据加密或身份认证。SRTCP可以用于此类用途。SRTP SRTCP参考文档 RFC3711安全实时传输协议Secure Real-time Transport Protocol或SRTP是在实时传输协议Real-time Transport Protocol或RTP基础上所定义的一个协议旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。它是由David Oran思科和Rolf Blom爱立信开发的并最早由IETF于2004年3月作为RFC3711发布。由于实时传输协议和可以被用来控制实时传输协议的会话的实时传输控制协议RTP Control Protocol或RTCP有着紧密的联系安全实时传输协议同样也有一个伴生协议它被称为安全实时传输控制协议Secure RTCP或SRTCP安全实时传输控制协议为实时传输控制协议提供类似的与安全有关的特性就像安全实时传输协议为实时传输协议提供的那些一样。在使用实时传输协议或实时传输控制协议时使不使用安全实时传输协议或安全实时传输控制协议是可选的但即使使用了安全实时传输协议或安全实时传输控制协议所有它们提供的特性如加密和认证也都是可选的这些特性可以被独立地使用或禁用。唯一的例外是在使用安全实时传输控制协议时必须要用到其消息认证特性。RTSP参考文档 RFC2326是由Real Networks和Netscape共同提出的。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP提供了一个可扩展框架使实时数据如音频与视频的受控、点播成为可能。数据源包括现场数据与存储在剪辑中的数据。该协议目的在于控制多个数据发送连接为选择发送通道如UDP、多播UDP与TCP提供途径并为选择基于RTP上发送机制提供方法。RTSPReal Time Streaming Protocol是用来控制声音或影像的多媒体串流协议并允许同时多个串流需求控制传输时所用的网络通讯协定并不在其定义的范围内服务器端可以自行选择使用TCP或UDP来传送串流内容它的语法和运作跟HTTP 1.1类似但并不特别强调时间同步所以比较能容忍网络延迟。而前面提到的允许同时多个串流需求控制Multicast除了可以降低服务器端的网络用量更进而支持多方视讯会议Video Conference。 因为与HTTP1.1的运作方式相似所以代理服务器《Proxy》的快取功能《Cache》也同样适用于RTSP并因RTSP具有重新导向功能可视实际负载情况来转换提供服务的服务器以避免过大的负载集中于同一服务器而造成延迟。RTSP和RTP的关系RTP不象http和ftp可完整的下载整个影视文件它是以固定的数据率在网络上发送数据客户端也是按照这种速度观看影视文件当影视画面播放过后就不可以再重复播放除非重新向服务器端要求数据。RTSP与RTP最大的区别在于RTSP是一种双向实时数据传输协议它允许客户端向服务器端发送请求如回放、快进、倒退等操作。当然RTSP可基于RTP来传送数据还可以选择TCP、UDP、组播UDP等通道来发送数据具有很好的扩展性。它时一种类似与http协议的网络应用层协议。目前碰到的一个应用服务器端实时采集、编码并发送两路视频客户端接收并显示两路视频。由于客户端不必对视频数据做任何回放、倒退等操作可直接采用UDPRTP组播实现。SDP会话描述协议SDP为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。会话目录用于协助多媒体会议的通告并为会话参与者传送相关设置信息。SDP 即用于将这种信息传输到接收端。SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议包括会话通知协议SAP、会话初始协议SIP、实时流协议RTSP、MIME 扩展协议的电子邮件以及超文本传输协议HTTP。SDP 的设计宗旨是通用性它可以应用于大范围的网络环境和应用程序而不仅仅局限于组播会话目录但 SDP 不支持会话内容或媒体编码的协商。在因特网组播骨干网Mbone中会话目录工具被用于通告多媒体会议并为参与者传送会议地址和参与者所需的会议特定工具信息这由 SDP 完成。SDP 连接好会话后传送足够的信息给会话参与者。SDP 信息发送利用了会话通知协议SAP它周期性地组播通知数据包到已知组播地址和端口处。这些信息是 UDP 数据包其中包含 SAP 协议头和文本有效载荷text payload。这里文本有效载荷指的是 SDP 会话描述。此外信息也可以通过电子邮件或 WWW World Wide Web 进行发送。RTMP/RTMPSRTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。它有三种变种工作在TCP之上的明文协议使用端口1935RTMPT封装在HTTP请求之中可穿越防火墙RTMPS类似RTMPT但使用的是HTTPS连接RTMP协议(Real Time Messaging Protocol)是被Flash用于对象,视频,音频的传输.这个协议建立在TCP协议或者轮询HTTP协议之上.RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据.一个单一的连接可以通过不同的通道传输多路网络流.这些通道中的包都是按照固定大小的包传输的.mmsMMS (Microsoft Media Server Protocol)中文“微软媒体服务器协议”用来访问并流式接收 Windows Media 服务器中 .asf 文件的一种协议。MMS 协议用于访问 Windows Media 发布点上的单播内容。MMS 是连接 Windows Media 单播服务的默认方法。若观众在 Windows Media Player 中键入一个 URL 以连接内容而不是通过超级链接访问内容则他们必须使用MMS 协议引用该流。MMS的预设埠端口是1755当使用 MMS 协议连接到发布点时使用协议翻转以获得最佳连接。“协议翻转”始于试图通过 MMSU 连接客户端。 MMSU 是 MMS 协议结合 UDP 数据传送。如果 MMSU 连接不成功则服务器试图使用 MMST。MMST 是 MMS 协议结合 TCP 数据传送。如果连接到编入索引的 .asf 文件想要快进、后退、暂停、开始和停止流则必须使用 MMS。不能用 UNC 路径快进或后退。若您从独立的 Windows Media Player 连接到发布点则必须指定单播内容的 URL。若内容在主发布点点播发布则 URL 由服务器名和 .asf 文件名组成。例如mms://windows_media_server/sample.asf。其中 windows_media_server 是 Windows Media 服务器名sample.asf 是您想要使之转化为流的 .asf 文件名。若您有实时内容要通过广播单播发布则该 URL 由服务器名和发布点别名组成。例如mms://windows_media_server/LiveEvents。这里 windows_media_server 是 Windows Media 服务器名而 LiveEvents 是发布点名HLSHTTP Live StreamingHLS是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议可实现流媒体的直播和点播主要应用在iOS系统为iOS设备如iPhone、iPad提供音视频直播和点播方案。HLS点播基本上就是常见的分段HTTP点播不同在于它的分段非常小。相对于常见的流媒体直播协议例如RTMP协议、RTSP协议、MMS协议等HLS直播最大的不同在于直播客户端获取到的并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件MPEG-TS格式而客户端则不断的下载并播放这些小文件因为服务器端总是会将最新的直播数据生成新的小文件这样客户端只要不停的按顺序播放从服务器获取到的文件就实现了直播。由此可见基本上可以认为HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输所以完全不用考虑防火墙或者代理的问题而且分段文件的时长很短客户端可以很快的选择和切换码率以适应不同带宽条件下的播放。不过HLS的这种技术特点决定了它的延迟一般总是会高于普通的流媒体直播协议。