RTSP:无法获取会话标识符
RTSP: cannot get session identifier
我正在尝试使用 python 脚本控制网络摄像头(我可以使用 VLC 或 mplayer 查看流)。
收到OPTIONS和DESCRIBE信息后,我尝试的每一个SETUP都报错:
SETUP rtsp://192.168.0.41:554/xxxxxx RTSP/1.0
CSeq: 3
Transport: RTP/AVP/UDP;unicast;client_port=3056-3057
RTSP/1.0 400 Bad Request
Allow: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER,USER_CMD_SET
所以我从未收到会话标识。
也许问题出在运输线上,但我认为这是因为我不知道用什么代替 xxxxxxx(我尝试并搜索了很多但没有结果)
这里是 OPTIONS 和 DESCRIBE 的输出:
OPTIONS rtsp://192.168.0.41:554 RTSP/1.0
CSeq: 1
RTSP/1.0 200 OK
CSeq: 1
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER,USER_CMD_SET
---------------------------------
DESCRIBE rtsp://192.168.0.41:554/onvif2 RTSP/1.0
CSeq: 2
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Length: 360
v=0
o=- 1421069297525233 1 IN IP4 192.168.0.41
s=H.264 Video, RtspServer_0.0.0.2
t=0 0
a=tool:RtspServer_0.0.0.2
a=type:broadcast
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:track1
* 代表什么?
什么是"track1"?
(注意:如果我检查onvif1,那是cam发送的另一个流,结果是一样的,但是有track2,这意味着服务器应答应该是合适的)
来自 RTSP rfc 的示例 https://www.ietf.org/rfc/rfc2326.txt:
S->C RTSP/1.0 200 OK
CSeq: 1
Content-base: rtsp://foo.com/test.wav/
Content-type: application/sdp
Content-length: 48
v=0
o=- 872653257 872653257 IN IP4 172.16.2.187
s=mu-law wave file
i=audio test
t=0 0
m=audio 0 RTP/AVP 0
a=control:streamid=0
C->S SETUP rtsp://foo.com/test.wav/streamid=0 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;
client_port=6970-6971;mode=play
CSeq: 2
您只需将其附加到您的 SETUP 请求的 URL。
我不太确定 a=control:* 是什么意思
最后我发现了问题:在最后的 python 代码行中缺少 \r\n!
错误:
Transport: RTP/AVP/UDP;unicast;client_port=52318-52319
正确:
Transport: RTP/AVP/UDP;unicast;client_port=52318-52319\r\n
现在可以了。
我正在尝试使用 python 脚本控制网络摄像头(我可以使用 VLC 或 mplayer 查看流)。
收到OPTIONS和DESCRIBE信息后,我尝试的每一个SETUP都报错:
SETUP rtsp://192.168.0.41:554/xxxxxx RTSP/1.0
CSeq: 3
Transport: RTP/AVP/UDP;unicast;client_port=3056-3057
RTSP/1.0 400 Bad Request
Allow: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER,USER_CMD_SET
所以我从未收到会话标识。
也许问题出在运输线上,但我认为这是因为我不知道用什么代替 xxxxxxx(我尝试并搜索了很多但没有结果)
这里是 OPTIONS 和 DESCRIBE 的输出:
OPTIONS rtsp://192.168.0.41:554 RTSP/1.0
CSeq: 1
RTSP/1.0 200 OK
CSeq: 1
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER,USER_CMD_SET
---------------------------------
DESCRIBE rtsp://192.168.0.41:554/onvif2 RTSP/1.0
CSeq: 2
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Length: 360
v=0
o=- 1421069297525233 1 IN IP4 192.168.0.41
s=H.264 Video, RtspServer_0.0.0.2
t=0 0
a=tool:RtspServer_0.0.0.2
a=type:broadcast
a=control:*
a=range:npt=0-
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42001F;sprop-parameter-sets=Z0IAH5WoFAFuQA==,aM48gA==
a=control:track1
* 代表什么?
什么是"track1"?
(注意:如果我检查onvif1,那是cam发送的另一个流,结果是一样的,但是有track2,这意味着服务器应答应该是合适的)
来自 RTSP rfc 的示例 https://www.ietf.org/rfc/rfc2326.txt:
S->C RTSP/1.0 200 OK
CSeq: 1
Content-base: rtsp://foo.com/test.wav/
Content-type: application/sdp
Content-length: 48
v=0
o=- 872653257 872653257 IN IP4 172.16.2.187
s=mu-law wave file
i=audio test
t=0 0
m=audio 0 RTP/AVP 0
a=control:streamid=0
C->S SETUP rtsp://foo.com/test.wav/streamid=0 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;
client_port=6970-6971;mode=play
CSeq: 2
您只需将其附加到您的 SETUP 请求的 URL。
我不太确定 a=control:* 是什么意思
最后我发现了问题:在最后的 python 代码行中缺少 \r\n!
错误:
Transport: RTP/AVP/UDP;unicast;client_port=52318-52319
正确:
Transport: RTP/AVP/UDP;unicast;client_port=52318-52319\r\n
现在可以了。