如何在WebRTC中向对等连接添加多个轨道?

时间:2018-05-02 09:51:32

标签: javascript webrtc

我希望只使用一个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
    };

1 个答案:

答案 0 :(得分:2)

尝试在Chrome中启用统一计划支持。这仍然在进行中并且在标志后面(在chrome:// flags上启用实验性web平台功能)。 然后你需要构建你的RTCPeerConnection new RTCPeerConnection({sdpSemantics: 'unified-plan'})