WebRTC客户端相互交换消息后,视频流开始。消息操作在使用1337端口和web套接字的节点服务器上进行。在我关闭1337端口上的服务器后,视频流仍在继续。为什么?webrtc客户端使用哪些端口。节点服务器使用一个端口(1337)。我如何学习、控制或更改web rtc服务器和客户端使用的这些端口?
Node.js服务器仅用于会话启动和关闭。因此,一旦会话启动(除非媒体或网络发生更改),它将一直持续到其中一个对等端结束。记住,WebRTC是对等连接。
一旦为对等连接交换了所需的Ice候选者和SDP信息,则不再需要信令服务器(禁止任何不可预见的网络/媒体改变)。会话中的一个对等方(对等连接本身)必须结束会话并停止流传输。
编辑:
- 对于Chrome,默认情况下,媒体在同一端口上进行多路复用(仅使用一个媒体端口)。在FireFox中,我相信音频和视频使用单独的端口。。。除非在最近的更新中进行了更改
- 您不能在WebRTC客户端中指定媒体端口,并且仍然保证可以进行媒体连接(不在任何浏览器实现中,您可以使用本机API进行此操作)。您可以修改SDP中的端口,但这会破坏媒体的NAT遍历
- 信令服务器与客户端使用的媒体端口无关
- 在信令服务器脱机后,您绝对不能修改媒体流,因为无法交换媒体设置信息(端口、媒体类型、流ID等)
我预见了两种控制当前javascript API中媒体端口的方法:
- 您必须控制ICE服务器,以及允许它们尝试和设置哪些端口以进行NAT穿越(STUN和TURN)。这将在服务器端完成,不能由系统的WebRTC(客户端)部分完成。因此,您不能仅在WebRTC中进行操作,而只能通过操纵ICE服务器如何收集候选者
- 另一种非常不可能也几乎无法提及的情况是,如果你知道哪些端口可用于NAT穿越(在对等端设置端口转发或其他什么),你可以在SDP中修改媒体端口,然后在本地设置并将其发送给对等端。在这种情况下,您不需要ICE服务器
以下是关于介质端口分配的更深入讨论