一、浏览器对WebRTC的支持
Chrome\Safari\FireFox等主流浏览器对WebRTC的支持。
二、遍历音视频设备
navigater.mediaDevices.enumerateDivices().
then(gotDevices)
三、采集音视频数据
navigator.mediaDevices.getUserMdia(constraints)
.then(gotMediaStream)
四、MediaTream与MediaStreamTrack
MediaTream 流
MediaStreamTrack 轨
五、本地视频预览
<video> 标签 srcObject
六、信令状态机
Init
join
joined
离开--->Init
other_jointed-->join_conn
byte--->join_unbind
七、RTCPeerConnection
多个功能模块组成(网络处理、服务质量模块、音视频引擎模块)
1、创建RTCPeerConnection对象
let pc = new RTCPeerConnection(configuration)
configuration json格式的参数。
2、RTCPeerConnection与本地视频数据绑定
ls.getTracks().forEach((strack)=>{
pc.addTrack(track,ls);
}
)
3、媒体协商
交换的内容格式是SDP。(数据格式、加密方法等)
A用户媒体协商
pc.createOffser()--->SDP格式Offer.
serDescription()---->保存Offer
Offer通过信令发送到对方。
B用户媒体协商
B 接收到A的Offser
setRemoteeDescritiong()-->保存Offer
pc.createAnswer()--->SDP格式Answer.
serLocalDescription()---->保存Answer
Answer通过信令发送到对方。
4、ICE
INteractive connenectivity establishment,交互式连接建立
(1)Candidate
远端的机器信息{address,port,protocol},CandidateType,ufrag.
(2)收集Candidate
host类型Candidate,通过主机网卡获取
srflx类型Candidate,从STUN服务器中获取得IP和端口生成的。
replay类型Candidate,从TRUN服务器中获取得IP和端口生成的。
(3)交换Candidate
收集好后,通过信令发送给对方。对方接收Candidate后,会与本地Candidate形成CandidatePair。
(4)尝试链接
5、SDP与Candidate消息交换
sdp、Candidate,message
客户端A--->服务器-->其他客户端
6、远端音视频渲染
pc.ontrack = getRemoteeStream();
设置回调,监听数据的到来