java - 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();
}
解决方案
从您的问题中尚不清楚您如何设想它的工作方式。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();
}
);
推荐阅读
- flutter - 多行文本与行高垂直居中对齐
- flutter - 此表达式保持无效(back4app,解析,颤振)
- oracle - Oracle中如何将行数据显示为列
- google-bigquery - Google Merchant Center Transfer - 如何导入其他属性?
- ios - [swift5][ios] 如何通过单击按钮打开 DatePicker?
- java - 如何创建刷新游戏应用android显示的功能?
- javascript - 动态选项卡不显示内容 Javascript
- mkdocs - 命令:
错误类型错误:+ 的不支持的操作数类型:“int”和“str” - amazon-web-services - 将角色/用户添加到 AWS 服务目录组合
- elementor - 如何使用 Elementor 设置自定义查询过滤器以返回具有与设置条件匹配的帖子对象(多值)的自定义字段的帖子?