现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

自己动手写RTSP Clientt与Live555的RTSP Server交互

2013-07-06 21:51 工业·编程 ⁄ 共 2336字 ⁄ 字号 暂无评论

学习Live555开源项目已经有一段日子了,主要目的是想通过Live555学习RTSP协议,Live555 的 RTSP server可以很简单的搭建起来。
然后,我想通过自己拼装协议字段,来做一个RTSP Client与server交互。这样可以加深对RTSP协议的理解。
第一步,在VS2010下编译Live555源码,生成mediaServer.exe。
                PS:网上有很多介绍如何在VS2010下编译Live555的方法:<live555—VS2010 下live555编译、使用及测试>:
第二步,就是动手写一个Client,代码也有很多可以借鉴的,今天有个问题折腾一天,发现OPTION、DESCRIBE之后发送Setup指令的时候,服务端老是响应405错误

RTSP/1.0 405 Method Not Allowed 
,后来单步跟踪到Live555的 void RTSPServer::RTSPClientSession::handleRequestBytes(int newBytesRead) 函数里,发现解析后的cmdName前两个字符多了ASCII码为13和10的字符,也就是回车和换行,定位了很久没有找到哪里多出来的,后来加了两段代码规避了这个问题,因为我的主要目的还是把整个RTSP的请求流程走通。
在cmdName解析后

if (ptr + newBytesRead < tmpPtr + 2 + contentLength) break; 

,加下这段代码,删除每个cmdName前面的回车、换行符。
[cpp] view plaincopyprint?
int i=0; 
while(cmdName[i++]=='\r' || cmdName[i]=='\n') 

strcpy(cmdName,&cmdName[i+1]); 

第三步,自己的RTSP Client解析服务器响应字符串的地方有点bug,修改后就可以直接运行了。
最后就可以看到我记录下的RTSP交互的日志了:

***Send:

OPTIONS rtsp://192.168.10.177/bipbop-gear1-all.ts RTSP/1.0

CSeq: 1

User-Agent: rtsp client(v1.0)

***Recive:

RTSP/1.0 200 OK

CSeq: 1

Date: Sat, Jun 15 2013 08:55:54 GMT

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

***Send:

DESCRIBE rtsp://192.168.10.177/bipbop-gear1-all.ts RTSP/1.0

CSeq: 2

User-Agent: rtsp client(v1.0)

***Recive:

RTSP/1.0 200 OK

CSeq: 2

Date: Sat, Jun 15 2013 08:55:54 GMT

Content-Base: rtsp://192.168.10.177/bipbop-gear1-all.ts/

Content-Type: application/sdp

Content-Length: 418

v=0

o=- 1371285245408650 1 IN IP4 192.168.10.177

s=MPEG Transport Stream, streamed by the LIVE555 Media Server

i=bipbop-gear1-all.ts

t=0 0

a=tool:LIVE555 Streaming Media v2012.04.04

a=type:broadcast

a=control:*

a=range:npt=0-

a=x-qt-text-nam:MPEG Transport Stream, streamed by the LIVE555 Media Server

a=x-qt-text-inf:bipbop-gear1-all.ts

m=video 0 RTP/AVP 33

c=IN IP4 0.0.0.0

b=AS:5000

a=control:track1

***Send:

SETUP rtsp://192.168.10.177/bipbop-gear1-all.ts/track1 RTSP/1.0

CSeq: 3

User-Agent: rtsp client(v1.0)

Transport: RTP/AVP;unicast;client_port=37145-36889

***Recive:

RTSP/1.0 200 OK

CSeq: 3

Date: Sat, Jun 15 2013 08:55:54 GMT

Transport: RTP/AVP;unicast;destination=192.168.10.177;source=192.168.10.177;client_port=37145-36889;server_port=6970-6971

Session: 3679AE01

***Send:

PLAY rtsp://192.168.10.177/bipbop-gear1-all.ts RTSP/1.0

CSeq: 4

Session: 3679AE01

Range: npt=0.000-39.471

User-Agent: rtsp client(v1.0)

***Recive:

RTSP/1.0 200 OK

CSeq: 4

Date: Sat, Jun 15 2013 08:55:55 GMT

Range: npt=0.000-

Session: 3679AE01

RTP-Info: url=rtsp://192.168.10.177/bipbop-gear1-all.ts/track1;seq=33245;rtptime=3329050316

给我留言

留言无头像?