我有一个非常简单的HTML页面,带有一个简单的webrtc实现和一个socket.io服务器。我有两个视频元素,一个是本地视频,另一个是远程视频。用户ID是在页面加载时随机生成的。页面加载时,它将以其随机ID加入特定的socket.io房间。我还有一个呼叫按钮,可以呼叫其他用户。
[单击呼叫时,我创建一个要约,设置本地流,设置本地描述,并将该SDP发送到服务器。第二个用户拿起它,并将其远程描述设置为接收的描述。然后,它创建一个答案,将其本地描述设置为新描述,并设置其本地流。然后,它将答案sdp发送到服务器。发起方选择sdp并设置其远程描述。
以上过程或多或少是应该如何工作的?为了简单起见,我忽略了眩晕。
问题是,我正在加载启动器的本地流,并且来宾的两个流(远程和本地!)都没有,但远程视频没有加载到启动器的页面上。因此,第1、2和3步有效,但第4步无效。
我觉得我在这里遗漏了一些非常明显的东西……由于来宾可以看到本地和远程视频,所以我认为这不是我的眩晕/转弯设置,但是也许吗?
任何提示?这里有什么不对劲的地方吗?
代替此:
localVideo.srcObject = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
let sdp = await pc.createAnswer();
await pc.setLocalDescription(sdp);
应该是这个
localVideo.srcObject = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
// this the missing piece
for (let track of localVideo.srcObject.getTracks()) {
pc.addTrack(track, localVideo.srcObject);
}
let sdp = await pc.createAnswer();
await pc.setLocalDescription(sdp);