4

我正在使用RTP并通过SIP连接创建 J2ME 实时流音频播放器。我对这些东西也很陌生。我想深入看看那些东西。如果有人知道一个很好的工作示例代码,演示了使用 RTP 流式传输的音频播放器(这意味着如何REGISTER通过 SIP 向服务器发送消息以进行注册并发送INVITE消息并获得响应和播放)。请告诉我,非常感谢。

我也看过这里

如果

我的服务器端口是 6060
ip
111.111.111.1 id 是 myid 密码 123

我是否正确使用了代码?如果我错了,请纠正我。

public void doRegister(String username, String password, String realm) {

  SipClientConnection scc = null;  
  SipConnectionNotifier scn = null;  
  String contact = null;    
  try {   
      scn = (SipConnectionNotifier) Connector.open("sip:5080");   
      contact = new String("sip:myid:123@"+scn.getLocalAddress()+":"+scn.getLocalPort());   
      scc = (SipClientConnection) Connector.open("sip:111.111.111.1+"transport=tcp")  ; 
      scc.initRequest("REGISTER", scn);  
      scc.setHeader("From", "sip:myid:123@"+scn.getLocalAddress()+":5080");  
      scc.setHeader("To", "sip:myid:123@111.111.111.1");  
      scc.setHeader("Contact", contact);  
      scc.send();  
      boolean handled = false;  
      int scode = 0;        
      while(!handled) {
          SipHeader sh; 
          scc.receive(30000);
          scode = scc.getStatusCode();
          switch(scode){  
              case 401:
                  sh = new SipHeader("WWW-Authenticate",
                     scc.getHeader("WWW-Authenticate"));
                  realm = sh.getParameter("realm");                
                  scc.setCredentials(username, password, realm);
                  break;

              case 407:
                  sh = new SipHeader("Proxy-Authenticate", 
                  scc.getHeader("Proxy-Authenticate"));
                  realm = sh.getParameter("realm");                
                  scc.setCredentials(username, password, realm);
                  break;

              case 200: 
                  handled = true;
                  break;
              default:  
                handled = true;
          }  
      }
      scc.close();
  } catch(Exception ex) {
      // handle Exceptions
  }
 }

我收到一条回复180 Rigging消息。也让我知道 这里的领域是什么。 scc.setCredentials(username, password, realm);

4

2 回答 2

2

正如您在示例 1 中看到- 您意识到,当您向服务器发出新的请求时,服务器期望身份验证首先发送 401。通过看到这个,客户端可以搜索密码或询问用户。当服务器发送 401 响应代码时,它指定哪个安全域适用于给定请求。这已经是您在代码中得到的:

realm = sh.getParameter("realm"); 

一旦失败,您需要send()在此处使用凭据再次请求。我猜这个setCredentials()函数只是在scc对象内部设置这些参数,它们将在send()再次调用时应用。

一些可能感兴趣的参考资料:http: //www.developer.nokia.com/Community/Discussion/showthread.php? 126760-SIP-registration-401-Unauthorized- .. (这里人们遇到了与端口号相关的问题,其中我不确定这是否困扰您)

于 2011-12-28T15:17:19.243 回答
0

许多功能和更多的东西可用,广泛的答案可以在这里找到诺基亚 JSR180 API 也有示例代码

于 2012-01-01T16:32:27.890 回答