webrtc 中的多对等连接

Multi peer connection in webrtc

本文关键字:对等 连接 webrtc      更新时间:2023-09-26

我使用数组pc将RTCPeerConnections从1个客户端保存到其他客户端,然后调用createOffer

pc是全局变量,但有一个错误:在createOffer函数中,我得到pc[list[i]]undefined。我该如何解决?

for (var i = 0; i<list.length - 1; i++) {
    pc[list[i]] = createPC(list[i]);
    pc[list[i]].createOffer(function (localDesc) {
        pc[list[i]].setLocalDescription(localDesc);
        send(localDesc, list[i]);
    }, doNothing, constraints);
}

一定是 for 循环内部回调的常见问题,请尝试绑定 i 的值:

for (var i = 0; i<list.length - 1; i++) {
    pc[list[i]] = createPC(list[i]);
    (function(i){
        pc[list[i]].createOffer(function (localDesc) {
            pc[list[i]].setLocalDescription(localDesc);
            send(localDesc, list[i]);
        }, doNothing, constraints);
    })(i);
}

编辑:

另一种选择可能是(我假设列表是唯一ID的列表):

...
for (var i = 0; i<list.length - 1; i++) {
    var id = list[i];
    pc[id] = createPC(id);
    pc[id].createOffer(onOffer.bind({id:id}), doNothing, constraints);
}
...
function onOffer(localDesc){
    pc[this.id].setLocalDescription(localDesc);
    send(localDesc, this.id);
}