重新发送peerconnection offer

时间:2014-05-07 12:18:10

标签: javascript html p2p webrtc

我正在尝试将我的本地流重新广播到我的所有对等连接。我试过的选项:

1)循环所有对等连接并使用新的本地流重新创建它们。我在这里遇到的问题是createOffer是异步的。

2)创建1个sdp并将其发送给所有对等体。问题:没有视频

有人有办法将要约重新发送给同行列表吗?

2 个答案:

答案 0 :(得分:0)

  • 每台PC都需要重新创建一个报价(正如bwrent所说)。
  • 因为您显然正在使用p2p多方(多个对等连接),您可能希望每次都将peerID传递给createOffer成功回调,然后您不必担心它是异步的。您需要使完全握手(提供,回答,候选)peerID依赖。
  • (简体)我们的SDK示例

    Skyway.prototype._doCall = function (targetMid) {
        var pc = this._peerConnections[targetMid]; // this is thread / asynchronous safe
        pc.createOffer(
            function (offer) {
                self._setLocalAndSendMessage(targetMid, offer); // pass the targetID down the callback chain
            },
            function (error) {this._onOfferOrAnswerError(targetMid, error);},
            constraints
        );
    }; 

    Skyway.prototype._setLocalAndSendMessage = function (targetMid, sessionDescription) {
        var pc = this._peerConnections[targetMid]; // this is thread / asynchronous safe
        pc.setLocalDescription(
            sessionDescription,
            self._sendMessage({ target: targetMid, ... }), // success callback
            function () {}                                 // error   callback
        );
    };

答案 1 :(得分:0)

如果你的意思是异步,那么当回调触发它时,它有一个错误的变量,即当循环结束时该发送给谁,变量包含最后一个人'?您可以将其范围用于解决异步问题:

For(var i=0;i<peerConnections.length;i++){
    (function(id){
        //inside here you have the right id. Even if the loop ended and the i variable has changed to something else, the I'd variable still is the same.
    })(i);
}

这有点像Alex&#39;回答,因为他的anwer还描述了在执行.createOffer的函数中确定变量范围的示例

正确处理此问题的另一种方法是使用重新协商。无论何时更改流,都会自动触发on onnegotiation事件处理程序。在此功能中,您可以创建新的优惠并将其发送给其他人。正如您所提到的,您有多个对等连接离子监听流,您需要知道将sdp发送给谁。如果要将人员ID添加到rtc对象,则可以通过调用this.id将其返回到onnegotioation事件中。