通过 SIP 连接的 J2ME 音频流
Posted
技术标签:
【中文标题】通过 SIP 连接的 J2ME 音频流【英文标题】:J2ME Audio Streaming through SIP Connection 【发布时间】:2012-01-27 05:25:42 【问题描述】:我正在创建一个带有 RTP 并通过 SIP 连接的 J2ME 实时流音频播放器。我对这些东西也很陌生。我想深入看看那些东西。如果有人知道一个很好的工作示例代码来演示 使用 RTP 进行音频播放器流式传输(这意味着如何通过 SIP 向服务器发送 REGISTER
消息以进行注册并发送 INVITE
消息和得到响应并播放)。请告诉我,非常感谢。
我也看了here
如果
我的服务器端口是 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
消息的回复。也让我知道这里的 realm 是什么。 scc.setCredentials(username, password, realm);
【问题讨论】:
仅供参考:SIP 和 RTSP 是两种不同的会话信令协议。 SDP 与发送请求无关:它以基于文本的格式描述媒体会话。 RTSP 和 SIP 可以使用 SDP 来建立会话。我建议阅读 IETF RFC 以更好地理解协议。 (RTP:RFC3550,SDP:RFC4566,RTSP:RFC2326,SIP:RFC3261) 谢谢拉尔夫。我对这些东西还是陌生的。我会看看你的建议。您能否让我知道一台服务器是否可以同时处理 SIP 和 RTSP,并发送响应。(这意味着如果服务器有音频文件,服务器可以根据请求发送 RTSP 或 SIP 中的音频文件吗?)。另一件事是,SDP 是否总是与 SIP 和 RTSP 一起描述会话/请求或响应内容? SIP 和 RTSP 在不同的端口上运行并且是完全不同的协议,我会说服务器不太可能同时支持两者,RTSP 通常用于基于文件的 VOD 媒体以及实时流媒体(它被描述为具有播放、停止、暂停功能的虚拟 VCR 遥控器),而 SIP 通常用于电话会议、会话场景。尽管存在其他标准化工作,但通常 SDP 是描述媒体会话的广泛使用的协议。 SDP 通常是 RTSP DESCRIBE 的答案,是 SIP 提议/答案交换中的特征。 非常感谢拉尔夫。我有个主意。如果我不妨碍你的话,你能否让我了解更多关于 SDP 和 RTSP 如何与示例函数一起工作的信息。(我有一个清晰的图片从您的解释中了解 SIP 和 RTSP,并再次感谢) 【参考方案1】:正如您在示例 1 中看到的 here - 您意识到,当您向服务器发出新的请求时,由于服务器期望进行身份验证,它首先发送 401。通过看到这一点,客户端可以搜索密码或询问用户。当服务器发送 401 响应代码时,它指定哪个 安全域 适用于给定请求。这已经是您的代码中的内容了:
realm = sh.getParameter("realm");
一旦失败,您需要在此处使用凭据再次send()
请求。我猜setCredentials()
函数只是在scc
对象内设置这些参数,当再次调用send()
时它们将被应用。
一些可能感兴趣的参考资料:http://www.developer.nokia.com/Community/Discussion/showthread.php?126760-SIP-registration-401-Unauthorized-.. (这里人们遇到了与端口号相关的问题,我不确定这是否困扰您)
【讨论】:
非常感谢Dipan。我已经参考了你的第一个链接。我也看了你的第二个链接。【参考方案2】:许多功能和更多东西可用,可以找到广泛的答案here 此外诺基亚 JSR180 API 也有示例代码
【讨论】:
以上是关于通过 SIP 连接的 J2ME 音频流的主要内容,如果未能解决你的问题,请参考以下文章