RTSP在没有响应的情况下描述标头

时间:2012-09-09 11:57:52

标签: java android header rtsp sdp

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

Receiving video stream from an IP camera on android

Playing RTSP stream in VLC player

Android local RTSP server (spoof), PVPlayer closes TCP socket after DESCRIBE reply sent

和其他类似的东西。我当然也阅读了很多pdf和RFC。

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

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标头?

1 个答案:

答案 0 :(得分:0)

你错过了RtspResponse中的CSeq标题,因此它无效。

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

查看我的服务器@ http://net7mma.codeplex.com/以查看现有实施的代码,尽管它位于C#中,您应该能够获得所需的内容。