我有一个来自ffmpeg的RTP多播流,它要求用户使用外部SDP文件,因为这有时会成为我想用RTSP包装流的一个问题。
我有一个已经对RTP流进行了一些管理的应用程序,因此在RTP流中包含RTSP包装也是有用的,尽管我不希望包装器除了传递SDP信息之外做任何事情。现在我想说我正确地传递了SDP信息(否则它被卡在那个请求中),但是我没有收到任何PLAY命令,播放器在安装请求之后就被卡住了,所以我想我的回答是错误的,但是在测试了传输头的许多不同值之后,我无法得到任何超出这个点的东西。
这是SDP:
v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 236.0.0.1 t=0 0 a=tool:libavformat 56.7.102 m=video 2000 RTP/AVP 96 b=AS:500 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1
这是来自VLC的示例设置请求:
SETUP rtsp://127.0.0.1:34343/live.sdp/ RTSP/1.0 CSeq: 4 User-Agent: LibVLC/2.1.5 (LIVE555 Streaming Media v2014.05.27) Transport: RTP/AVP;multicast;client_port=2000-2001
我试过的许多回答之一是:
RTSP/1.0 200 OK CSeq: 4 Transport: RTP/AVP;multicast;client_port=2000-2001;source=236.0.0.1;port=2000-2001 Session: 0456804596
我尝试使用目的而不是源,server_port代替端口,虽然RTP多播端口是2000年,但我看到流也在使用其他端口,比如57927和57928,所以我也尝试过这些端口,等等。
发布于 2015-01-09 13:02:49
这仅仅是我的两分钱,但是从逻辑的角度来看,多播RTSP流的PLAY命令没有任何意义,因为客户机一加入组就会得到媒体。多播流本身不具有状态。
此时多播RTP流是否处于活动状态?也许VLC实际上是在SETUP响应之后加入这个组,但是没有数据被传输给它?此外,您还可以使用VLC错误日志来查看发生了什么。
编辑
下面是一个RTSP会话示例,它在VLC和IP摄像机之间有一个多播流:
DESCRIBE rtsp://192.168.3.142/stream/profile1=m RTSP/1.0
CSeq: 5
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Accept: application/sdp
RTSP/1.0 200 OK
CSeq: 5
Connection: Keep-alive
Date: Sat, 10 Jan 2015 16:54:28 GMT
Content-Type: application/sdp
Content-Length: 352
v=0
o=- 0 0 IN IP4 192.168.3.142
s=rtsp://192.168.3.142/stream/profile1
t=0 0
a=control:*
m=video 2014 RTP/AVP 99
a=rtpmap:99 H264/90000
a=fmtp:99 sprop-parameter-sets=Z0LgKdoB4Aiflm4CAgwE,aM48gA==;packetization-mode=1;profile-level-id=42e029
a=control:rtsp://192.168.3.142/stream/profile1/AVCESEnc
a=framerate:30.0
c=IN IP4 239.100.10.10/1
SETUP rtsp://192.168.3.142/stream/profile1/AVCESEnc RTSP/1.0
CSeq: 6
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP;multicast;client_port=2014-2015
RTSP/1.0 200 OK
CSeq: 6
Connection: Keep-alive
Date: Sat, 10 Jan 2015 16:54:28 GMT
Session: 241934337;timeout=60
Transport: RTP/AVP;multicast;destination=239.100.10.10;port=2014-2015;ttl=1
PLAY rtsp://192.168.3.142/stream/profile1=m RTSP/1.0
CSeq: 7
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Session: 241934337
Range: npt=0.000-
RTSP/1.0 200 OK
CSeq: 7
Connection: Keep-alive
Date: Sat, 10 Jan 2015 16:54:28 GMT
Session: 241934337
RTP-Info: url=rtsp://192.168.3.142/stream/profile1/AVCESEnc;seq=14604;rtptime=3766807430
GET_PARAMETER rtsp://192.168.3.142/stream/profile1=m RTSP/1.0
CSeq: 8
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Session: 241934337
RTSP/1.0 200 OK
CSeq: 8
Connection: Keep-alive
Date: Sat, 10 Jan 2015 16:54:29 GMT
Session: 241934337
TEARDOWN rtsp://192.168.3.142/stream/profile1=m RTSP/1.0
CSeq: 9
User-Agent: LibVLC/2.0.1 (LIVE555 Streaming Media v2011.12.23)
Session: 241934337
RTSP/1.0 200 OK
CSeq: 9
Connection: Close
Date: Sat, 10 Jan 2015 16:54:31 GMT
Session: 241934337编辑2
从注释中可以看到更低的位置,Neverbirth指出问题不在SETUP命令中,而是在DESCRIBE命令的headers中--在响应中使用了错误的内容长度。在解决了这个问题之后。
https://stackoverflow.com/questions/27858716
复制相似问题