SIPml5单侧语音
下面是我的拨号代码。我可以使用以下代码成功注册和连接呼叫。但是,在连接呼叫后,只有另一端(非sipml5)可以听到语音。但是,sipml5端听不到任何声音。但是,我可以使用sipml5网站(sipml5.org/call.htm)上的sipml5客户端连接并传递语音。我一定是做错了什么,但我想不出是什么SIPml5单侧语音,sip,webrtc,sipml,Sip,Webrtc,Sipml,下面是我的拨号代码。我可以使用以下代码成功注册和连接呼叫。但是,在连接呼叫后,只有另一端(非sipml5)可以听到语音。但是,sipml5端听不到任何声音。但是,我可以使用sipml5网站(sipml5.org/call.htm)上的sipml5客户端连接并传递语音。我一定是做错了什么,但我想不出是什么 <script src="api/SIPml-api.js" type="text/javascript"> </script> <script
<script src="api/SIPml-api.js" type="text/javascript"> </script>
<script type="text/javascript">
var readyCallback = function(e){
createSipStack(); // see next section
};
var errorCallback = function(e){
onsole.error('Failed to initialize the engine: ' + e.message);
}
SIPml.init(readyCallback, errorCallback);
var sipStack;
var callSession;
function eventsListener(e){
console.info('Change of status|Server response: '+e.type+':'+e.message+':'+e.
session+':'+e.description);
if(e.type == 'started'){
login();
}
else if(e.type == 'i_new_message'){ // incoming new SIP MESSAGE (SMS-like)
acceptMessage(e);
}
else if(e.type == 'i_new_call'){ // incoming audio/video call
if(confirm("Incomming Call Request! Do you accept?")){
acceptCall(e);
}else{
e.newSession.reject()
}
}
else if(e.type == 'connected'){
if(e.session == registerSession){
setStatus(e.type,'Registered...');
}else{
setStatus(e.type,e.description);
}
}
else if(e.type == 'i_ao_request' && e.description == 'Ringing' ){
document.getElementById('call').value = 'End Call';
setStatus(e.type,e.description);
}
else if(e.type == 'terminated' || e.type == 'terminating'){
if(e.session == registerSession){
setStatus('Unable to Register');
}else{
setStatus(e.type,e.description);
}
}
}
function createSipStack(){
sipStack = new SIPml.Stack({
realm: 'foo.bar.com',
impi: 'usertest',
impu: 'sip:usertest@foo.bar.com',
password: '1234',
display_name: 'alice',
websocket_proxy_url: 'ws://11.11.11.0:8080',
enable_rtcweb_breaker: false,
events_listener: { events: '*', listener: eventsListener },
sip_headers: [ // optional
{ name: 'User-Agent', value: 'IM-client/OMA1.0 sipML5-v1.0.0.0' },
{ name: 'Organization', value: 'SuperCops.us' }
]
}
);
}
sipStack.start();
function login(){
registerSession = sipStack.newSession('register', {
events_listener: { events: '*', listener: eventsListener } // optional: '*' means all events
});
registerSession.register();
}
function makeCall(){
var number = document.getElementById('number').value;
if(number == ''){
alert('No number entered');
}
else if(document.getElementById('call').value == 'End Call'){
callSession.hangup();
}else{
setStatus('Trying','Trying to call:'+numberFilter(number));
callSession = sipStack.newSession('call-audio',{
events_listener: { events: '*', listener: eventsListener }
});
callSession.call(numberFilter(number));
}
}
function acceptCall(event){
callSession = event.newSession;
/*('accept',{
events_listener: { events: '*', listener: eventsListener }
});*/
callSession.accept();
eventsListener(callSession);
setStatus('connected','In Call');
}
function setStatus(type,status){
document.getElementById('status').innerHTML = status;
if(type == 'terminated' || type == 'terminating'){
document.getElementById('call').value = 'Call';
}else if(status == 'Ringing' || status == 'Ringing' || status == 'In Call' || type == 'Trying'){
document.getElementById('call').value = 'End Call';
}
}
function numberFilter(number){
return number;
}
var readyCallback=函数(e){
createSipStack();//参见下一节
};
var errorCallback=函数(e){
onsole.error('未能初始化引擎:'+e.message);
}
SIPml.init(readyCallback,errorCallback);
var-sipStack;
var-callSession;
函数eventsListener(e){
console.info('状态更改|服务器响应:'+e.type+':'+e.message+':'+e。
会话+':'+e.description);
如果(e.type=='started'){
登录();
}
else if(e.type=='i_new_message'){//传入的新SIP消息(类似SMS)
接受信息(e);
}
else if(e.type=='i_new_call'){//传入音频/视频呼叫
如果(确认(“输入呼叫请求!您接受吗?”){
接受呼叫(e);
}否则{
e、 newSession.reject()
}
}
else如果(e.type=='connected'){
if(e.session==registerSession){
设置状态(例如,“已注册…”);
}否则{
设置状态(e.类型,e.描述);
}
}
else if(e.type=='i_ao_请求'&&e.description=='Ringing'){
document.getElementById('call')。value='End call';
设置状态(e.类型,e.描述);
}
else if(e.type=='terminated'| | e.type=='terminated'){
if(e.session==registerSession){
setStatus(“无法注册”);
}否则{
设置状态(e.类型,e.描述);
}
}
}
函数createSipStack(){
sipStack=新的SIPml.Stack({
领域:'foo.bar.com',
impi:'用户测试',
输入:sip:usertest@foo.bar.com',
密码:“1234”,
显示名称:“alice”,
websocket_proxy_url:'ws://11.11.11.0:8080',
启用\u rtcweb\u断路器:false,
事件\u侦听器:{events:'*',侦听器:eventsListener},
sip_头:[//可选
{name:'User-Agent',value:'IM-client/OMA1.0 sipML5-v1.0.0.0'},
{name:'Organization',value:'SuperCops.us'}
]
}
);
}
sipStack.start();
函数登录(){
registerSession=sipStack.newSession('register'{
events_listener:{events:'*',listener:eventsListener}//可选:'*'表示所有事件
});
registerSession.register();
}
函数makeCall(){
var number=document.getElementById('number')。值;
如果(数字=“”){
警报(“未输入编号”);
}
else if(document.getElementById('call')。value='End call'){
callSession.hangup();
}否则{
setStatus('Trying','Trying to call:'+numberFilter(number));
callSession=sipStack.newSession('call-audio'{
事件\u侦听器:{events:'*',侦听器:eventsListener}
});
callSession.call(numberFilter(number));
}
}
函数接受调用(事件){
callSession=event.newSession;
/*(“接受”{
事件\u侦听器:{events:'*',侦听器:eventsListener}
});*/
callSession.accept();
eventsListener(callSession);
setStatus(“已连接”、“通话中”);
}
功能设置状态(类型、状态){
document.getElementById('status')。innerHTML=status;
如果(类型=='终止'| |类型=='终止'){
document.getElementById('call')。value='call';
}else if(状态=='Ringing'| |状态=='Ringing'| |状态=='In Call'| |类型=='Trying'){
document.getElementById('call')。value='End call';
}
}
函数编号过滤器(编号){
返回号码;
}
我想你需要指定
audio\u remote
当新建一个调用audio
会话时:sipStack.newSession('call-audio',{audio\u remote:document.getElementById('audio-remote'),events\u listener:{events:'*',listener:eventsListener})代码>