android中存在类似Java SIP的客户端

android中存在类似Java SIP的客户端,java,servlets,Java,Servlets,我的要求是使用Javaservlet进行SIP注册,然后进行音频调用。在android中,我找到了一个简单的方法,但是我不能在java中使用相同的android代码,因为在android.net包中存在SIP管理器类。我应该使用什么让我的用户在Javaservlet中进行SIP注册 下面是android代码 if (sipManager == null) { sipManager = SipManager.newInstance(this); } SipProfile.Builder buil

我的要求是使用Javaservlet进行SIP注册,然后进行音频调用。在android中,我找到了一个简单的方法,但是我不能在java中使用相同的android代码,因为在android.net包中存在SIP管理器类。我应该使用什么让我的用户在Javaservlet中进行SIP注册

下面是android代码

if (sipManager == null) {
 sipManager = SipManager.newInstance(this);
}
SipProfile.Builder builder = null;
try {
 builder = new SipProfile.Builder("7001", "XXX.XXX.X.XXX");
 builder.setPassword("XXX");
 sipProfile = builder.build();
 Intent i = new Intent();
 i.setAction("android.SipDemo.INCOMING_CALL");
 PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
 sipManager.open(sipProfile, pi, null);

 sipManager.setRegistrationListener(sipProfile.getUriString(), new SipRegistrationListener() {
  public void onRegistering(String localProfileUri) {

  }
  public void onRegistrationDone(String localProfileUri, long expiryTime) {

  }
  public void onRegistrationFailed(String localProfileUri, int errorCode,
   String errorMessage) {


  }
 });
} catch (ParseException pe) {
 pe.printStackTrace();

} catch (SipException se) {
 se.printStackTrace();

}

从你的问题中不清楚你如何看待这一点。Servlet是服务器端的,因此如果SIP消息是从服务器启动的,但我怀疑您真正想要的是启动SIP会话,然后是使用来自客户端的实时流协议建立的音频流

SIP有Java API,Sun/Oracle有一个标准API,用于使用SIP和IMS与电信网络集成: 不确定它们是否仍在维护中

然而,我怀疑这不是你真正需要的。也许您应该看看这个基于客户端的WebRTC和SIP客户端:

您的JSP将服务于此Javascript,它允许用户启动SIP会话并建立音频调用

从他们的文档来看,这似乎很简单:

  SIPml.init(
     function(e){
         var stack =  new SIPml.Stack({realm: 'example.org', impi: 'bob', impu: 'sip:bob@example.org', password: 'mysecret',
                            events_listener: { events: 'started', listener: function(e){
                                        var callSession = stack.newSession('call-audiovideo', {
                                                video_local: document.getElementById('video-local'),
                                                video_remote: document.getElementById('video-remote'),
                                                audio_remote: document.getElementById('audio-remote')
                                            });
                                        callSession.call('alice');
                                    } 
                                }
                        });
                        stack.start();
                    }
            );


使用Javaservlet是什么意思?servlet是服务器端的,客户端将如何从服务器进行音频调用?我有一个jsp页面,可以对servletsYes进行ajax调用,但是您认为这实际上是如何工作的呢?如果servlet发送信号从服务器发起呼叫,那又怎么样?首先是SIP注册,由类似jsp的用户填写他们的客户端详细信息,我们必须进行SIP注册,一旦完成,我们就可以进行SIP VOIP。毕竟,它是一种基于SIP的语音通话通信。我也在发布有问题的android代码。android是基于客户端的。它在客户机的设备上运行,因此非常简单。servlet正在另一个网络上的服务器上运行。SIPml演示正在抛出一个错误SIPml api.js?svn=252:1 WebSocket连接到“ws://ns313841.ovh.net:14060/”失败:连接建立错误:net::ERR_connection_拒绝。它是可用的吗?我无法在演示页面中向它注册SIP客户端。我不知道它的稳定性。。。您可以随意寻找其他SIP客户端,但您需要的是基于浏览器的解决方案,即HTML5/Javascript解决方案。您确定可以访问主机和端口吗?这个错误似乎是不言自明的,主机在该端口上无法访问(或者端口号错误,或者某些防火墙正在停止连接等)。拒绝连接是一条套接字错误消息,因此与库的稳定性无关。这不是我的服务器ip和端口。我认为它们是错误的或无法访问的。我尝试此测试主机是否在端口14060上侦听:
telnet ns313841.ovh.net 14060
,我得到了连接到ns313841.ovh.net的
。无法在端口14060上打开到主机的连接:连接失败
。您也可以在PC上尝试验证。ns313841.ovh.net 14060不是我的服务器,它在那里。我需要做一些服务器端配置吗?我只需要一个客户,这样就可以注册并打电话了。出于测试目的,我有我的sip域名、用户名和密码,我正在输入这些信息,这些信息将得到验证,但不会对我的另一个帐户进行语音呼叫