WebRTC 流程详解

WebRTC(Web 实时通信)是一种API,可供视频聊天、语音通话和 P2P 文件共享 Web 应用程序使用。

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值