python实现客户端发送setup消息时遇见的问题

[复制链接]
查看11 | 回复1 | 2021-1-27 06:48:27 | 显示全部楼层 |阅读模式
使用python实现rtsp客户端的setup消息发送时返回状态码为503;现在不知如何解决,遂请求帮助。有偿+wx:ww1194609610(10rmb)
```
importsocket
fromurllib.parseimporturlparse
config_dict={'cseq':2,'user_agent':'LibVLC/3.0.2(LIVE555StreamingMediav2016.11.28)','timeout':3,'recvbite':4096,'res_status':'200OK','rtsp_status':'flase'
}
clientports=[60784,60785]
defoptions_get(url):'''options请求检测url:rtsp流地址return:options请求相应'''url=urlparse(url)host=url.netlochostname=url.hostnamepath=url.pathport=url.portstr_options='OPTIONSrtsp://'+str(host)+\path+'RTSP/1.0\r\n'str_options+='CSeq:'+str(config_dict['cseq'])+'\r\n'str_options+='User-Agent:'+config_dict['user_agent']+'\r\n'str_options+='\r\n'print(str_options)client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.settimeout(config_dict['timeout'])client.connect((hostname,port))client.send(str_options.encode())d=client.recv(config_dict['recvbite'])returnd
defdescribe_get(url):'''describe请求检测url:rtsp流地址return:describe请求相应'''url=urlparse(url)host=url.netlochostname=url.hostnamepath=url.pathport=url.portstr_describe='DESCRIBErtsp://'+str(host)+\path+'RTSP/1.0\r\n'str_describe+='CSeq:'+str(config_dict['cseq']+1)+'\r\n'str_describe+='User-Agent:'+config_dict['user_agent']+'\r\n'str_describe+='\r\n'client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.settimeout(config_dict['timeout'])client.connect((hostname,port))client.send(str_describe.encode())d=client.recv(config_dict['recvbite'])returnd
defsetup_get(url):'''setup请求检测url:rtsp流地址return:setup请求相应'''url=urlparse(url)host=url.netlochostname=url.hostnamepath=url.pathport=url.portstr_setup='SETUPrtsp://'+str(host)+path+'/'+'streamid=0'+'RTSP/1.0\r\n'str_setup+='CSeq:'+str(config_dict['cseq']+2)+'\r\n'str_setup+='User-Agent:'+config_dict['user_agent']+'\r\n'#config_dict['user_agent']str_setup+='Transport:RTP/AVP;unicast;client_port=61740-61741\r\n\r\n'str_setup+='\r\n'client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.settimeout(config_dict['timeout'])client.connect((hostname,port))client.send(str_setup.encode())d=client.recv(config_dict['recvbite'])returnd
defteardown_get(url):'''teardown请求检测url:rtsp流地址return:teardown请求相应'''url=urlparse(url)host=url.netlochostname=url.hostnamepath=url.pathport=url.portstr_teardown='TEARDOWNrtsp://'+str(host)+path+'RTSP/1.0\r\n'str_teardown+='CSeq:'+str(config_dict['cseq']+4)+'\r\n'str_teardown+='User-Agent:'+config_dict['user_agent']+'\r\n'str_teardown+='\r\n'print(str_teardown)client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)client.settimeout(config_dict['timeout'])client.connect((hostname,port))client.send(str_teardown.encode())d=client.recv(config_dict['recvbite'])returnd
defsend_main(url):try:str_options=str(options_get(url))print(str_options)ifconfig_dict['res_status']instr_options:str_des=str(describe_get(url))print(str_des)ifconfig_dict['res_status']instr_des:str_setup=str(setup_get(url))str_teardown=str(teardown_get(url))print(str_setup)print(str_teardown)ifconfig_dict['res_status']instr_teardown:config_dict['rtsp_status']='true'returnTrueexceptException:returnFalseelse:returnFalse
print(send_main('rtsp://192.168.10.214:554/live/av0'))
```
上方为我的代码。
b'RTSP/1.0503ServiceUnavailable\r\nCSeq:4\r\nDate:Thu,01Jan197007:11:16GMT\r\n\r\n'此段消息为setup请求的返回信息,我看过rtsp的相关文档,说describe请求返回的sdp信息,客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP)。这个我没搞懂,也不知道如何写,这里进行请教一下。
下面是我的一次正常的rtsp交互信息。
```
OPTIONSrtsp://192.168.10.214:554/live/av0RTSP/1.0
CSeq:2
User-Agent:LibVLC/3.0.5(LIVE555StreamingMediav2016.11.28)
RTSP/1.0200OK
CSeq:2
Public:OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE
DESCRIBErtsp://192.168.10.214:554/live/av0RTSP/1.0
CSeq:3
User-Agent:LibVLC/3.0.5(LIVE555StreamingMediav2016.11.28)
Accept:application/sdp
RTSP/1.0200OK
CSeq:3
Date:Thu,01Jan197007:05:17GMT
Content-Base:rtsp://192.168.10.214:554/live/av0/
Content-Type:application/sdp
Content-Length:315
v=0
o=-00INIP4127.0.0.1
s=NoTitle
c=INIP40.0.0.0
t=00
a=tool:libavformat55.12.100
m=video0RTP/AVP96
a=rtpmap:96H264/90000
a=fmtp:96packetization-mode=1;sprop-parameter-sets=Z2QAKq2EAQwgCGEAQwgCGEAQwgCEK1A8ARPyzcBAQFAAAAMAEAAAAwPIQA==,aO48sA==;profile-level-id=64002A
a=control:streamid=0
SETUPrtsp://192.168.10.214:554/live/av0/streamid=0RTSP/1.0
CSeq:4
User-Agent:LibVLC/3.0.5(LIVE555StreamingMediav2016.11.28)
Transport:RTP/AVP;unicast;client_port=61740-61741
RTSP/1.0200OK
CSeq:4
Date:Thu,01Jan197007:05:17GMT
Session:093634014dba841b
Transport:RTP/AVP/UDP;unicast;client_port=61740-61741;server_port=20006-20007
PLAYrtsp://192.168.10.214:554/live/av0/RTSP/1.0
CSeq:5
User-Agent:LibVLC/3.0.5(LIVE555StreamingMediav2016.11.28)
Session:093634014dba841b
Range:npt=0.000-
RTSP/1.0200OK
CSeq:5
Date:Thu,01Jan197007:05:17GMT
Session:093634014dba841b
TEARDOWNrtsp://192.168.10.214:554/live/av0/RTSP/1.0
CSeq:6
User-Agent:LibVLC/3.0.5(LIVE555StreamingMediav2016.11.28)
Session:093634014dba841b
RTSP/1.0200OK
CSeq:6
Date:Thu,01Jan197007:05:21GMT
Session:093634014dba841b
```
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:27 | 显示全部楼层
rtsp是做什么的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行