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

下面是我的拨号代码。我可以使用以下代码成功注册和连接呼叫。但是,在连接呼叫后,只有另一端(非sipml5)可以听到语音。但是,sipml5端听不到任何声音。但是,我可以使用sipml5网站(sipml5.org/call.htm)上的sipml5客户端连接并传递语音。我一定是做错了什么,但我想不出是什么

<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})