我正在创建一个具有 RTP 和 SIP 连接的J2ME实时流式音频播放器。我也是这些东西的新手。我想深入了解那些事情。如果有人知道一个好的工作示例代码演示音频播放器流式传输RTP (这意味着如何通过SIP向服务器发送REGISTER
消息以进行注册并发送{{1消息并获得响应和播放)。请高度赞赏地告诉我。
我也看了here
如果
我的服务器端口是6060
ip 111.111.111.1
id是myid密码123
我是否正确使用了代码?如果我错了,请让我纠正。
INVITE
我收到了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
答案 0 :(得分:2)
正如您在示例1中看到的here - 您意识到当您向服务器创建新的Reqeust时,服务器期望身份验证的位置首先发送401.通过查看此信息,客户端可以搜索密码或问用户。当服务器发送401响应代码时,它指定哪个安全域适用于给定的请求。这已经是您的代码所在:
realm = sh.getParameter("realm");
一旦失败,您需要使用凭据再次send()
请求。我想setCredentials()
函数只是在scc
对象中设置这些参数,并且会在再次调用send()
时应用它们。
可能感兴趣的一些参考文献:http://www.developer.nokia.com/Community/Discussion/showthread.php?126760-SIP-registration-401-Unauthorized- .. (这里的人有问题相关的端口号,我不确定这是否困扰你)
答案 1 :(得分:0)
许多功能和更多内容可用,并且可以找到广泛的答案here此外,诺基亚JSR180 API也有示例代码