RTSP消息详解
2016-03-14 13:36
218 查看
2.请求消息格式,CR LF表示回车换行
方法 URI RTSP版本 CR LF
消息头 CR LF CR LF
消息体 CR LF
3.OPTIONS命令, 得到服务器上可用的方法
CSeq头要从1开始,服务器针对请求命令的应答也应该有相同的CSeq头,这样可以知道是针对哪条请求发的应答。
请求示例:
OPTIONS rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 1
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
响应示例:
RTSP/1.0 200 OK
CSeq: 1
Date: Tue, 29 May 2012 06:19:53 GMT
Server: Helix Server Version 11.1.0.719 (win32) (RealServer compatible)
Public: OPTIONS, DESCRIBE, ANNOUNCE, PLAY, PAUSE, SETUP, GET_PARAMETER, SET_PARAMETER, TEARDOWN
TurboPlay: 1
RealChallenge1: 1105b1d46a973db1bc7787d1adca20d6
StatsMask: 8
4.DESCRIBE 为了得到会话描述信息SDP
请求示例:
DESCRIBE rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 2
Authorization: Basic YWRtaW4=
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Accept: application/sdp
响应示例:
RTSP/1.0 200 OK
CSeq: 2
Date: Tue, 29 May 2012 06:48:38 GMT
Set-Cookie: cbid=efjgfmdicjckhldmeorrgplqmojrktluekjgkidlegcfdlplmnmrqprtqrrsltmudfhjjmhl;path=/;expires=Thu,31-Dec-2037 23:59:59 GMT
vsrc: http://video.fjtu.com.cn:80/viewsource/template.html?nuyhtgfcswz6bdE057Axc8chvqrEsfaba5E6qvm6wfy23p4efqDCr4x3gEf6Bs9wr4enf6r4ovCoa7Dqjlh87pp257e5w48bjd2hA1
Last-Modified: Thu, 10 Apr 2003 02:16:54 GMT
Content-base: rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/
Vary: User-Agent, ClientID
Content-type: application/sdp
x-real-usestrackid: 1
Content-length: 2207
(以下都是SDP信息)
v=0
o=- 1049941014 1049941014 IN IP4 210.34.46.23
s=·¨ÂÉÎÄÊé µÚÒ»½²
i=¸£½¨Ê¦·¶´óѧÍøÂçѧԺ ¸£½¨Ê¦·¶´óѧÍøÂçѧԺ
c=IN IP4 0.0.0.0
t=0 0
a=SdpplinVersion:1610641560
a=StreamCount:integer;2
a=control:*
a=Flags:integer;11
a=IsRealDataType:integer;1
a=Author:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Copyright:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Title:buffer;"t6jCyc7EyukgILXa0ru9sgA="
a=range:npt=0-2672.331000
m=audio 0 RTP/AVP 101 //这里指示音频流
b=AS:8
b=RR:243
b=RS:81
a=control:streamid=0
a=range:npt=0-2672.331000
a=length:npt=2672.331000
a=rtpmap:101 x-pn-realaudio/1000
a=fmtp:101
a=mimetype:string;"audio/x-pn-realaudio"
a=Helix-Adaptation-Support:1
a=ActualPreroll:integer;1713
a=AvgBitRate:integer;6500
a=AvgPacketSize:integer;232
a=EndOneRuleEndAll:integer;1
a=EndTime:integer;2671699
a=MaxBitRate:integer;6500
a=MaxPacketSize:integer;232
a=Preroll:integer;3426
a=OpaqueData:buffer;"LnJh/QAEAAAucmE0ZgVhxwAEAAAAOQAAAAAA6AAg7CAAALzN+fn5+QAGAOgAAAAAH0AAAAAQAAEEc2lwcgRzaXByAQcAAAAAAA=="
a=RMFF 1.0 Flags:buffer;"AAIAAgAA"
a=ASMRuleBook:string;"priority=5,averagebandwidth=6500,PNMKeyFrameRule=T;priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T,OnDepend="0",OffDepend="0";"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Audio Stream"
m=video 0 RTP/AVP 101 //这里指示视频流
b=AS:15
b=RR:506
b=RS:168
a=control:streamid=1
a=range:npt=0-2671.546000
a=length:npt=2671.546000
a=rtpmap:101 x-pn-realvideo/1000
a=fmtp:101
a=mimetype:string;"video/x-pn-realvideo"
a=Helix-Adaptation-Support:1
a=AvgBitRate:integer;13500
a=AvgPacketSize:integer;506
a=EndOneRuleEndAll:integer;1
a=MaxBitRate:integer;13500
a=MaxPacketSize:integer;607
a=Preroll:integer;3539
a=OpaqueData:buffer;"AAAAJlZJRE9SVjMwAPgAyAAMAAAAAAAPAAABCpAwMCAgAiwkPjI="
a=RMFF 1.0 Flags:buffer;"AAMAAgAAAAI="
a=ASMRuleBook:string;"#($Bandwidth >= 13500),priority=9,averagebandwidth=13500,PNMKeyFrameRule=T;#($Bandwidth >= 13500),OnDepend="0",priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T;#($Bandwidth < 13500),priority=9,timestampdelivery=T,DropByN=T,PNMThinningRule=T;"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Video Stream"
SDP文本说明:
v=0 //指示协议的版本。
o=- 1049941014 1049941014 IN IP4 210.34.46.23 //与会话所有者有关的六个参数:
第一个参数表明会话发起者的名称,该参数可不填写,如填写和SIP消息中,from消息头的内容一致。
第二个参数为主叫方的会话标识符。
第三个参数为主叫方会话的版本,会话数据有改变时,版本号递增。
第四个参数定义了网络类型,IN表示Internet网络类型,目前仅定义该网络类型。
第五个参数为地址类型,目前支持IPV4和IPV6两种地址类型。
第六个参数为地址:表明会话发起者的IP地址,该地址为信令面的IP地址,信令PDP激活时为手机分配。
s=SDP Seminar //表明本次会话的标题,或会话的名称。
i=A Seminar on the session description protocol//会话的描述
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps//会话的URI,通过该地址可以查阅到会话的更多内容。
e=mjh@isi.edu (Mark Handley)//会话责任人的EMIAL地址
c=IN IP4 224.2.17.12/127 //C行包含为多媒体会话而建立的连接的信息,其中指出了真正的媒体流使用的IP地址。
第一个参数为网络类型,目前仅定义INTERNET网络类型。用“IN”表示。
第二个参数为地址类型,目前支持两种地址类型:IPV4和IPV6。
第三个参数为地址,该地址为多媒体流使用的IP地址。
t=2873397496 2873404696 //表示会话的开始时间和结束时间。
第一个参数表明会话的开始时间,数字表明从1900年1月1日00:00以来所经过的秒数。
第二个参数表明会话的结束时间,数字表明从1900年1月1日00:00以来所经过的秒数。
m=audio 3458 RTP/AVP 0 96 97 //m行又称媒体行,描述了发送方所支持的媒体类型等信息。
第一个参数为媒体名称:表明支持音频类型。
第二个参数为端口号,表明UE在本地端口为3458上发送音频流。
第三个参数为传输协议,一般为RTP/AVP协议。
四-七参数为所支持的四种净荷类型编号。
m=指示在媒体数据中都有哪些流,及其类型,如
m=audio 0 RTP/AVP 101 //指示音频流
m=video 0 RTP/AVP 101 //指示视频流
m=application 0 RTP/AVP 96 //控制流,不携带媒体内容
a=control:后的值表示流的标识,如
a=control:streamid=1,a=control:trackID=0
a=rtpmap:0 PCMU
a=rtpmap:96 G726-32/8000
a=rtpmap:97 AMR-WB
a行为媒体的属性行,以属性的名称:属性值的方式表示。
格式为:a=rtpmap:<净荷类型><编码名称>
l净荷类型0固定分配给了PCMU,
l净荷类型96对应的编码方案为G.726,为动态分配的。
l净荷类型97对应的编码方式为自适应多速率宽带编码(AMR-WB),为动态分配的。
5.SETUP 客户端提醒服务器建立会话,并确定传输模式
请求示例:
SETUP rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/streamid=1 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=0
响应示例:
解释:
uri中 带有trackID=0,表示对该通道进行设置。
Transport参数设置了传输模式,包的结构。
RTP/AVP表示默认使用UDP传输RTP包,RTP/AVP/TCP表示通过TCP传输RTP包。
unicast表示单一传播。
client_port值中-前的表示客户端的接收RTP包的端口,-后的表示客户端的接收RTCP包的端口。
如果采用TCP方式传送,传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了interleaved,0表示是RTP的通道,1表示是RTCP的通道,interleaved值有两个:0和1,0表示RTP包,1表示RTCP包,接收端根据interleaved的值来区别是哪种数据包。
2. 使用AsyncSocket实现RTSP协议
http://www.cnblogs.com/foxmin/archive/2012/03/12/2392523.html
3. 一个在线的RTSP流3GP地址,可以做测试用
rtsp://v.starv.tv/later.3gp
4.FFMPEG框架代码阅读
http://www.ffmpeg.com.cn/index.php/SDK之快速入门
5.iFrameExtractor
http://www.codza.com/extracting-frames-from-movies-on-iphone
2.请求消息格式,CR LF表示回车换行
方法 URI RTSP版本 CR LF
消息头 CR LF CR LF
消息体 CR LF
3.OPTIONS命令, 得到服务器上可用的方法
CSeq头要从1开始,服务器针对请求命令的应答也应该有相同的CSeq头,这样可以知道是针对哪条请求发的应答。
请求示例:
OPTIONS rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 1
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
响应示例:
RTSP/1.0 200 OK
CSeq: 1
Date: Tue, 29 May 2012 06:19:53 GMT
Server: Helix Server Version 11.1.0.719 (win32) (RealServer compatible)
Public: OPTIONS, DESCRIBE, ANNOUNCE, PLAY, PAUSE, SETUP, GET_PARAMETER, SET_PARAMETER, TEARDOWN
TurboPlay: 1
RealChallenge1: 1105b1d46a973db1bc7787d1adca20d6
StatsMask: 8
4.DESCRIBE 为了得到会话描述信息SDP
请求示例:
DESCRIBE rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 2
Authorization: Basic YWRtaW4=
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Accept: application/sdp
响应示例:
RTSP/1.0 200 OK
CSeq: 2
Date: Tue, 29 May 2012 06:48:38 GMT
Set-Cookie: cbid=efjgfmdicjckhldmeorrgplqmojrktluekjgkidlegcfdlplmnmrqprtqrrsltmudfhjjmhl;path=/;expires=Thu,31-Dec-2037 23:59:59 GMT
vsrc: http://video.fjtu.com.cn:80/viewsource/template.html?nuyhtgfcswz6bdE057Axc8chvqrEsfaba5E6qvm6wfy23p4efqDCr4x3gEf6Bs9wr4enf6r4ovCoa7Dqjlh87pp257e5w48bjd2hA1
Last-Modified: Thu, 10 Apr 2003 02:16:54 GMT
Content-base: rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/
Vary: User-Agent, ClientID
Content-type: application/sdp
x-real-usestrackid: 1
Content-length: 2207
(以下都是SDP信息)
v=0
o=- 1049941014 1049941014 IN IP4 210.34.46.23
s=·¨ÂÉÎÄÊé µÚÒ»½²
i=¸£½¨Ê¦·¶´óѧÍøÂçѧԺ ¸£½¨Ê¦·¶´óѧÍøÂçѧԺ
c=IN IP4 0.0.0.0
t=0 0
a=SdpplinVersion:1610641560
a=StreamCount:integer;2
a=control:*
a=Flags:integer;11
a=IsRealDataType:integer;1
a=Author:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Copyright:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Title:buffer;"t6jCyc7EyukgILXa0ru9sgA="
a=range:npt=0-2672.331000
m=audio 0 RTP/AVP 101 //这里指示音频流
b=AS:8
b=RR:243
b=RS:81
a=control:streamid=0
a=range:npt=0-2672.331000
a=length:npt=2672.331000
a=rtpmap:101 x-pn-realaudio/1000
a=fmtp:101
a=mimetype:string;"audio/x-pn-realaudio"
a=Helix-Adaptation-Support:1
a=ActualPreroll:integer;1713
a=AvgBitRate:integer;6500
a=AvgPacketSize:integer;232
a=EndOneRuleEndAll:integer;1
a=EndTime:integer;2671699
a=MaxBitRate:integer;6500
a=MaxPacketSize:integer;232
a=Preroll:integer;3426
a=OpaqueData:buffer;"LnJh/QAEAAAucmE0ZgVhxwAEAAAAOQAAAAAA6AAg7CAAALzN+fn5+QAGAOgAAAAAH0AAAAAQAAEEc2lwcgRzaXByAQcAAAAAAA=="
a=RMFF 1.0 Flags:buffer;"AAIAAgAA"
a=ASMRuleBook:string;"priority=5,averagebandwidth=6500,PNMKeyFrameRule=T;priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T,OnDepend="0",OffDepend="0";"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Audio Stream"
m=video 0 RTP/AVP 101 //这里指示视频流
b=AS:15
b=RR:506
b=RS:168
a=control:streamid=1
a=range:npt=0-2671.546000
a=length:npt=2671.546000
a=rtpmap:101 x-pn-realvideo/1000
a=fmtp:101
a=mimetype:string;"video/x-pn-realvideo"
a=Helix-Adaptation-Support:1
a=AvgBitRate:integer;13500
a=AvgPacketSize:integer;506
a=EndOneRuleEndAll:integer;1
a=MaxBitRate:integer;13500
a=MaxPacketSize:integer;607
a=Preroll:integer;3539
a=OpaqueData:buffer;"AAAAJlZJRE9SVjMwAPgAyAAMAAAAAAAPAAABCpAwMCAgAiwkPjI="
a=RMFF 1.0 Flags:buffer;"AAMAAgAAAAI="
a=ASMRuleBook:string;"#($Bandwidth >= 13500),priority=9,averagebandwidth=13500,PNMKeyFrameRule=T;#($Bandwidth >= 13500),OnDepend="0",priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T;#($Bandwidth < 13500),priority=9,timestampdelivery=T,DropByN=T,PNMThinningRule=T;"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Video Stream"
SDP文本说明:
v=0 //指示协议的版本。
o=- 1049941014 1049941014 IN IP4 210.34.46.23 //与会话所有者有关的六个参数:
第一个参数表明会话发起者的名称,该参数可不填写,如填写和SIP消息中,from消息头的内容一致。
第二个参数为主叫方的会话标识符。
第三个参数为主叫方会话的版本,会话数据有改变时,版本号递增。
第四个参数定义了网络类型,IN表示Internet网络类型,目前仅定义该网络类型。
第五个参数为地址类型,目前支持IPV4和IPV6两种地址类型。
第六个参数为地址:表明会话发起者的IP地址,该地址为信令面的IP地址,信令PDP激活时为手机分配。
s=SDP Seminar //表明本次会话的标题,或会话的名称。
i=A Seminar on the session description protocol//会话的描述
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps//会话的URI,通过该地址可以查阅到会话的更多内容。
e=mjh@isi.edu (Mark Handley)//会话责任人的EMIAL地址
c=IN IP4 224.2.17.12/127 //C行包含为多媒体会话而建立的连接的信息,其中指出了真正的媒体流使用的IP地址。
第一个参数为网络类型,目前仅定义INTERNET网络类型。用“IN”表示。
第二个参数为地址类型,目前支持两种地址类型:IPV4和IPV6。
第三个参数为地址,该地址为多媒体流使用的IP地址。
t=2873397496 2873404696 //表示会话的开始时间和结束时间。
第一个参数表明会话的开始时间,数字表明从1900年1月1日00:00以来所经过的秒数。
第二个参数表明会话的结束时间,数字表明从1900年1月1日00:00以来所经过的秒数。
m=audio 3458 RTP/AVP 0 96 97 //m行又称媒体行,描述了发送方所支持的媒体类型等信息。
第一个参数为媒体名称:表明支持音频类型。
第二个参数为端口号,表明UE在本地端口为3458上发送音频流。
第三个参数为传输协议,一般为RTP/AVP协议。
四-七参数为所支持的四种净荷类型编号。
m=指示在媒体数据中都有哪些流,及其类型,如
m=audio 0 RTP/AVP 101 //指示音频流
m=video 0 RTP/AVP 101 //指示视频流
m=application 0 RTP/AVP 96 //控制流,不携带媒体内容
a=control:后的值表示流的标识,如
a=control:streamid=1,a=control:trackID=0
a=rtpmap:0 PCMU
a=rtpmap:96 G726-32/8000
a=rtpmap:97 AMR-WB
a行为媒体的属性行,以属性的名称:属性值的方式表示。
格式为:a=rtpmap:<净荷类型><编码名称>
l净荷类型0固定分配给了PCMU,
l净荷类型96对应的编码方案为G.726,为动态分配的。
l净荷类型97对应的编码方式为自适应多速率宽带编码(AMR-WB),为动态分配的。
5.SETUP 客户端提醒服务器建立会话,并确定传输模式
请求示例:
SETUP rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/streamid=1 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=0
响应示例:
解释:
uri中 带有trackID=0,表示对该通道进行设置。
Transport参数设置了传输模式,包的结构。
RTP/AVP表示默认使用UDP传输RTP包,RTP/AVP/TCP表示通过TCP传输RTP包。
unicast表示单一传播。
client_port值中-前的表示客户端的接收RTP包的端口,-后的表示客户端的接收RTCP包的端口。
如果采用TCP方式传送,传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了interleaved,0表示是RTP的通道,1表示是RTCP的通道,interleaved值有两个:0和1,0表示RTP包,1表示RTCP包,接收端根据interleaved的值来区别是哪种数据包。
2. 使用AsyncSocket实现RTSP协议
http://www.cnblogs.com/foxmin/archive/2012/03/12/2392523.html
3. 一个在线的RTSP流3GP地址,可以做测试用
rtsp://v.starv.tv/later.3gp
4.FFMPEG框架代码阅读
http://www.ffmpeg.com.cn/index.php/SDK之快速入门
5.iFrameExtractor
http://www.codza.com/extracting-frames-from-movies-on-iphone
相关文章推荐
- HTTP Status 404 - No result defined for action解决方法
- 建立企业内部mavenserver并使用Android Studio公布公共项目
- 【作业】第二周作业,适合13级1/2/3班
- linux 命令行启动虚拟机
- 怎么解析json串在.net中[Error reading JObject from JsonReader. Current JsonReader item is not an obj]
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 算法题--答案仅供参考
- 对反向传播算法(Back-Propagation)的推导与一点理解
- 语不惊人死不休(172)该死的棍子
- 40、微信-搜索好友及公众号页面SearchActivity
- 一个样例让你明确原型对象和原型链
- TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement
- 在oc中一些常用的宏定义总结