主要流媒体协议一览
主要流媒体协议一览
名称 | 推出机构 | 传输层协议 | 客户端 | 目前使用领域 |
RTSP+RTP | IETF | TCP+UDP | VLC, WMP | IPTV |
RTMP | Adobe Inc. | TCP | Flash | 互联网直播 |
RTMFP | Adobe Inc. | UDP | Flash | 互联网直播 |
MMS | Microsoft Inc. | TCP/UDP | WMP | 互联网直播+点播 |
HTTP | WWW+IETF | TCP | Flash | 互联网点播 |
RTSP+RTP经常用于IPTV领域。因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。因而围绕IPTV的视频质量的研究还是挺多的。
因为互联网网络环境的不稳定性,RTSP+RTP较少用于互联网视音频传输。互联网视频服务通常采用TCP作为其流媒体的传输层协议,因而像RTMP,MMS,HTTP这类的协议广泛用于互联网视音频服务之中。这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。
下面我们来学习哈RTSP协议:
RTSP协议概述
RTSP(Real-TimeStream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。
RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。
接着,流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。
然后,客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端 口
流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。
在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。
最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话
RTSP协议与HTTP协议区别
1. RTSP引入了几种新的方法,比如DESCRIBE、PLAY、SETUP 等,并且有不同的协议标识符,RTSP为rtsp 1.0,HTTP为http 1.1;
2. HTTP是无状态的协议,而RTSP为每个会话保持状态;
3. RTSP协议的客户端和服务器端都可以发送Request请求,而在HTTP协议中,只有客户端能发送Request请求。
4. 在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的载荷数据都是通过带内方式传送的,比如请求的网页数据是在回应的消息体中携带的。
5. 使用ISO10646(UTF-8) 而不是ISO 8859-1,以配合当前HTML的国际化;
6. RTSP使用URI请求时包含绝对URI。而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中;
RTSP重要术
1 集合控制对多个流的同时控制。对音频/视频来讲,客户端仅需发送一条播放或者暂停消息就可同时控制音频流和视频流。
2 实体
作为请求或者回应的有效负荷传输的信息。由以实体标题域(entity-header field)形式存在的元信息和以实体主体(entity body)形式存在的内容组成。
3 容器文件
可以容纳多个媒体流的文件。RTSP服务器可以为这些容器文件提供集合控制。
4 RTSP会话
RTSP交互的全过程。对一个电影的观看过程,会话(session)包括由客户端建立媒体流传输机制(SETUP),使用播放(PLAY)或录制(RECORD)开始传送流,用停止(TEARDOWN)关闭流。
RTSP请求消息
方法 URI RTSP版本 CR LF
消息头 CRLF CRLF
消息体 CR LF
其中方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等,URI是接受方的地址,例如:rtsp://192.168.0.1/video1.3gp。
RTSP版本一般都是 RTSP/1.0。每行后面的CR LF表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF
消息体是可选的,有的Request消息并不带消息体。
RTSP回应消息
RTSP版本状态码解释 CR LF
消息头 CR LF CR LF
消息体 CR LF
其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,用于表示Request消息的执行结果,比如200表示成功,RTSP 重要方法