2012-07-31 93 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