webrtc学习--一对一通话
推荐一个零声学院免费教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
文章目录
webrtc一对一通话
在webrtc一对一通话中,所涉及到的方面很多,本章节主要讲一对一通话中的信令部分,对于其他的采集,编码,传输,解码,渲染部分,直接通过API来进行。不涉及深入部分。webrtc源码中,peerconnection中的例子,就是一个一对一的通话demo。这里面,暂时先不讲c++版本。先以js版本来进行
了解
和学习
。
0. 前言
1. webrtc一对一通话时序图
2. webrtc一对一通话
2.1 webrtc一对一通话简述
在一对一通话中,我们需要的是,在同一个房间里面,有且仅有
两个人
,当房间已有两个人时,该房间就不能再有其余的人进入房间了,当该房间不足两人时,才可以再次进入该房间,而且也需要满足最多只能有两个人在该房间中。
2.2 webrtc 一对一通话步骤
在一对一通话中,有上面的时序图所示,开始时,我们需要开启信令服务器(singnal_server服务)和ICE服务器(stun/turn服务)。会话双方都需要连接信令服务器。发起者首先创建offer并发送给信令服务器。信令服务器接收到offer并转发给接收者,接收者设置相应的参数后,创建与之对应的answer,并通过信令服务器转发给发起者。发起者接收answer,并设置对应的参数。开始打洞服务了。在理想的状态下(可以打洞)。首先,发起者,接收者绑定打洞服务器。发起者发送一个candidate给信令服务器,信令服务器转发给接收者,接收者添加发送者的candidate,开始向ICE服务器发送ICE Requst。
2.2.1 webrtc一对一通话–信令服务连接
一对一双方通话,首先双方都要连接在同一个信令服务器中,并保持连接正常。
2.2.2 webrtc一对一通话–发起者创建offer过程
发起者创建offer类型的SDP消息,调用setLocalDescription方法将该Offer保存到,然后通过信令服务器将Offer发送给被呼叫方。
2.2.3 webrtc一对一通话–接收者创建answer过程
接收者收到Offer类型的SDP消息后,调用setRemoteDescription方法将Offer保存,接收者创建Answer SDP消息,调用setLocalDescription方法保存。接收者将Answer消息通过信令服务器发送给发送者。
2.2.4 webrtc一对一通话–媒体协商完毕
发起者接收到信令服务器转发的Answer SDP后,调用setRemoteDescription方法将Answer保存,媒体协商完毕。
2.2.5 webrtc一对一通话–p2p会话建立
发起者和接收者完成上面的步骤后,开始向ICE服务请求打洞了,通过onIceCandidate回调获取打洞信息(Candidate)并通过信令服务器发送给对方。其中,如果打洞成功,那么开始p2p传输数据。如果打洞失败,那么开始进行中继转发数据。
3. webrtc一对一通话测试
测试前,需要准备好摄像头。这里面,我就采用虚拟摄像头来进行。
3.1 安装虚拟摄像头
run.bat
@echo off
rem 卸载screen-capture-recorder-x64.dll
regsvr32 /u /s screen-capture-recorder-x64.dll
rem 安装screen-capture-recorder-x64.dll
regsvr32 /s screen-capture-recorder-x64.dll
rem 卸载virtual-audio/audio_sniffer-x64.dll
regsvr32 /u /s virtual-audio/audio_sniffer-x64.dll
rem 安装virtual-audio/audio_sniffer-x64.dll
regsvr32 /s virtual-audio/audio_sniffer-x64.dll
3.2 测试代码
代码来源于码云上,可以通过例子来进行下载和学习
https://gitee.com/sevenzyh/learn-webrtc
https://github.com/Jhuster/RTCStartupDemo
在代码中,可以很方便的来进行一对一通话。
4. 参考博客
更多推荐
所有评论(0)