在音频通话中,如何将WebRTC音频通话升级为视频通话( 二 )

  • 创建RTCPeerConnection
  • 设置onicecandidate监听ICE候选
  • 设置oniceconnectionstatechange监听ICE连接状态变化
  • 接收方监听ontrack
  • 发送方pc1 addTrack将当前数据流添加进去
  • 发送方pc1创建offer createOffer
  • pc1创建好offer后,接收方pc2应答 createAnswer
升级到视频通话#upgrade()方法处理升级操作
function upgrade() {upgradeToVideoBtn.disabled = true;navigator.mediaDevices.getUserMedia({ video: true }).then(stream => {console.log('rustfisher.com:获取到了视频流');const videoTracks = stream.getVideoTracks();if (videoTracks.length > 0) {console.log(`video device: ${videoTracks[0].label}`);}localStream.addTrack(videoTracks[0]);localVideo.srcObject = null; // 重置视频流localVideo.srcObject = localStream;pc1.addTrack(videoTracks[0], localStream);return pc1.createOffer();}).then(offer => pc1.setLocalDescription(offer)).then(() => pc2.setRemoteDescription(pc1.localDescription)).then(() => pc2.createAnswer()).then(answer => pc2.setLocalDescription(answer)).then(() => pc1.setRemoteDescription(pc2.localDescription));}发送方去获取音频数据流getUserMedia 。
将音频轨道添加进localStream,并且发送方也要添加轨道 pc1.addTrack 。
创建offer createOffer
后面就是接收方pc2应答
挂断#简单的挂断功能如下
function hangup() {console.log('rustfisher.com:挂断');pc1.close();pc2.close();pc1 = null;pc2 = null;const videoTracks = localStream.getVideoTracks();videoTracks.forEach(videoTrack => {videoTrack.stop();localStream.removeTrack(videoTrack);});localVideo.srcObject = null;localVideo.srcObject = localStream;hangupBtn.disabled = true;callBtn.disabled = false;}主要是把呼出方的流关闭掉
代码流程描述图#将用户的操作(按钮)和主要代码对应起来
在音频通话中,如何将WebRTC音频通话升级为视频通话

文章插图
 
效果预览#【在音频通话中,如何将WebRTC音频通话升级为视频通话】效果预览请参考WebRTC音频通话升级为视频通话 - AnRFDev - 博客园
原文链接:
https://www.cnblogs.com/rustfisher/p/15717958.html




推荐阅读