这篇文章主要从几个方面分析EasyDarwin的RTSP内容
RTSP协议概述
wireshark抓包实例分析 一次完整RTSP的交互流程
EasyDarwin项目代码中 RTSP的初始化
EasyDarwin项目代码中 RTSP请求的处理过程
第一部分:RTSP协议
一、RTSP协议概述
RTSP(Real-TimeStream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类。HTTP协议相信大家都比较熟悉了.
RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
一次基本的RTSP操作过程是:
首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。
流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。
客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。
流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。
在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话
二、RTSP 重要方法
使用wireshark抓取的rtsp过程的包
OPTIONS:
用于得到服务器提供的可用方法,如:
服务器的回应信息会在Public字段列出提供的方法。如:
DESCRIBE:
客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。
如:
OPTIONS 字段后的rtsp://192.168.1.3:554/easytest.mp4 RTSP/1.0\r\n
是请求的Server上的URI资源。
服务器回应URI指定媒体的描述信息:
Content-Type: application/sdp //表示回应为SDP信息
Content-Length: 1383
//以下为具体的SDP信息
媒体描述是我们分析时常用的。比如m和c
m= (媒体名称和传输地址)
i=* (媒体标题)
c=* (连接信息 — 如果包含在会话层则该字段可选)
b=* (带宽信息)
k=* (加密密钥)
a=* (0个或多个会话属性线路)
媒体初始化是任何基于RTSP系统的必要条件,但RTSP规范并没有规定它必须通过DESCRIBE方法完成。RTSP客户端可以通过以下方法来接收媒体描述信息:
a) 通过DESCRIBE方法;
b) 其它一些协议(HTTP,email附件,等);
c) 通过命令行或标准输入设备
SETUP:
用于确定转输机制,建立RTSP会话。客户端能够发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数的改变。若是不同意,它必须响应错误”455 Method Not Valid In This State”。
Request中的Transport头字段指定了客户端可接受的数据传输参数;Response中的Transport 头字段包含了由服务器选出的传输参数。
如:
Transport: RTP/P;unicast;client_port=63086-63087
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-47689-1.html