无法构造'RTCSessionDescription':参数1('descriptionInitDict')不是对象

时间:2015-10-18 02:16:17

标签: android webrtc

我正在尝试在Chrome和Android上的Web应用程序之间进行电话会议。当Android将商品发送到Web应用程序时,我在Chrome控制台上收到以下错误:

无法构造'RTCSessionDescription':参数1('descriptionInitDict')不是对象。

这是截图:

enter image description here

在Android上,我有这样的代码:

PeerConnectionFactory.initializeAndroidGlobals(listener, true, true,
    true, mEGLcontext);

这是我创建对等连接对象的方法:

this.pc = factory.createPeerConnection(RTCConfig.getIceServer(), RTCConfig.getMediaConstraints(), this);

RTCConfig.getMediaConstraints()函数定义如下:

public static MediaConstraints getMediaConstraints(){
   // Initialize PeerConnection
   MediaConstraints pcMediaConstraints = new MediaConstraints();
   pcMediaConstraints.optional.add(new MediaConstraints.KeyValuePair(
      "DtlsSrtpKeyAgreement", "true"));
   pcMediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair(
         "OfferToReceiveAudio", "true"));
   pcMediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair(
         "OfferToReceiveVideo", "true"));

   return pcMediaConstraints;
}

和RTCConfig.getICEServer()函数定义为:

public static LinkedList<PeerConnection.IceServer> getIceServer(){ 
   // Initialize ICE server list
   LinkedList<PeerConnection.IceServer> iceServers = new LinkedList<PeerConnection.IceServer>();
   iceServers.add(new PeerConnection.IceServer("stun:stun.l.google.com:19302"));
   return iceServers;
}

在Web应用程序中,我以这种方式创建对等连接对象:

var pc = new RTCPeerConnection(
{'iceServers': [
  createIceServer(isChrome
    ? 'stun:stun.l.google.com:19302'
    : 'stun:23.21.150.121', null, null)
]}, 
{optional: [ {"DtlsSrtpKeyAgreement": true}]});

Web应用程序处理此优惠的方式如下:

pc.setRemoteDescription(new RTCSessionDescription(data.sdp), function () {
  $log.debug('Setting remote description by offer');
  pc.createAnswer(function (sdp) {
    pc.setLocalDescription(sdp);
    socket.emit('msg', { by: currentId, to: data.by, sdp: sdp, type: 'answer' });
  }, function (e) {
    $log.error(e);
  });
}, function (e) {
  $log.error(e);
});

网络与网络之间的电话会议工作正常。当android将优惠发送到Web应用程序时,它无法正常工作。此外,当Web将要约发送到android时,不会调用SdpObserver的onCreateSuccess(最终SessionDescription sdp)。

我无法在Internet上找到此错误的解决方案。我无法理解descriptionInitDict的含义。

1 个答案:

答案 0 :(得分:2)

浏览器端的data.sdp是什么类型的?如果它是一个字符串,我认为它是基于你给它的名字,这就是问题所在。您应该传递一个包含两个属性的对象:typesdp。看看官方规范here