我希望只使用一个RTCPeerConnection发送两个视频流(一个视频流和一个从画布HTML元素捕获的流)。
我尝试做的是在提供优惠之前将两个曲目添加到对等连接对象,但它在Firefox中不起作用(它在Chrome中有效)。 peerConnection.ontrack事件只发生一次,第一个轨道添加到对等连接对象(尽管有两个流)。
我已阅读有关重新协商的内容,但我目前正在向发送优惠之前将两条曲目添加到对等连接中,因此我不知道是否需要进行重新协商。我需要吗?
我也听说过Firefox(统一计划)和Chrome(计划B)之间多语言的互操作性问题,所以请告诉我现在应采取的方法。
我正在使用adapter.js。
添加代码(实际上是javascript):
function createPeerConnection() {
peerConnection = new RTCPeerConnection(iceServers);
peerConnection.onicecandidate = (event) => {
if (event.candidate) {
// send to server
}
};
videoStream.getTracks().forEach(track => peerConnection.addTrack(track, videoStream));
canvasStream.getTracks().forEach(track => peerConnection.addTrack(track, canvasStream));
}
这是我创建RTCPeerConnection并添加曲目的方法。在此部分创建优惠并发送到信号服务器之后...一切正常,只是另一端只接收添加的第一首曲目(在Firefox中)。如果您需要这些位,我会添加它们。
这是ontrack事件处理程序。
peerConnection.ontrack = (event) => {
console.log(event); //only prints the first track in Firefox, but prints both tracks in Chrome
};
答案 0 :(得分:2)
尝试在Chrome中启用统一计划支持。这仍然在进行中并且在标志后面(在chrome:// flags上启用实验性web平台功能)。
然后你需要构建你的RTCPeerConnection
new RTCPeerConnection({sdpSemantics: 'unified-plan'})