实习笔记(四)——RTSP消息

本文介绍了RTSP(实时流协议)的消息结构,包括请求消息和响应消息的格式,并详细解析了RTSP交互过程,如OPTIONS、DESCRIBE、SETUP、PLAY和TEARDOWN命令。着重讨论了SDP在描述流媒体信息中的作用,以及SETUP命令中的transport字段对RTP/RTCP传输方式的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RTSP的消息有两大类,一是请求消息(request),一是回应消息 (response),两种消息的格式不同.
请求消息:
       方法 URI RTSP版本 CR LF
       消息头 CR LF CR LF        
       消息体 CR LF
其中方法包括OPTIONS回应中所有的命令,URI是接收方的地址,例如:rtsp://192.168.22.136:5000/v0
RTSP版本一般都是RTSP/1.0.每行后面的CR LF表示回车换行,需要接收端有相应的解析,最后一个消息头需要有两个CR LF
回应消息:
       RTSP版本 状态码 解释 CR LF
       消息头 CR LF CR LF
       消息体 CR LF

 

简单的rtsp交互过程:
C表示RTSP客户端,S表示RTSP服务端
1.C->S:OPTIONS request    //询问S有哪些方法可用
1.S->C:OPTIONS response   //S回应信息中包括提供的所有可用方法

2.C->S:DESCRIBE request   //要求得到S提供的媒体初始化描述信息
2.S->C:DESCRIBE response  //S回应媒体初始化描述信息,主要是sdp
 
3.C->S:SETUP request      //设置会话的属性,以及传输模式,提醒S建立会话
3.S->C:SETUP response     //S建立会话,返回会话标识符,以及会话相关信息
 
4.C->S:PLAY request       //C请求播放
4.S->C:PLAY response      //S回应该请求的信息
 
S->C:发送流媒体数据
5.C->S:TEARDOWN request   //C请求关闭会话
5.S->C:TEARDOWN response  //S回应该请求

 

来自:http://my.oschina.net/alphajay/blog/4452

----------------------------------------------------------

一眼看过去,感觉这协议还挺简单的,也就很普通的交互过程嘛,但是,当每一个命令都是自己写处理函数的时候才发现,看似简单的东西,里面并没有那么简单。当一个个小小的问题都要自己考虑时才会发现,这是一个大问题。

 

协议的命令意义如下:

1:options
这个通常由client发送server,询问服务器所支持的方法种类,当然在应用中也可以用来作为心跳,因为它是状态无关的.

 

2:describe
按照字面意思,就是描述,描述什么呢?当然是流媒体的信息呢,在返回的应答中包含SDP.

(这里提到了SDP,后面写)

在应答中, 我们重点关注SDP字段.在SDP中,我们看到了流媒体包含了2个资源(m行):audio和video,其中a行是m(media)的属性描述.在m行中,中间的数字为服务端推荐客户端接收的端口,如果服务端不想这样做,可以将port置为0.在sdp中,还有a=control字段。

 

3:setup
建立会话,如果支持集合控制,在setup中会包含session字段.

通过setup的响应,即建立了流媒体的会话.后续的setup必须带上session字段,通过上面的消息我们看到客户端发送了2次setup,分别是代表video的track1和audio的track2.如果服务端不支持集合操作,那么setup里带上session字段则是非法的.在消息中,我们看到了transport字段,在这里表明了客户端接收流媒体的端口,以及编码格式.在本例中采用的是udp方式传送RTP,如果采用TCP的方式传送 RTP,则可能transport 字段为:Transport: RTP/AVP/TCP;unicast;interleaved=0-1 ,这里解释下interleaved,因为采用TCP方式传送,所以传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了 interleaved,0表示是RTP的通道,1表示是RTCP的通道.

 

4:play
play 即对流媒体的播放指令:

通常在play中有range字段,但不是必需的.这个字段表示播放的流媒体的范围.

 

5:teardown
teardown指令即对流媒体的结束
在teardown中是否必须带有session,我们曾经进行过讨论.如果一个session对应一个链路,则可以不需要对应session,但是在我们遇到的应用中,teardown基本都是携带了teardown.

 

 

参考:http://hi.baidu.com/yg_110/blog/item/e90d95fc33d8f4fafc037f59.html

 

--------------------------------------------------------------

协议的各个命令里,感觉SDP是重点,SETUP是关键点,其中的transport字段直接影响着发送方式。

“Transport参数设置了传输模式。RTP/AVP /TCP表示通过TCP传输RTP包,RTP/AVP表示使用UDP 传输RTP包。unicast表示单播。interleaved值有两个:0和1,0表示RTP包,1 表示RTCP包,接收端根据interleaved的值来区别是哪种数据包。client_port值有3008和3009,3008表示客户端接收 RTP包的端口,3009表示客户端接收RTCP包的端口,服务端要分别将RTP包和RTCP包发送到这两个端口。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值