Webrtc 一次呼叫有两个对等连接的缺点是什么?

Webrtc 一次呼叫有两个对等连接的缺点是什么?,webrtc,Webrtc,我正在考虑将我的应用程序从使用一个用于双向传输媒体的PeerConnection更改为一个用于上游的PeerConnection,一个用于下游的PeerConnection,用于两个对等方之间的单个调用 我预见到的好处是: 将提供的媒体从视频+音频更改为音频,反之亦然时,不必担心对等连接的信号状态 将kurento等媒体服务器插入应用程序可能更容易(在多用户呼叫的情况下,用户所需的上传带宽更小) (不确定这一点)单一责任原则,每个对等连接都有一个角色 我想做这个改变的主要原因是,我注意到,如

我正在考虑将我的应用程序从使用一个用于双向传输媒体的PeerConnection更改为一个用于上游的PeerConnection,一个用于下游的PeerConnection,用于两个对等方之间的单个调用

我预见到的好处是:

  • 将提供的媒体从
    视频+音频
    更改为
    音频
    ,反之亦然时,不必担心对等连接的信号状态
  • 将kurento等媒体服务器插入应用程序可能更容易(在多用户呼叫的情况下,用户所需的上传带宽更小)
  • (不确定这一点)单一责任原则,每个对等连接都有一个角色
我想做这个改变的主要原因是,我注意到,如果peer(peer1)只提供
音频
,而其他peer2(peer2)同时提供
视频+音频
,peer1出于某种原因只接收音频,但是如果peer1是应答者,它可以毫无问题地接收两个mediatrack。不确定这是否是我的应用程序或浏览器中的错误(在firefox和chrome中得到相同的结果)。我能够通过维护状态、根据状态和其他内容更改报价人来解决问题,但是两个对等方(几乎)同时更改状态时出现问题。考虑到上述建议将是更简单的解决方案,我可以摆脱维护状态


除了更多ICE候选请求的额外开销(n STUN n TURN)、维护额外的对等连接的明显缺点之外,此设计之后可能出现的任何其他问题?

资源问题是,由于连接双方都必须完成DTLS握手,您将使用更多的端口(这是通过对等方式完成的,而不是通过信令服务器)


一个设计挑战是保持对两个正交连接的跟踪。如果状态处理不当(浏览器状态错误等),这可能会很棘手,并且更容易在底层webrtc实现中显示错误.

一个资源问题是,由于连接双方都必须完成DTLS握手(这是通过对等方式完成的,而不是通过信令服务器完成),因此您将使用更多的端口


一个设计挑战是保持对两个正交连接的跟踪。如果状态处理不当(浏览器状态错误等),这可能会很棘手,并且更容易在底层webrtc实现中显示错误.

没有什么可以阻止你这么做,但我想有一个更简单的解决方案,你可以把它隐藏起来:

我想做这个改变的主要原因是,我注意到如果peer(peer1)只提供音频,而其他peer(peer2)同时提供视频和音频,peer1出于某种原因只接收音频

不要问我为什么,但peer1仅提供音频时的默认规范行为是仅从另一方请求音频。若要覆盖此设置,并在另一方拥有视频的情况下允许自己接收视频,请使用:

(或者,如果您使用的是传统的非承诺API,则这是第三个参数。)


这样做的好处是,它是基于意图的,因此您不需要跟踪任何状态。例如,始终使用
{offerreceivevideo:true,offerreceiveaudio:true}
可能适合您。

没有什么可以阻止您这样做,但我怀疑有一种更简单的解决方案可以解决您隐藏的问题:

我想做这个改变的主要原因是,我注意到如果peer(peer1)只提供音频,而其他peer(peer2)同时提供视频和音频,peer1出于某种原因只接收音频

不要问我为什么,但peer1仅提供音频时的默认规范行为是仅从另一方请求音频。若要覆盖此设置,并在另一方拥有视频的情况下允许自己接收视频,请使用:

(或者,如果您使用的是传统的非承诺API,则这是第三个参数。)


这样做的好处是它是基于意图的,因此您不需要跟踪任何状态。例如,始终使用
{offerToReceiveVideo:true,offerToReceiveAudio:true}
可能适合您。

我想,既然额外的问题是在浏览器上,它应该不会花那么多钱,也认为对于不支持重新协商的旧浏览器来说会更好,比如当您更改流时,至少您的屏幕会一直收到他的流,而您关闭并再次共享流时,至少它会出现一边是无缝的。@mido22,这是肯定的。这就是正交性在这个解决方案中真正闪耀的地方。我只知道浏览器中的webrtc状态(至少在过去)在某些情况下可能相当脆弱。在过去一年左右的时间里,它变得更加健壮,希望不会对您的解决方案造成任何严重问题。我认为,由于额外的问题在浏览器上,它不应该花费那么多,也认为对于不支持重新协商的旧浏览器(如当您ange stream,至少你的屏幕一直在接收他的流,当你关闭并再次共享流时,至少它的一面看起来是无缝的。@mido22,这是肯定的。这就是正交性在这个解决方案中真正发挥作用的地方。我只知道浏览器中的webrtc状态(至少在过去)在某些情况下可能相当脆弱。在过去一年左右的时间里,它变得更加健壮,希望不会对您的解决方案造成任何严重问题。我要注意的是,有些系统故意使用两个(或更多)单向连接,如TokBox。正如您所提到的,它使一些事情更容易,而有些事情更难(更多要同步的状态、设置时间等)我要注意,有些系统有意使用两个(或更多)单向连接,如TokBox。正如您所提到的,它使一些事情更容易,而有些事情更难(更多要同步的状态、设置时间等)
peer1.createOffer({ offerToReceiveVideo: true }).then( ... )