自己动手写RTSP Clientt与Live555的RTSP Server交互
来源:互联网 发布:天猫双十一各品类数据 编辑:程序博客网 时间:2024/05/22 00:21
学习Live555开源项目已经有一段日子了,主要目的是想通过Live555学习RTSP协议,Live555 的 RTSP server可以很简单的搭建起来。
然后,我想通过自己拼装协议字段,来做一个RTSP Client与server交互。这样可以加深对RTSP协议的理解。
第一步,在VS2010下编译Live555源码,生成mediaServer.exe。
PS:网上有很多介绍如何在VS2010下编译Live555的方法:比如我转载的这个:http://blog.csdn.net/longlong530/article/details/9000331
第二步,就是动手写一个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前面的回车、换行符。
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.0CSeq: 1User-Agent: rtsp client(v1.0)***Recive:RTSP/1.0 200 OKCSeq: 1Date: Sat, Jun 15 2013 08:55:54 GMTPublic: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER***Send:DESCRIBE rtsp://192.168.10.177/bipbop-gear1-all.ts RTSP/1.0CSeq: 2User-Agent: rtsp client(v1.0)***Recive:RTSP/1.0 200 OKCSeq: 2Date: Sat, Jun 15 2013 08:55:54 GMTContent-Base: rtsp://192.168.10.177/bipbop-gear1-all.ts/Content-Type: application/sdpContent-Length: 418v=0o=- 1371285245408650 1 IN IP4 192.168.10.177s=MPEG Transport Stream, streamed by the LIVE555 Media Serveri=bipbop-gear1-all.tst=0 0a=tool:LIVE555 Streaming Media v2012.04.04a=type:broadcasta=control:*a=range:npt=0-a=x-qt-text-nam:MPEG Transport Stream, streamed by the LIVE555 Media Servera=x-qt-text-inf:bipbop-gear1-all.tsm=video 0 RTP/AVP 33c=IN IP4 0.0.0.0b=AS:5000a=control:track1***Send:SETUP rtsp://192.168.10.177/bipbop-gear1-all.ts/track1 RTSP/1.0CSeq: 3User-Agent: rtsp client(v1.0)Transport: RTP/AVP;unicast;client_port=37145-36889***Recive:RTSP/1.0 200 OKCSeq: 3Date: Sat, Jun 15 2013 08:55:54 GMTTransport: RTP/AVP;unicast;destination=192.168.10.177;source=192.168.10.177;client_port=37145-36889;server_port=6970-6971Session: 3679AE01***Send:PLAY rtsp://192.168.10.177/bipbop-gear1-all.ts RTSP/1.0CSeq: 4Session: 3679AE01Range: npt=0.000-39.471User-Agent: rtsp client(v1.0)***Recive:RTSP/1.0 200 OKCSeq: 4Date: Sat, Jun 15 2013 08:55:55 GMTRange: npt=0.000-Session: 3679AE01RTP-Info: url=rtsp://192.168.10.177/bipbop-gear1-all.ts/track1;seq=33245;rtptime=3329050316
RTSP的例子终于跑通了,后面再花点时间梳理下,RTSP协议的学习就可以告一段落了,下一站SIP协议!~加油
- 自己动手写RTSP Clientt与Live555的RTSP Server交互
- live555与vlc的rtsp组播交互信息
- live555与vlc的rtsp组播交互信息(Log)
- live555与quicktime rtsp组播交互信息
- live555 rtsp server android 移植
- 搭建玩live555 RTSP server
- live555的安装 RTSP点播消息流程实例(客户端:VLC, RTSP服务器:LIVE555 Media Server)
- 简单完整的一个 rtsp 交互过程 live555-openRTSP
- [live555]rtsp直播基于live555的实现
- [live555]rtsp直播基于live555的实现
- Android之live555构建RTSP Server
- live555 RTSP Server RTP over TCP BUG
- 3531上用live555实现RTSP Server
- 基于Live555,ffmpeg的RTSP播放器直播与点播
- live555直播实现-DM365 DVSDK+live555=RTSP server live
- RTSP信令的交互
- RTSP信令的交互
- 基于live555的rtsp封装rtspperf
- 逆波兰表达式及求值
- scrum 工具收集
- 正确安装jdk后,eclipse找不到jdk路径
- static_cast和reinterpret_cast的区别
- 2.三种点击事件的调用
- 自己动手写RTSP Clientt与Live555的RTSP Server交互
- 编译kernel是的no machine record defined 错误
- 词干提取(stemming)和词形还原(lemmatization)
- 需要写作是因为缺乏思考
- iOS7新特征汇总[02]新特征介绍2
- 关于oracle managed file 的一点理解
- MySQL学习记录(多表连接查询+演示分析)七 DML
- 让多个div显示在一行(浮动的div)
- C++中的std