2012-07-31 40 views
4

我可以使用預先製作的軟件連接到我的Rtsp服務器,但使用以下代碼段我無法從服務器獲得答案。即使連接成功,服務器也不會回答我。無法從RTSP服務器獲得任何答案

public class RtspClient { 

private Socket server; 
private InputStream is = null; 
private OutputStream os = null; 
private int seqid = 1; 
private String request, resp; 
private byte[] buffer = new byte[4096]; 
private int len = 0; 


public RtspClient(String rIp, int rPort) { 

    try { 
     //INIT 
     server = new Socket(rIp, rPort); 
     is = server.getInputStream(); 
     os = server.getOutputStream(); 
     System.out.println("Connected to "+ rIp + ":" + rPort); 

     //COMMUNICATION 
     Boolean isTalking = true; 
     while(isTalking == true) { 

      //sending request 
      String request = new String("OPTIONS * RTSP/1.0\r\nCSeq: 0\r\n"); 
      os.write(request.getBytes(), 0, request.length()); 
      System.out.println("Sent: "+ request); 
      ///////////////// 

      //getting response 
      len = is.read(buffer, 0, buffer.length); 

      if(len > 0) { 
       resp= new String(buffer, 0, len); 
      } 
      else { 
       resp = "empty"; 
      } 

      System.out.println("Received: "+ resp); 
      ////////////////// 
     } 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

這裏是Wireshark的截圖:http://imageplay.net/img/tya22277766/Untitled.png

來自服務器的答案應該是:

RTSP/1.0 200 OK 
Supported: play.basic, con.persistent 
Cseq: 0 
Server: Wowza Media Server x.x.x.x buildxxx 
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD, GET_PARAMETER 
Cache-Control: no-cache 

謝謝!

+0

RFC做不要求'CSeq'不爲零,只是爲了呈現和遞增。但是在樣本上你不會發現它爲零。我認爲這可能是你的代碼的問題。 – 2012-08-01 17:12:55

+0

我發現了我的問題的答案,但是關於CSeq,我同意你的觀點,即使服務器不在意CSeq從零開始! – 2012-08-02 18:05:46

回答

4

好吧,使其短,要求應該是:

OPTIONS * RTSP/1.0\r\nCSeq: 0\r\n\r\n 

,而不是

OPTIONS * RTSP/1.0\r\nCSeq: 0\r\n\ 

只需在末尾添加一個新行和服務器回答

+0

這工作,但任何人都可以請我提供一些細節,爲什麼RTSP請求以這種方式工作? – skygeek 2017-07-27 13:06:09

相關問題