【问题标题】:webrtc: createAnswer works on chrome but fires an error with firefoxwebrtc:createAnswer 适用于 chrome,但使用 firefox 引发错误
【发布时间】:2014-05-30 05:04:29
【问题描述】:
function createPeerConnection() {
  try {
    pc = new RTCPeerConnection(null, pc_constraints);
    pc.onicecandidate = handleIceCandidate;
    pc.onaddstream = handleRemoteStreamAdded;
    pc.onremovestream = handleRemoteStreamRemoved;
    console.log('Created RTCPeerConnnection');
  } catch (e) {
    console.log('Failed to create PeerConnection, exception: ' + e.message);
    alert('Cannot create RTCPeerConnection object.');
      return;
  }

  try {
      // Reliable Data Channels not yet supported in Chrome
      sendChannel = pc.createDataChannel("sendDataChannel",
        {reliable: false});
      sendChannel.onmessage = handleMessage;
      trace('Created send data channel');
    } catch (e) {
      alert('Failed to create data channel. ' +
            'You need Chrome M25 or later with RtpDataChannel enabled');
      trace('createDataChannel() failed with exception: ' + e.message);
    }
    sendChannel.onopen = handleSendChannelStateChange;
    sendChannel.onclose = handleSendChannelStateChange;
    pc.ondatachannel = gotReceiveChannel;
}

    function doAnswer() {
      console.log('Sending answer to peer.');
      pc.createAnswer(setLocalAndSendMessage, null, sdpConstraints);
    }

我收到错误:

TypeError: Argument 2 of mozRTCPeerConnection.createAnswer is not an object.

【问题讨论】:

  • 这两个浏览器都是 FireFox 吗?您的 SDP 限制是什么?
  • 当您提供类似createAnswer 定义要求的失败回调时,它是否有效?

标签: webrtc


【解决方案1】:

以下代码应该可以在 Firefox 中运行:

function doAnswer() {
  console.log('Sending answer to peer.');

  pc.createAnswer(setLocalAndSendMessage, handleCreateAnswerError, sdpConstraints);
}

function setLocalAndSendMessage(sessionDescription) {
  sessionDescription.sdp = preferOpus(sessionDescription.sdp);
  pc.setLocalDescription(sessionDescription);

  console.log('setLocalAndSendMessage sending message' , sessionDescription);

  sendMessage(sessionDescription);
}

function handleCreateAnswerError(error) {
  console.log('createAnswer() error: ', e);
}

在 Firefox 中失败的原因可以在 documentation for createAnswer 中找到。问题是 Firefox 不允许您为错误处理程序传递 null。所有这些要求是您自己编写,然后将其传递给createAnswer。不要传递 null,您实际上应该传递一个函数(对象)来处理错误。

抱歉回复晚了,迟到总比没有好!

【讨论】:

    【解决方案2】:

    这个怎么样?它是@xsockets 的家伙使用的......

    pc.createAnswer(setLocalAndSendMessage,function (ex) { self.onerror(ex); }, sdpConstraints);
    

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 1970-01-01
      • 2018-09-08
      • 2014-11-17
      • 2015-06-09
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多