RTSP описывает заголовок без ответа

Я пишу сервер потоковой передачи RTSP, и мне нужна помощь. Я думаю, что я пробовал все и читал темы:

Получение видеопотока с IP-камеры на Android

Воспроизведение потока RTSP в проигрывателе VLC

Локальный RTSP-сервер Android (подделка), PVPlayer закрывает сокет TCP после отправки ответа DESCRIBE

и другие подобные им. Я также, конечно, прочитал много 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 (клиент на моем ПК выдает необработанное исключение и падает), SMPlayer читает заголовок и показывает его в журнале, но не отвечает.

Иногда я получаю в журнале SMPlayer сообщение об ошибке в SDP, но я думаю, что причиной этой ошибки является слишком долгая отладка.

Мой вопрос: что я сделал не так? Почему нет заголовка SETUP от клиента?


person adrian    schedule 09.09.2012    source источник


Ответы (1)


У вас отсутствует заголовок CSeq в RtspResponse, поэтому он недействителен.

Также в вашем примере вы возвращаете SDP, поэтому вам нужен заголовок Content-Length!

Посетите мой сервер @ http://net7mma.codeplex.com/, чтобы увидеть код существующей реализации, хотя это на С#, вы сможете получить то, что вам нужно.

person Jay    schedule 11.12.2012