我正在基于Ionic / AngularJS技术开发一个webrtc通话/视频通话应用程序。该应用程序与sip.js一起通过PBX服务器进行呼叫操作。对于IOS与WebRtc的集成,该应用程序可与cordova-plugin-iosrtc一起使用。当我尝试与PBX连接以拨打电话或接听电话时,应用程序在sip.js的cordova-plugin-iosrtc的两种可能的使用模式上引发错误
A)当我尝试在对等连接iOS插件模式下使用cordova-plugin-iosrtc ....
telephoneService.js(Angular JS)
var pc = new cordova.plugins.iosrtc.RTCPeerConnection({
iceServers: []
});
cordova.plugins.iosrtc.getUserMedia(
// constraints
{ audio: true, video: true },
// success callback
function (stream) {
console.log('got local MediaStream: ', stream);
pc.addStream(stream);
},
// failure callback
function (error) {
console.error('getUserMedia failed: ', error);
}
);
var sessionDescriptionHandlerOptions = {
constraints: {
audio: audioId,
video: videoId
},
media: {
local: {
audio: document.getElementById('localAudio')
},
remote: {
audio: document.getElementById('remoteAudio')
}
},
extraHeaders: extraHeaders
}
}
userAgent.invite('sipusertocall', sessionDescriptionHandlerOptions);
收到下一个错误:
undefined is not a object evaluating 'environment.navigator.mediaDevices.getUserMedia' (sip.js lib)
B)
cordova.plugins.iosrtc.registerGlobals(); use iosrtc plugin with webrtc native api (navigator.mediaDevice.getUserMedia(), ....)
navigator.mediaDevices.getUserMedia(
function (stream) {
console.log('got local MediaStream: ', stream);
window.stream = stream;
},
// failure callback
function (error) {
console.error('getUserMedia failed: ', error);
}
)
var sessionDescriptionHandlerOptions = {
constraints: {
audio: audioId,
video: videoId
},
media: {
local: {
audio: document.getElementById('localAudio')
},
remote: {
audio: document.getElementById('remoteAudio')
}
},
extraHeaders: extraHeaders
}
userAgent.invite('sipusertocall', sessionDescriptionHandlerOptions);
App receive from sip.js next error from PBX: Failed:WebRTC Error
客户端同时显示下一个错误:
setLocalDescription()必须以RTCSessionDescription实例作为第一个参数来调用
答案 0 :(得分:0)
因此,较新的SIP.js实际上正在传递RTCSessionDescriptionInit实例,尽管该实例具有类似的结构:{sdp:...,type:...}与RTCSessionDescription init相同,但是cordova iosrtc实现不接受该实例。
我已经以针对SIP.js的自定义SDH的形式为此创建了一个修复程序(因为我遇到了完全相同的问题)。我的自定义SDH在将对象传递到getLocationDescription和setRemoteDescription之前,将其转换为新的RTCSessionDescription(...)。
链接到SDH插件: https://github.com/iotum/cordova-ios-session-description-handler
希望这会有所帮助! 韦斯