WebRTC(Web 实时通信)是一种API,可供视频聊天、语音通话和 P2P 文件共享 Web 应用程序使用。
文章目录
- WebRTC(Web 实时通信)是一种API,可供视频聊天、语音通话和 P2P 文件共享 Web 应用程序使用。
-
-
- WebRTC主要由这几部分组成:
- 打洞流程 (RTC在连接的过通常叫做打洞)
- 注意
- 浏览器问题
-
WebRTC主要由这几部分组成:
getUserMedia()
授予对设备摄像头和/或麦克风的访问权限,并可将其信号插入 RTC 连接。
RTCPeerConnection
用于配置视频聊天或语音通话的界面。
RTCDataChannel
提供一种在浏览器之间设置点对点数据路径的方法。
打洞流程 (RTC在连接的过通常叫做打洞)
上图所示(此图来自网络) 是大致的打洞流程 实际情况下 设置本地sdp描述后就有ice候选到达(可能需要做处理)
上图所示是端上的处理
浏览器 API
getUserMedia(): 获取音视频. MediaDevices.getUserMedia()
MediaRecorder: 记录音频和视频
RTCPeerConnection: 客户端之间传输音视频
RTCDataChannel: 客户端之间传输数据信令传输:协调沟通和发送控制消息的机制
STUN和TURN:使用stun来获取计算机的IP地址,在发生对等通信失败的情况下使TURN 服务器充当中继服务器
流程
peers之间创建通话三个步骤:
1.两端分别创建 RTCPeerConnection , 并通过getUserMedia()添加本地视频流.
2.获取并分享网络信息: 这些待连接的终端被称为 ICE 候选者(candidates).
3.获取并分享本地和远程描述(descriptions): 关于本地媒体的 SDP 格式元数据.
chrome://webrtc-internals/
ICE, SDP 过程
注意
1.PeerConnection 在调用 setLocalDescription() 之前不会开始收集候选项;提供给
setLocalDescription 的信息告诉 PeerConnection 需要收集多少候选项。
2.track 可以不是 stream 的一部分,PeerConnection 可以单独添加 track,ontrack 回调的 track 无 streams
3.修改编解码器首选顺序 transceiver.setCodecPreferences(),.getCapabilities 获取编解码列表重新排列
4.addTrack 后再进行协商过程,否则不会触发track事件
5.在没有设置远程SDP的情况下,是不能调用PeerConnection.addIceCandidate()方法的
浏览器问题
1.navigator.mediaDevices.getUserMedia 获取权限前,
navigator.mediaDevices.enumerateDevices 获取设备信息 label 为空字符串
2.mDNS,方案外网不上传.local地址
chrome 隐藏 IP 打洞失败
ICE IP 为 4496c603-1ad2-45d3-abca-5826a7cd4f42.local
Anonymize local IPs exposed by WebRTC. (Chrome M75, Chrome M74 ?) 原因(规范):
https://tools.ietf.org/html/draft-ietf-rtcweb-mdns-ice-candidates-03 使用多播DNS在暴露ICE候选对象时保护隐私
解决:
1.chrome://flags/
内 Anonymize local IPs exposed by WebRTC.
设 为 Disabled
2.使 用 iceServers(** 已 测 试 没 啥 用 **, https://support.google.com/chrome/thread/9106174?hl=en)
3.内网无影响,外网不上传