2013-09-10 70 views
0

我是Socket通信的新手,所以我可能是錯的,但請指教或至少給出方向!與java溝通vlc的緩衝問題

我根據http://www.csee.umbc.edu/~pmundur/courses/CMSC691C/lab5-kurose-ross.html#appendix實現RTSP服務器考慮看看到類似的代碼從http://www.java2s.com/Open-Source/Android/UnTagged/mynpr/com/webeclubbin/mynpr/RTSPserver.java.htm

在我實施性反應的OPTIONS請求的時刻。爲了使第一種方法更容易,我決定根據針對vlc和gstreamer rtsp之間的某些實際通信所做的示例RTSP請求/響應日誌對答案進行硬編碼。

所以,記錄VLC URL日誌-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正在等待?爲什麼示例中的默認delimeters不起作用?

回答

0

我看起來像我總能找到答案我的問題後,我把它們發佈到計算器...

對於通常RTSP協議9not示例中使用自定義的一個最後一個頭之後

雙CRLF應該站) 。