当前位置: 代码迷 >> 综合 >> WebRTC 流程详解
  详细解决方案

WebRTC 流程详解

热度:69   发布时间:2023-10-25 15:35:28.0

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.内网无影响,外网不上传