背景
- 近段时间对webrtc来了兴趣,刷了不少相关文章,做了不少练习,来这记录、分享一下学习过程。
前置
- 练习前,首先去了解一下webrtc相关理论知识是非常有必要的;网上一搜,都是各路大佬整理的资料,我这主要以实践为主,就不再做太多理论知识分享。
- 如果没有web视屏基础,也不知道什么叫webrtc,可以看 走过的路是一阵魔术 大佬的相关文章,对零基础同学非常友好,可以很快了解并上手。
实践
功能
仓库
gitee.com/jun96/webrt…

实现
initWs();
document.getElementById("button").addEventListener("click", () => {
createPeer();
});
function initWs() {
}
async function createPeer(type) {
}
async function answerOffer(data) {
}
async function getStream() {
}
initWs();
function initWs() {
}
async function createAnswer(data) {
}
async function getStream() {
}
交互过程
前置步骤
- 运行server服务端
npm run start:debug,启动websocket信令交换服务
- 用户A,打开index1页面,自动连接websocket
- 用户B,打开Index2页面,自动连接websocket
P2P建立过程
- 在用户A页面点击 开启视屏 按钮
- 初始化peer
- 通过getUserMedia方法,获取摄像头的stream,并添加到peer通道中
- 生成offer、candidate;并peer.setLocalDescription(offer)
- 发送给用户B,以获取answerOffer应答建立P2P连接
- 用户B收到用户A发送过来的offer、candidate
- 初始化peer
- 通过getUserMedia方法,获取摄像头的stream,并添加到peer通道中
- setRemoteDescription用户A发送过来的offer;addIceCandidate用户A发送过来的candidate
- 生成answerOffer,peer.setLocalDescription(answerOffer);以及获取用户B本人的candidate
- 将answerOffer及新生成的candidate发送给用户A
- 用户A收到用户B发送过来的answerOffer,以及用户B的candidadte信息
- setRemoteDescription、addIceCandidate;完成信令交换过程
- peer.ontrack,监听P2P通道建立成功,将用户B的流添加到用户A页面的video标签
- 用户B监听,peer.ontrack
- 信令交换完成后,会触发,获取到用户A的stream,将用户A的stream添加到video标签
- 用户A和用户B成功建立起视屏连接