我正在尝试将我的本地流重新广播到我的所有对等连接。我试过的选项:
1)循环所有对等连接并使用新的本地流重新创建它们。我在这里遇到的问题是createOffer是异步的。
2)创建1个sdp并将其发送给所有对等体。问题:没有视频
有人有办法将要约重新发送给同行列表吗?
答案 0 :(得分:0)
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事件中。