1

我正在编写 RTSP 流媒体服务器,我需要一些帮助。我想我已经尝试了一切并阅读了主题:

从 android 上的 IP 摄像头接收视频流

在 VLC 播放器中播放 RTSP 流

Android 本地 RTSP 服务器(欺骗),PVPlayer 在发送 DESCRIBE 回复后关闭 TCP 套接字

和其他与他们类似的。当然,我也阅读了许多 pdf 和 RFC。

我的故事:我写了 rtsp 服务器,当我向 DESCRIBE 标头发送响应时出现问题:

responseHeader.append(HeaderStates.OK);
responseHeader.append(CRLF);
responseHeader.append(CSeq);
responseHeader.append(CRLF);
responseHeader.append("session: ");
responseHeader.append(Long.valueOf(sessionID));
responseHeader.append(CRLF);
Date date = new Date();
responseHeader.append("Date: ");
responseHeader.append(date.toGMTString());
responseHeader.append(CRLF);
responseHeader.append("Content-Type: application/sdp");
responseHeader.append(CRLF);
responseHeader.append("Content-Base: ");
responseHeader.append(localAddress.getHostAddress());
responseHeader.append(":");
responseHeader.append(Integer.valueOf(localPort));
responseHeader.append(CRLF);
responseHeader.append(CRLF);
responseHeader.append("v=0");
responseHeader.append(CRLF);
responseHeader.append("o=- ");
responseHeader.append(date.getTime());
responseHeader.append(" ");
responseHeader.append(date.getTime());
responseHeader.append(" IN IP4 ");
responseHeader.append(localAddress.getHostAddress());
responseHeader.append(CRLF);
responseHeader.append("a=control:rtsp://192.168.1.143:55555");
responseHeader.append(CRLF);
responseHeader.append("s=RTSPSession");
responseHeader.append(CRLF);
responseHeader.append("m=video 55555 RTP/AVP 26");
responseHeader.append(CRLF);
responseHeader.append("a=rtpmap:26 JPEG/90000");
responseHeader.append(CRLF);
responseHeader.append("a=mimetype:video/JPEG");
responseHeader.append(CRLF);
//responseHeader.append("a=control:trackID=1");
responseHeader.append(CRLF);
responseHeader.append(CRLF);

其中 HeaderStates.OK 是“200 OK”,SessionID 是 System.currentTimeMillis(),CRLF = “\r\n”,responseHeader 以“RTSP/1.0”开头

然后 VLC(我的 PC 上的客户端抛出未处理的异常并崩溃),SMPlayer 读取标题并将其显示在日志中但不响应。

有时我会在 SMPlayer 日志中显示 SDP 中的错误,但我认为此错误的原因是调试时间过长。

我的问题:我做错了什么?为什么客户端没有 SETUP 标头?

4

1 回答 1

0

您缺少CSeqRtspResponse 中的标头,因此它是无效的。

同样在您的示例中,您正在返回一个 SDP,因此您需要Content-Length标题!

查看我的服务器@http://net7mma.codeplex.com/以查看现有实现的代码,虽然它是在 C# 中,但您应该能够获得您需要的东西。

于 2012-12-11T23:36:00.080 回答