如何检查WebRTC对等方是否以P2P模式或中继模式进行通信

时间:2018-11-03 17:22:45

标签: webrtc

说:

  1. A和B在同一个局域网中,
  2. A和B在不同的Lan中。

但是通过webrtc逻辑连接,如何检查它是否真正通过p2p或中继服务器(转弯服务器)进行通信?我可以看到多个icecandidate互相交换,但不确定实际使用了哪一个!

对于情况1)我认为A和B应该使用本地Lan连接互相通信,但是如何确认呢!

对于情况2)它可能使用p2p连接或使用中继服务器进行媒体中继,我怎么知道实际使用的连接是什么?

2 个答案:

答案 0 :(得分:2)

ICE连接建立后(即,在iceconnectionstate更改为已连接或已完成时)

调用peerconnection.getStats()API。 然后迭代统计信息以找到当前活动的连接,找到指向本地和远程候选者的指针,并查看其候选类型字段。

https://webrtc.github.io/samples/src/content/peerconnection/constraints/处的示例显示了其中的大部分内容,但未显示候选人类型,仅显示了ip和端口。

答案 1 :(得分:0)

也许下面的方法不是很好的答案,但它应该可以工作:

  1. 如果A和B在同一个lan中,则在连接完成后,断开Internet连接,但将Lan与A和B保持连接,如果A和B可以成功通信,则必须由Lan进行通信,因为Internet已经断开。

  2. 如果A和B在不同的局域网中,只需卸下转弯服务器以连接A和B,如果A和B可以成功连接并通信,则A和B不应使用中继服务器p2p进行通信。否则,如果使用转弯服务器可以通信并且没有转弯服务器不能通信,则它必须在中继模式下使用转弯服务器。 (我认为这是伪造的p2p,因为中继服务器处于通信中间)。