webrtc - 浏览器如何知道他需要连接到 stun/turn 服务器?
问题描述
例如,我想与WEBRtc
. 显然,如果我想通过 NAT。我需要使用STUN/TURN
服务器。什么时候WEBRtc
开始分享ICE
候选人——浏览器如何知道STUN/TURN
服务器存在并且应该首先去那里?
谢谢。
解决方案
Browser中的WebRTC开始分析网络连接的状态(其实标准并没有说明什么时候做这个,而且对于很多浏览器来说,WebRTC在创建了相应的对象之后就立即开始研究网络,以免创建不必要的连接时延迟)。当开发人员在第一步中创建 WebRTC 对象时,他至少应该传递 STUN 服务器的地址。这是一个服务器,响应 UDP 数据包“我的 IP 是什么”,传输接收到该数据包的 IP 地址。WebRTC 使用 STUN 服务器获取“外部”IP 地址,将其与“内部”IP 地址进行比较,看看是否有 NAT。如果是这样,NAT 使用哪些反向端口来路由 UDP 数据包?
浏览器上的 WebRTC 会时不时地调用onicecandidate
回调,将带有信息的 SIP 数据包传输给第二个连接参与者。此数据包包含有关内部和外部 IP 地址、连接尝试、NAT 使用的端口等信息。开发人员使用信令在浏览器之间传输这些数据包。使用该addIceCandidate()
方法将传输的数据包发送到WebRTC。一段时间后,WebRTC 将建立点对点连接。或者如果 NAT 会干扰将无法。对于这种情况,开发者可以传输 TURN 服务器的地址,该地址将用作外部连接元素:两个浏览器都会通过它传输带有语音或视频的 UDP 数据包。
您在最初创建时通过 STUN/TURN 服务器配置RTCPeerConnection
。
推荐阅读
- spring-data-jpa - Postgresql jsonb 运算符不使用 spring data jpa
- reactjs - 如何使用 reactjs 中的输入将数据添加到数组中?
- java - 如何使用 testNG 在测试中运行已经创建的 Java 程序?
- arrays - 是否可以在 C 函数调用中定义任何大小的数组?
- mysql - Xampp MYSQL 服务器在更新后未启动
- laravel - 我正在尝试使用 laravel 将文件上传到保管箱
- azure-functions - Azure函数Http触发广告认证Asp.net core 3.1
- javascript - Typescript 无法编译 - 在 JS 文件中出现错误
- ios - 性能方面,我是否应该使用 AVAudioEngine 来获得多种音效?
- amazon-web-services - 创建 PV 时使用 VOLUME ID 有什么用?