Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java me 通过SIP连接的J2ME音频流_Java Me_Audio Streaming_Sip_Rtp_Sdp - Fatal编程技术网

Java me 通过SIP连接的J2ME音频流

Java me 通过SIP连接的J2ME音频流,java-me,audio-streaming,sip,rtp,sdp,Java Me,Audio Streaming,Sip,Rtp,Sdp,我正在创建一个J2ME实时流媒体音频播放器,带有RTP和SIP连接。我对这些东西也是新手。我想深入研究这些事情。如果任何人都知道一个很好的工作示例代码,该代码演示了使用RTP的音频播放器流(这意味着如何通过SIP向服务器发送REGISTER消息以获得注册,并发送INVITE消息并获得响应和播放)。请让我知道,非常感谢 我也看了 如果 我的服务器端口是6060 ip 111.111.111.1 id是myid密码123 我是否正确使用了代码?如果我错了,请让我改正 public void doRe

我正在创建一个J2ME实时流媒体音频播放器,带有RTPSIP连接。我对这些东西也是新手。我想深入研究这些事情。如果任何人都知道一个很好的工作示例代码,该代码演示了使用RTP的音频播放器流(这意味着如何通过SIP向服务器发送
REGISTER
消息以获得注册,并发送
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索具
。同时让我知道这里的领域是什么<代码>scc.setCredentials(用户名、密码、领域)

如您在示例1中所看到的—您意识到,当您向服务器发出新请求时,服务器将首先发送401。通过看到这一点,客户端可以搜索密码或询问用户。当服务器发送401响应代码时,它指定哪个安全域适用于给定的请求。这已经是代码中的内容:

realm = sh.getParameter("realm"); 
一旦失败,您需要在此处使用凭据再次发送请求。我猜
setCredentials()
函数只是在
scc
对象内设置这些参数,当再次调用
send()
时,它们将被应用

可能感兴趣的一些参考资料:。。
(这里有人遇到了与端口号相关的问题,我不确定这是否会困扰您)

有很多功能和更多功能,可以找到广泛的答案,诺基亚JSR180 API也有示例代码

仅供参考: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描述的答案,并具有SIP提供/应答交换中的功能。非常感谢Ralf。我有一个主意。如果我没有阻碍的话你,你能让我知道更多关于SDP和RTSP如何与示例函数一起工作的信息吗?(从你的解释中我对SIP和RTSP有了清晰的了解,再次感谢你)非常感谢迪潘。我已经提到了你的第一个链接。我也看了你的第二个链接。