java-me – 通过SIP连接的J2ME音频流

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

我也看了here

如果

My server port is 6060
ip 111.111.111.1
id is myid password 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条索具的回复消息.也让我知道这里的境界. scc.setCredentials(用户名,密码,领域);

最佳答案 正如您在示例1中看到的
here – 您意识到当您向服务器创建新的Reqeust时,服务器期望身份验证的位置首先发送401.通过查看此信息,客户端可以搜索密码或询问用户.当服务器发送401响应代码时,它指定哪个安全域适用于给定的请求.这已经是您的代码中的内容:

realm = sh.getParameter("realm"); 

一旦失败,您需要在此处使用凭据再次发送()请求.我想setCredentials()函数只是在scc对象中设置这些参数,并且当再次调用send()时它们将被应用.

一些可能感兴趣的参考文献:http://www.developer.nokia.com/Community/Discussion/showthread.php?126760-SIP-registration-401-Unauthorized- ..
(这里的人有问题相关的端口号,我不知道这是否打扰你)

点赞