使用RTSP包装现有RTP流

时间:2015-01-09 10:38:28

标签: c# .net ffmpeg rtsp rtp

我有一个来自ffmpeg的RTP组播流,要求用户使用外部SDP文件,因为这有时会成为我在考虑使用RTSP包装流的问题。

我有一个应用程序已经对RTP流进行了一些管理,因此将RTSP包装器放在其中也很有用,尽管我不希望包装器除了提供SDP信息之外还做任何事情。现在我说我正确地提供了SDP信息(否则它被卡在那个请求中),但是我没有得到任何PLAY命令,播放器在SETUP请求后被卡住了,所以我想我的回答是错误的,但在测试了Transport标头的许多不同值之后,我无法获得超出这一点的任何内容。

这是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请求:

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,所以我试过那些那些等等。

1 个答案:

答案 0 :(得分:1)

仅仅是我的两分钱,但从逻辑的角度来看,用于多播RTSP流的PLAY命令没有任何意义,因为客户端一旦加入该组就会获得媒体。这样的组播流没有状态。

此时多播RTP流是否处于活动状态?也许VLC实际上在SETUP响应之后加入了该组,但没有数据传输给它?您还可以使用VLC错误日志查看正在进行的操作。

修改

以下是在VLC和IP摄像机之间具有多播流的示例RTSP会话:

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命令的HTTP头中 - 在内容中使用了错误的内容长度响应。确定问题解决后。