Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html (webrtc)setRemoteDescription不适用于启动器_Html_Audio_Video_Webrtc - Fatal编程技术网

Html (webrtc)setRemoteDescription不适用于启动器

Html (webrtc)setRemoteDescription不适用于启动器,html,audio,video,webrtc,Html,Audio,Video,Webrtc,我有一个非常简单的HTML页面和一个简单的webrtc实现,还有一个socket.io服务器。我有两个视频元素,一个本地和一个远程。用户ID在页面加载时随机生成。当页面加载时,它会将一个特定的socket.io文件室与其随机ID连接起来。我还有一个呼叫按钮,可以呼叫其他用户 当我单击call时,我创建一个offer,设置本地流,设置本地描述,然后将该SDP发送到服务器。第二个用户拿起它,将其远程描述设置为接收到的描述。然后它创建一个应答,将其本地描述设置为新描述,并设置其本地流。然后将应答sdp

我有一个非常简单的HTML页面和一个简单的webrtc实现,还有一个socket.io服务器。我有两个视频元素,一个本地和一个远程。用户ID在页面加载时随机生成。当页面加载时,它会将一个特定的socket.io文件室与其随机ID连接起来。我还有一个呼叫按钮,可以呼叫其他用户

当我单击call时,我创建一个offer,设置本地流,设置本地描述,然后将该SDP发送到服务器。第二个用户拿起它,将其远程描述设置为接收到的描述。然后它创建一个应答,将其本地描述设置为新描述,并设置其本地流。然后将应答sdp发送到服务器。启动器拾取sdp并设置其远程描述

上述过程或多或少是如何工作的?我忽略了晕眩,转而追求简单

问题是,我有启动器的本地流加载,还有来宾的两个流(远程和本地!),但是远程视频没有加载到启动器的页面上。因此,步骤1、2和3可行,但第4步不行

我觉得我错过了一些非常明显的东西。。。由于客人可以看到本地和远程视频,我不认为这是我的眩晕/转身设置,但也许


有什么建议吗?这里有什么问题吗

问题解决了。我少了一部分

当客人创建答案时,它会将答案正确地发送给最初的调用者。但是,在生成答案之前,来宾没有将其本地曲目添加到peerconnection实例

与此相反:

                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);

问题解决了。我少了一部分

当客人创建答案时,它会将答案正确地发送给最初的调用者。但是,在生成答案之前,来宾没有将其本地曲目添加到peerconnection实例

与此相反:

                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);

这可能是因为昏迷潜逃造成的。你可以试着在本地网络中运行所有东西来排除它。或者代码中缺少了什么。忘了听远程媒体流等。不看很难说。@AntonRusak我确实添加了一个STUN服务器,但没有TURN服务器。我没有设置一个。然而,如果客人可以看到我的远程视频,这难道不意味着不需要中继(转向)吗?我通过隧道(ngrok)在同一个网络上运行此操作。我注意到,
pc.ontrack
在我调用setRemoteDescription后为来宾运行,但当启动器调用setRemoteDescription时,
pc.ontrack
不再被调用……这可能是由于STUN的缺席造成的。你可以试着在本地网络中运行所有东西来排除它。或者代码中缺少了什么。忘了听远程媒体流等。不看很难说。@AntonRusak我确实添加了一个STUN服务器,但没有TURN服务器。我没有设置一个。然而,如果客人可以看到我的远程视频,这难道不意味着不需要中继(转向)吗?我在同一个网络上运行它,虽然是通过一个隧道(ngrok)。我注意到,
pc.ontrack
在我调用setRemoteDescription后为来宾运行,但是当启动器调用setRemoteDescription时,
pc.ontrack
不再被调用。。。