((webrtc)setRemoteDescription对启动器不起作用

问题描述 投票:0回答:1

我有一个非常简单的HTML页面,带有一个简单的webrtc实现和一个socket.io服务器。我有两个视频元素,一个是本地视频,另一个是远程视频。用户ID是在页面加载时随机生成的。页面加载时,它将以其随机ID加入特定的socket.io房间。我还有一个呼叫按钮,可以呼叫其他用户。

[单击呼叫时,我创建一个要约,设置本地流,设置本地描述,并将该SDP发送到服务器。第二个用户拿起它,并将其远程描述设置为接收的描述。然后,它创建一个答案,将其本地描述设置为新描述,并设置其本地流。然后,它将答案sdp发送到服务器。发起方选择sdp并设置其远程描述。

以上过程或多或少是应该如何工作的?为了简单起见,我忽略了眩晕。

问题是,我正在加载启动器的本地流,并且来宾的两个流(远程和本地!)都没有,但远程视频没有加载到启动器的页面上。因此,第1、2和3步有效,但第4步无效。

我觉得我在这里遗漏了一些非常明显的东西……由于来宾可以看到本地和远程视频,所以我认为这不是我的眩晕/转弯设置,但是也许吗?

任何提示?这里有什么不对劲的地方吗?

html audio video webrtc
1个回答
0
投票
当访客创建答案时,它已将其正确发送给原始呼叫者。但是,来宾未在生成答案之前将其本地轨道添加到对等连接实例!

代替此:

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);
© www.soinside.com 2019 - 2024. All rights reserved.