python模拟器 截图_转 RTSP客户端模拟器(TCP方式,Python实现)

转自: http://www.cnblogs.com/MikeZhang/archive/2012/10/29/rtspTcpClient_DSS_20121029.html

由于某种需求,工作中需要自己要开发RTSP客户端模拟器……这里以DarwinStreamingServer(简称DSS)为例进行演示,把思路记录下来,算是开发了一个测试工具,也方便我以后查阅。

一、通信端口分析

首先通过抓包分析确定数据通信端口。

RTSP数据包截图:

RTP数据包截图:

RTCP数据包截图:

由图可知,在以TCP方式访问DSS时,RTSP数据、RTP数据和RTCP数据都是通过554端口进行传输的,所以DSS服务器只通过554端口和客户端通信。

二、通信过程分析

OPTIONS :查询到服务器所提供的方法;

DESCRIBE :得到会话描述信息(SDP);

SETUP :提醒服务器建立会话,并确定传输模式;

PLAY  :客户端发送播放请求;

TEARDOWN :客户端发起关闭请求;

当然中间还有RTP和RTCP的交互,这里就不叙述了。

三、模拟器实现

1、建立链接

1 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

2 s.connect((m_Vars["defaultServerIp"],m_Vars["defaultServerPort"]))

2、查询服务器所提供的方法

向服务器发送OPTIONS请求,得到服务器所提供的方法。

1 s.send(genmsg_OPTIONS(m_Vars["defaultTestUrl"],seq,m_Vars["defaultUserAgent"]))

2 print s.recv(m_Vars["bufLen"])

3、得到会话描述信息

向服务器发送DESCRIBE请求,得到SDP

1 s.send(genmsg_DESCRIBE(m_Vars["defaultTestUrl"],seq,m_Vars["defaultUserAgent"]))

2 msg1 = s.recv(m_Vars["bufLen"])

3 print msg1

4、提醒服务器建立会话,并确定传输模式

向服务器发送SETUP请求,通知服务器产生session,并和服务器确定传输模式等。

1 s.send(genmsg_SETUP(m_Vars["defaultTestUrl"] + "/trackID=3",seq,m_Vars["defaultUserAgent"]))

2 msg1 = s.recv(m_Vars["bufLen"])

3 print msg1

4 seq = seq + 1

5

6 sessionId = decodeMsg(msg1)['Session']

7

8 s.send(genmsg_SETUP2(m_Vars["defaultTestUrl"] + "/trackID=4",seq,m_Vars["defaultUserAgent"],sessionId))

9 msg1 = s.recv(m_Vars["bufLen"])

10 print msg1

5、客户端发起播放请求

向服务器发送PLAY请求,通知服务器发送RTP数据。

1 s.send(genmsg_PLAY(m_Vars["defaultTestUrl"] + "/",seq,m_Vars["defaultUserAgent"],sessionId))

2 msg1 = s.recv(m_Vars["bufLen"])

3 print msg1

客户端接收RTP数据

1 while True :

2 msgRcv = s.recv(m_Vars["bufLen"])

3 if 0 == len(msgRcv) : break

4 print len(msgRcv)

6、客户端发起关闭请求

客户端向服务器发送TREADOWN请求,通知服务器关闭。

1 s.send(genmsg_TEARDOWN(m_Vars["defaultTestUrl"] + "/",seq,m_Vars["defaultUserAgent"],sessionId))

2 msg1 = s.recv(m_Vars["bufLen"])

3 print msg1

四、运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值