rtsp协议简单分析
2009年03月17日 星期二 14:18
rtsp和http类似,属于应用层协议
通过socket rtsp命令来进行通讯。
常用控制命令执行顺序常用的是5个命令:
1,OPTIONS,//询问server,那些命令可用
2,DESCRIBE,//请求rtsp路径的媒体描述信息
3,SETUP,//设置会话的属性,以及传输模式,建立会话
GET_PARAMETER,//取得流控制参数,可能某些服务器不支持
SET_PARAMETER,//设置流控制参数,可能某些服务器不支持
4,PLAY,//开始播放流媒体数据
5,TEARDOWN //关闭对话
————————————
ANNOUNCE, //更新会话描述
PAUSE,//临时停止流,而不释放服务器资源
client有请求(request),server就有应答(response)
一般控制命令基于tcp协议。媒体数据传输使用udp。
————————————
参考http:和rtsp在功能上有相似重叠的地方,RTSP采用了HTTP/1.1 大多数的状态码,并且增加了RTSP特定的状态码。
HTTP协议定义了8种可能的请求方法:
GET 检索URI中标识资源的一个简单请求
HEAD 与GET方法相同,服务器只返回状态行和头标,并不返回请求文档
POST 服务器接受被写入客户端输出流中的数据的请求
PUT 服务器保存请求数据作为指定URI新内容的请求
DELETE 服务器删除URI中命名的资源的请求
OPTIONS 关于服务器支持的请求方法信息的请求
TRACE Web服务器反馈Http请求和其头标的请求
CONNECT 已文档化但当前未实现的一个方法,预留做隧道处理
————————————
rtsp和http的协议规范分别在RFC2326 和 RFC2616有详细描述
mms协议为微软的私有协议,未公开协议。采用私有自定义控制结构体来发送命令,而不是像http,rtsp协议采用发送文本命令控制。
实例分析:
s:source host
d:dest host
第一步:握手
三次握手,端口554
s->d syn,seq=0,
d-> syn,ack seq=0
s->d ack,seq=1
2,s->d describe
第二步:
发送:
DESCRIBE rtsp://xxxx.rm RTSP/1.0
User-Agent: NSPlayer/9.0.0.2980 guid/51C94674-351C-432F-96E7-4F29052808FB
X-Accept-Authentication: Negotiate, NTLM, Digest, Basic
CSeq: 1
返回片源的pdu:(信息包括片源的版本和描述信息等等)
RTSP/1.0 200 OK
Content-Type: application/sdp
Vary: Accept
X-Playlist-Gen-Id: 24517
X-Broadcast-Id: 0
Content-Length: 4634
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 1
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Last-Modified: Thu, 20 Sep 2007 13:38:40 GMT
Cache-Control: x-wms-content-size=103215582, max-age=86399, must-revalidate, proxy-revalidate
Etag: "103215582"
v=0
o=- 201007080351420046 201007080351420046 IN IP4 127.0.0.1
s=<No Title>
c=IN IP4 0.0.0.0
b=AS:315
a=maxps:1444
t=0 0
a=control:rtsp://xxx.rm/
a=etag:{3DBB6BB1-8567-725D-2FA4-EEFD8F176BFA}
a=range:npt=5.000-2687.379
a=recvonly
a=pgmpu:data:application/x-wms-contentdesc,8,language,31,0,,44,WMS_CONTENT_DESCRIPTION_SERVER_BRANDING_INFO,31,12,WMServer/9.1,51,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_START_OFFSET,3,4,5000,47,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_DURATION,3,7,2682379,58,WMS_CONTENT_DESCRIPTION_COPIED_METADATA_FROM_PLAYLIST_FILE,3,1,1,42,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_URL,31,30,wwwwxinwen_300_20070920_96.wmv%0D%0A
a=pgmpu:data:application/vnd.ms.wms-hdr.asfv1;base64,MCaydY5mzxGm2QCqAGLObCQKAAAAAAAABwAAAAECodyrjEepzxGO5ADADCBTZWgAAAAAAAAAcZiax3VjwUu1FFL+1SOrpXzyJgYAAAAAkIDvN4r7xwEqFwEAAAAAADB+zUEGAAAAoGbSPgYAAACIEwAAAAAAAAIAAACkBQAApAUAAGDLBAC1A79fLqnPEY7jAMAMIFNlRQcAAAAAAAAR0tOruqnPEY7mAMAMIFNlBgAXBwAAqUZDfODv/EuyKTk+3kFchScAAAAAAAAAAQAMegBoAC0AYwBuAAAAXYvxJoRF7EefXw5lHwRSyRoAAAAAAAAAAgHqy/jFr1t3SIRnqoxE+kzK0AAAAAAAAAAEAAAAAQAuAAMABAAAAFcATQAvAFcATQBBAEQAUgBDAFAAZQBhAGsAUgBlAGYAZQByAGUAbgBjAGUAAADhWQAAAAABADQAAwAEAAAAVwBNAC8AVwBNAEEARABSAEMAQQB2AGUAcgBhAGcAZQBSAGUAZgBlAHIAZQBuAGMAZQAAAJEIAAAAAAEADAACAAIAAABJAHMAVgBCAFIAAAAAAAAAAgAMAAIAAgAAAEkAcwBWAEIAUgAAAAAAdNQGGN/KCUWkupqry5aq6BoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMul5hRyxjJDg5mpaVIGW1pYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoTgAAiBMAAAAAAAAoTgAAiBMAAAAAAAAtAwAAAgAAAAEAAABogzEAAAAAAAAAAADLpeYUcsYyQ4OZqWlSBltabgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEUEAIgTAAAAAAAAwEUEAIgTAAAAAAAA2SYAAAIAAAACAAAANbcMAAAAAAAAAAEAUJS9xn+GB0mDo8d5IbczrQIAAAAAACDeqtkXfJxPvCiFVd2Y4qImAAAAAAAAAAAAAAAAAAAAAAAAAAAAQKTQ0gfj0hGX8ACgyV6oUKIAAAAAAAAAAwAcAFcATQBGAFMARABLAFYAZQByAHMAaQBvAG4AAAAAABoAOQAuADAAMAAuADAAMAAuADMAMgA2ADUAAAAaAFcATQBGAFMARABLAE4AZQBlAGQAZQBkAAAAAAAWADAALgAwAC4AMAAuADAAMAAwADAAAAAMAEkAcwBWAEIAUgAAAAIABAAAAAAAkQfct7epzxGO5gDADCBTZXIAAAAAAAAAQJ5p+E1bzxGo/QCAX1xEK1DNw7+PYc8Ri7IAqgC04iAAAAAAAAAAABwAAAAIAAAAAQA4iTgBYQEBACJWAADFCQAALQMQAAoAAEQAABcAtQwAAAEtAy0DAQAAkQfct7epzxGO5gDADCBTZYEAAAAAAAAAwO8ZvE1bzxGo/QCAX1xEKwBX+yBVW88RqP0AgF9cRCsAAAAAAAAAADMAAAAAAAAAAgAAAAAAQAEAAPAAAAACKAAoAAAAQAEAAPAAAAABABgAV01WMQAAAAAAAAAAAAAAAAAAAAAAAAAAznX4e41G0RGNggBgl8misiYAAAAAAAAAAgABAJxZAAACAMRxBABAUtGGHTHQEaOkAKDJA0j2ngAAAAAAAABBUtGGHTHQEaOkAKDJA0j2AgAAAAIAFwBXAGkAbgBkAG8AdwBzACAATQBlAGQAaQBhACAAQQB1AGQAaQBvACAAVgA3AAAAAAACAGEBAQAXAFcAaQBuAGQAbwB3AHMAIABNAGUAZABpAGEAIABWAGkAZABlAG8AIABWADcAAAAAAAQAV01WMTYmsnWOZs8RptkAqgBizmwaqSYGAAAAAHGYmsd1Y8FLtRRS/tUjq6UqFwEAAAAAAAEB
m=audio 0 RTP/AVP 96
b=AS:23
b=X-AV:21
b=RS:0
b=RR:0
a=rtpmap:96 x-asf-pf/1000
a=control:audio
a=stream:1
m=application 0 RTP/AVP 96
b=RS:0
b=RR:0
a=rtpmap:96 x-wms-rtx/1000
a=control:rtx
a=stream:65536
m=video 0 RTP/AVP 96
b=AS:292
b=X-AV:280
b=RS:0
b=RR:0
a=rtpmap:96 x-asf-pf/1000
a=control:video
a=stream:2
第三步:设置传输方式,tcp还是udp,客户端连接的端口
发送:
SETUP rtsp://xxx.rm/audio RTSP/1.0
CSeq: 2
Transport: x-real-rdt/mcast;client_port=6970;mode=play,x-real-rdt/udp;client_port=6970;mode=play,x-pn-tng/udp;client_port=6970;mode=play,RTP/AVP;unicast;client_port=6970-6971;mode=play,x-pn-tng/tcp;mode=play,x-real-rdt/tcp;mode=play,RTP/AVP/TCP;unicast;mode=play
User-Agent: RealMedia Player HelixDNAClient/10.0.1.1070 (win32)
返回:
RTSP/1.0 200 OK
Blocksize: 1464
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6b82d10a;mode=PLAY
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 2
Session: 5664383775462788894;timeout=60
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Last-Modified: Thu, 20 Sep 2007 13:38:40 GMT
Cache-Control: x-wms-content-size=103215582, max-age=86399, must-revalidate, proxy-revalidate
Etag: "103215582"
第四步:通知服务器要开始播放
发送:
PLAY rtsp://xxxx.rm RTSP/1.0
Session: 5664383775462788894
CSeq: 4
Range: npt=13.605-
Speed: 1000.000
Bandwidth: 2147483647
X-Accelerate-Streaming: AccelDuration=1000000;AccelBandwidth=2147483647
rtsp服务器返回RTP信息:
RTSP/1.0 200 OK
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 4
Session: 5664383775462788894;timeout=60
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Range: npt=7.445-2687.379
Scale: 1.000
X-Accelerate-Streaming: AccelBandwidth=3500000;AccelDuration=20000
Speed: 11.138
RTP-Info: url=rtsp://xxxx.rm/audio;seq=59246;rtptime=7445, url=rtsp://xxxx.rm/video;seq=22362;rtptime=7445
第五步:
rtsp server开始约定的seq number数发送RTP数据包
RTP包结构如下:
第六步:RTCP控制协议。在传输过程中通知rtsp server。端口是rtp端口+1
RTCP和RTP的机制类似FTP的命令端口20和数据端口21的关系。一个走数据一个走控制。
通过socket rtsp命令来进行通讯。
常用控制命令执行顺序常用的是5个命令:
1,OPTIONS,//询问server,那些命令可用
2,DESCRIBE,//请求rtsp路径的媒体描述信息
3,SETUP,//设置会话的属性,以及传输模式,建立会话
GET_PARAMETER,//取得流控制参数,可能某些服务器不支持
SET_PARAMETER,//设置流控制参数,可能某些服务器不支持
4,PLAY,//开始播放流媒体数据
5,TEARDOWN //关闭对话
————————————
ANNOUNCE, //更新会话描述
PAUSE,//临时停止流,而不释放服务器资源
client有请求(request),server就有应答(response)
一般控制命令基于tcp协议。媒体数据传输使用udp。
————————————
参考http:和rtsp在功能上有相似重叠的地方,RTSP采用了HTTP/1.1 大多数的状态码,并且增加了RTSP特定的状态码。
HTTP协议定义了8种可能的请求方法:
GET 检索URI中标识资源的一个简单请求
HEAD 与GET方法相同,服务器只返回状态行和头标,并不返回请求文档
POST 服务器接受被写入客户端输出流中的数据的请求
PUT 服务器保存请求数据作为指定URI新内容的请求
DELETE 服务器删除URI中命名的资源的请求
OPTIONS 关于服务器支持的请求方法信息的请求
TRACE Web服务器反馈Http请求和其头标的请求
CONNECT 已文档化但当前未实现的一个方法,预留做隧道处理
————————————
rtsp和http的协议规范分别在RFC2326 和 RFC2616有详细描述
mms协议为微软的私有协议,未公开协议。采用私有自定义控制结构体来发送命令,而不是像http,rtsp协议采用发送文本命令控制。
实例分析:
s:source host
d:dest host
第一步:握手
三次握手,端口554
s->d syn,seq=0,
d-> syn,ack seq=0
s->d ack,seq=1
2,s->d describe
第二步:
发送:
DESCRIBE rtsp://xxxx.rm RTSP/1.0
User-Agent: NSPlayer/9.0.0.2980 guid/51C94674-351C-432F-96E7-4F29052808FB
X-Accept-Authentication: Negotiate, NTLM, Digest, Basic
CSeq: 1
返回片源的pdu:(信息包括片源的版本和描述信息等等)
RTSP/1.0 200 OK
Content-Type: application/sdp
Vary: Accept
X-Playlist-Gen-Id: 24517
X-Broadcast-Id: 0
Content-Length: 4634
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 1
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Last-Modified: Thu, 20 Sep 2007 13:38:40 GMT
Cache-Control: x-wms-content-size=103215582, max-age=86399, must-revalidate, proxy-revalidate
Etag: "103215582"
v=0
o=- 201007080351420046 201007080351420046 IN IP4 127.0.0.1
s=<No Title>
c=IN IP4 0.0.0.0
b=AS:315
a=maxps:1444
t=0 0
a=control:rtsp://xxx.rm/
a=etag:{3DBB6BB1-8567-725D-2FA4-EEFD8F176BFA}
a=range:npt=5.000-2687.379
a=recvonly
a=pgmpu:data:application/x-wms-contentdesc,8,language,31,0,,44,WMS_CONTENT_DESCRIPTION_SERVER_BRANDING_INFO,31,12,WMServer/9.1,51,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_START_OFFSET,3,4,5000,47,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_DURATION,3,7,2682379,58,WMS_CONTENT_DESCRIPTION_COPIED_METADATA_FROM_PLAYLIST_FILE,3,1,1,42,WMS_CONTENT_DESCRIPTION_PLAYLIST_ENTRY_URL,31,30,wwwwxinwen_300_20070920_96.wmv%0D%0A
a=pgmpu:data:application/vnd.ms.wms-hdr.asfv1;base64,MCaydY5mzxGm2QCqAGLObCQKAAAAAAAABwAAAAECodyrjEepzxGO5ADADCBTZWgAAAAAAAAAcZiax3VjwUu1FFL+1SOrpXzyJgYAAAAAkIDvN4r7xwEqFwEAAAAAADB+zUEGAAAAoGbSPgYAAACIEwAAAAAAAAIAAACkBQAApAUAAGDLBAC1A79fLqnPEY7jAMAMIFNlRQcAAAAAAAAR0tOruqnPEY7mAMAMIFNlBgAXBwAAqUZDfODv/EuyKTk+3kFchScAAAAAAAAAAQAMegBoAC0AYwBuAAAAXYvxJoRF7EefXw5lHwRSyRoAAAAAAAAAAgHqy/jFr1t3SIRnqoxE+kzK0AAAAAAAAAAEAAAAAQAuAAMABAAAAFcATQAvAFcATQBBAEQAUgBDAFAAZQBhAGsAUgBlAGYAZQByAGUAbgBjAGUAAADhWQAAAAABADQAAwAEAAAAVwBNAC8AVwBNAEEARABSAEMAQQB2AGUAcgBhAGcAZQBSAGUAZgBlAHIAZQBuAGMAZQAAAJEIAAAAAAEADAACAAIAAABJAHMAVgBCAFIAAAAAAAAAAgAMAAIAAgAAAEkAcwBWAEIAUgAAAAAAdNQGGN/KCUWkupqry5aq6BoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMul5hRyxjJDg5mpaVIGW1pYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoTgAAiBMAAAAAAAAoTgAAiBMAAAAAAAAtAwAAAgAAAAEAAABogzEAAAAAAAAAAADLpeYUcsYyQ4OZqWlSBltabgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEUEAIgTAAAAAAAAwEUEAIgTAAAAAAAA2SYAAAIAAAACAAAANbcMAAAAAAAAAAEAUJS9xn+GB0mDo8d5IbczrQIAAAAAACDeqtkXfJxPvCiFVd2Y4qImAAAAAAAAAAAAAAAAAAAAAAAAAAAAQKTQ0gfj0hGX8ACgyV6oUKIAAAAAAAAAAwAcAFcATQBGAFMARABLAFYAZQByAHMAaQBvAG4AAAAAABoAOQAuADAAMAAuADAAMAAuADMAMgA2ADUAAAAaAFcATQBGAFMARABLAE4AZQBlAGQAZQBkAAAAAAAWADAALgAwAC4AMAAuADAAMAAwADAAAAAMAEkAcwBWAEIAUgAAAAIABAAAAAAAkQfct7epzxGO5gDADCBTZXIAAAAAAAAAQJ5p+E1bzxGo/QCAX1xEK1DNw7+PYc8Ri7IAqgC04iAAAAAAAAAAABwAAAAIAAAAAQA4iTgBYQEBACJWAADFCQAALQMQAAoAAEQAABcAtQwAAAEtAy0DAQAAkQfct7epzxGO5gDADCBTZYEAAAAAAAAAwO8ZvE1bzxGo/QCAX1xEKwBX+yBVW88RqP0AgF9cRCsAAAAAAAAAADMAAAAAAAAAAgAAAAAAQAEAAPAAAAACKAAoAAAAQAEAAPAAAAABABgAV01WMQAAAAAAAAAAAAAAAAAAAAAAAAAAznX4e41G0RGNggBgl8misiYAAAAAAAAAAgABAJxZAAACAMRxBABAUtGGHTHQEaOkAKDJA0j2ngAAAAAAAABBUtGGHTHQEaOkAKDJA0j2AgAAAAIAFwBXAGkAbgBkAG8AdwBzACAATQBlAGQAaQBhACAAQQB1AGQAaQBvACAAVgA3AAAAAAACAGEBAQAXAFcAaQBuAGQAbwB3AHMAIABNAGUAZABpAGEAIABWAGkAZABlAG8AIABWADcAAAAAAAQAV01WMTYmsnWOZs8RptkAqgBizmwaqSYGAAAAAHGYmsd1Y8FLtRRS/tUjq6UqFwEAAAAAAAEB
m=audio 0 RTP/AVP 96
b=AS:23
b=X-AV:21
b=RS:0
b=RR:0
a=rtpmap:96 x-asf-pf/1000
a=control:audio
a=stream:1
m=application 0 RTP/AVP 96
b=RS:0
b=RR:0
a=rtpmap:96 x-wms-rtx/1000
a=control:rtx
a=stream:65536
m=video 0 RTP/AVP 96
b=AS:292
b=X-AV:280
b=RS:0
b=RR:0
a=rtpmap:96 x-asf-pf/1000
a=control:video
a=stream:2
第三步:设置传输方式,tcp还是udp,客户端连接的端口
发送:
SETUP rtsp://xxx.rm/audio RTSP/1.0
CSeq: 2
Transport: x-real-rdt/mcast;client_port=6970;mode=play,x-real-rdt/udp;client_port=6970;mode=play,x-pn-tng/udp;client_port=6970;mode=play,RTP/AVP;unicast;client_port=6970-6971;mode=play,x-pn-tng/tcp;mode=play,x-real-rdt/tcp;mode=play,RTP/AVP/TCP;unicast;mode=play
User-Agent: RealMedia Player HelixDNAClient/10.0.1.1070 (win32)
返回:
RTSP/1.0 200 OK
Blocksize: 1464
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6b82d10a;mode=PLAY
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 2
Session: 5664383775462788894;timeout=60
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Last-Modified: Thu, 20 Sep 2007 13:38:40 GMT
Cache-Control: x-wms-content-size=103215582, max-age=86399, must-revalidate, proxy-revalidate
Etag: "103215582"
第四步:通知服务器要开始播放
发送:
PLAY rtsp://xxxx.rm RTSP/1.0
Session: 5664383775462788894
CSeq: 4
Range: npt=13.605-
Speed: 1000.000
Bandwidth: 2147483647
X-Accelerate-Streaming: AccelDuration=1000000;AccelBandwidth=2147483647
rtsp服务器返回RTP信息:
RTSP/1.0 200 OK
Date: Thu, 08 Jul 2010 03:51:42 GMT
CSeq: 4
Session: 5664383775462788894;timeout=60
Server: WMServer/9.1.1.3814
Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.eosmsg, com.microsoft.wm.fastcache, com.microsoft.wm.packetpairssrc, com.microsoft.wm.startupprofile
Range: npt=7.445-2687.379
Scale: 1.000
X-Accelerate-Streaming: AccelBandwidth=3500000;AccelDuration=20000
Speed: 11.138
RTP-Info: url=rtsp://xxxx.rm/audio;seq=59246;rtptime=7445, url=rtsp://xxxx.rm/video;seq=22362;rtptime=7445
第五步:
rtsp server开始约定的seq number数发送RTP数据包
RTP包结构如下:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
第六步:RTCP控制协议。在传输过程中通知rtsp server。端口是rtp端口+1
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ header |V=2|P| RC | PT=SR=200 | length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | SSRC of sender | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ sender | NTP timestamp, most significant word | info +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | NTP timestamp, least significant word | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | RTP timestamp | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sender's packet count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | sender's octet count | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ report | SSRC_1 (SSRC of first source) | block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 | fraction lost | cumulative number of packets lost | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | extended highest sequence number received | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | interarrival jitter | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | last SR (LSR) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | delay since last SR (DLSR) | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ report | SSRC_2 (SSRC of second source) | block +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2 : ... : +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | profile-specific extensions | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RTCP和RTP的机制类似FTP的命令端口20和数据端口21的关系。一个走数据一个走控制。