Проблема буферизации с Java-связью VLC

Я новичок в Socket Communication, так что я могу ошибаться, но, пожалуйста, совет или хотя бы дать направление!

Я внедряю RTSP-сервер в соответствии с http://www.csee.umbc.edu/~pmundur/courses/CMSC691C/lab5-kurose-ross.html, взглянув на аналогичный код с http://www.java2s.com/Open-Source/Android/UnTagged/mynpr/com/webeclubbin/mynpr/RTSPserver.java.htm

В данный момент я реализую ответ на запрос OPTIONS. Чтобы упростить первый подход, я решил жестко закодировать ответ в соответствии с примером журнала запросов / ответов RTSP, созданным для реального взаимодействия между vlc и gstreamer rtsp.

Итак, журнал, записанный с URL -адресом vlc -vvv, говорит:

Sending request: OPTIONS rtsp://localhost:8554/test RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2013.04.30)


Received 183 new bytes of response data.
Received a complete OPTIONS response:
RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Server: GStreamer RTSP server
Date: Tue, 10 Sep 2013 19:56:53 GMT


Sending request: DESCRIBE rtsp://localhost:8554/test RTSP/1.0
CSeq: 3
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2013.04.30)
Accept: application/sdp

т.е.

RTSP/1.0 200 OK
CSeq: 2
Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN
Server: GStreamer RTSP server
Date: Tue, 10 Sep 2013 19:56:53 GMT

длина составляет 183 байта

Я пишу в буфер прямо в соответствии с примером:

 try{
        System.out.println("S -> C");
        System.out.println("RTSP/1.0 200 OK");
        System.out.println("CSeq: "+RTSPSeqNb);
        //System.out.println("Session: "+RTSP_ID);
        if (responceType==OPTIONS) {System.out.println("Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN");};
        if (responceType==OPTIONS) {System.out.println("Server: GStreamer RTSP server");                                                        };
        if (responceType==OPTIONS) {System.out.println("Date: Tue, 10 Sep 2013 19:56:53 GMT");};
        RTSPBufferedWriter.write("RTSP/1.0 200 OK"+CRLF);
        RTSPBufferedWriter.write("CSeq: "+RTSPSeqNb+CRLF);
        //RTSPBufferedWriter.write("Session: "+RTSP_ID+CRLF);
        if (responceType==OPTIONS) {RTSPBufferedWriter.write("Public: OPTIONS, DESCRIBE, GET_PARAMETER, PAUSE, PLAY, SETUP, SET_PARAMETER, TEARDOWN"+CRLF);};
        if (responceType==OPTIONS) {RTSPBufferedWriter.write("Server: GStreamer RTSP server"+CRLF);                                                        };
        if (responceType==OPTIONS) {RTSPBufferedWriter.write("Date: Tue, 10 Sep 2013 19:56:53 GMT"+CRLF);            };
        RTSPBufferedWriter.write("Session: "+RTSP_ID+"\r"+CRLF);
        RTSPBufferedWriter.flush();

        //RTSPBufferedWriter.newLine();
        System.out.println("RTSP Server - Sent response to Client.");

    }
    catch(IOException ex)
    {
        System.out.println("Exception caught: "+ex.getStackTrace());
        //    System.exit(0);
    }

и журнал VLC говорит

Opening connection to 127.0.0.1, port 6666...
...remote connection opened
Sending request: OPTIONS rtsp://127.0.0.1:6666/autostream.mjpg RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.0.8 (LIVE555 Streaming Media v2013.04.30)


Received 193 new bytes of response data.
[0x7fd01c001178] live555 demux debug: connection timeout
[0x7fd01c001178] live555 demux error: Failed to connect with rtsp://127.0.0.1:6666/autostream.mjpg

Где CRLF это "\n". Прежде чем я попытался CRLF="\r\n" (и не +"\r"+ в последней строке) с

Received 198 new bytes of response data.

Так что там не так? Чего ждет VLC? Почему разделители по умолчанию из примера не работают для него?

1 ответ

Решение

Похоже, я всегда нахожу ответы на свои вопросы после публикации их в stackru...

DOUBLE CRLF должен стоять после последнего заголовка для обычного протокола RTSP, а не настраиваемого, используемого в примере).

Другие вопросы по тегам