首页 > 解决方案 > Java SIP 客户端,如 android 中存在的

问题描述

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

下面是安卓代码

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();

}

标签: javaservlets

解决方案


从您的问题中尚不清楚您如何设想它的工作方式。Servlet 是服务器端的,所以如果 SIP 消息是从服务器发起的,但我怀疑您真正想要的是发起一个 SIP 会话,然后是使用来自客户端的一些实时流协议建立的音频流。

SIP 有 Java API,Sun / Oracle 有一个标准 API,用于使用 SIP 和 IMS 与电信网络集成:https ://www.oracle.com/technetwork/java/introduction-jain-sip-090386.html 不确定如果它们仍然保持不变。

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

http://www.doubango.org/sipml5/

您的 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();
                    }
            );


推荐阅读