【问题标题】:what is the appropriate way to achieve offer to recieve and send in webRTC?在 webRTC 中接收和发送报价的合适方法是什么?
【发布时间】:2022-12-10 22:41:56
【问题描述】:

在我的情况下,在完成所有工作并运行后,我想从添加轨道迁移到 addTranciever

我有 2 个 peerConnection

yourConn = new RTCPeerConnection(servers);
yourConn2 = new RTCPeerConnection(servers);

通过以下步骤,我在 addTransceiver 的许多示例案例中看到了这样的情况

yourConn.addTransceiver(streams.getAudeoTracks()[0]);

如何从你的 Conn peer 接收?我可以通过从 peer 1 发送到 peer 2 来实现吗 和 p1 从 p2 接收而无需再次协商

我还应该在双方的 ontrack 事件中做什么,如果我愿意,我应该在那里使用 addTrack 吗?

这里是您的 Conn2 活动方,这里要发送要约接收怎么样?

    yourConn2.ontrack = (e) => {
         e.transceiver.direction = 'sendrecv';
    await e.transceiver.sender.replaceTrack(remoteStream);
      
};

我应该抓住吗

 RemoteAudioFromlocal = yourConn2.getTransceivers()[0];

然后我像这样升级”到 sendrecv 的方向?

RemoteAudioFromlocal.direction = "sendrecv"
      await RemoteAudioFromlocal.reciever.replaceTrack(remotePeerStramIn);

【问题讨论】:

    标签: webrtc openwebrtc


    【解决方案1】:

    我会回答我的问题,因为我弄明白了 来自 [Jan-Ivar Bruaroey blog1 我发现了我要问的所有问题 在一侧使用 addTransceiver() 我可以在 onTrackEvent 中获取收发器 像这样

     if (e.transceiver.receiver.track) {
              remoteVideo = document.getElementById("wbrtcremote");
              transceiversRemotePeer = new MediaStream([e.transceiver.receiver.track]);
                  remoteVideo.srcObject = transceiversRemotePeer
                
              }
    

    这就是我在另一边需要知道的所有内容,但这里有一个小区别,比如你需要改变方向

    发送方创建的收发器默认是sendrecv 加上addtranciever 边

    yourConn.addTransceiver(streams.getAudeoTracks()[0]);
    

    .对于相同的中音,这会被接收器侧的收发器镜像。这里暴露在ontrack事件中,

    yourConn2.ontrack = await e => {
      /* do something with e.track */
      e.transceiver.direction = 'sendrecv';
      await e.transceiver.sender.replaceTrack(receiverTrack);
    };
    

    但在“提供接收”用例中,您可以通过 getTransceivers() 或类似上面的代码使用 e.transceiver.sender 获得它

    在接收端 (yourConn2),方向从 sendrecv“降级”到 recvonly,因为默认情况下,此收发器未配置为将任何内容从 receiverPc(yourConn2) 发送回 senderPc(yourConn)。

    毕竟,它只是响应 setRemoteDescription(offer) 而创建的。 要解决此问题,您将方向“升级”为 sendrecv 并设置要发送的轨道。

    e.transceiver.direction = 'sendrecv';
    e.transceiver.sender.replaceTrack(localStream.getAudioTracks()[0]).then(() => {
          
            }); 
    

    如果您在 receiverPc 上创建本地 SDP 应答之前执行此操作,您应该能够在没有更多 SDP 协商的情况下实现“sendrecv”。 ontrack 事件在 SRD 承诺解决之前触发,因此您在该事件中所做的任何修改都应该在创建 SDP 应答之前完成。

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 2016-12-05
      相关资源
      最近更新 更多