WebRTC视频在本地但不是远程工作

时间:2017-11-13 16:49:29

标签: html5 webrtc

涉及到相当多的代码,所以我将我所拥有的内容扔进了一个临时的github仓库:

https://github.com/stevendesu/webrtc-failure

我正在学习WebRTC并且长期想要做一些奇特的东西,但是现在我开始很简单:从一台计算机向另一台计算机发送视频。不幸的是失败了。这就是我到目前为止所建立的......

  1. 在我拥有的开发服务器上,我安装了coturn作为STUN / TURN服务器
  2. 我创建了两个页面:broadcast.htmlwatch.html。前者创建媒体流,并(使用Socket.IO)将连接细节发送到信令服务器。后者从信令服务器获取连接详细信息并尝试观察流
  3. 运行npm install后,您可npm start运行服务器并在localhost:2017访问它。

    所以 的工作原理

    • 打开broadcast.html后,系统会提示您输入广播ID。你可以在这里输入任何东西,但我通常只是做一个递增的数字 - 所以我从“1”
    • 开始
    • 输入广播ID和短暂延迟后,您会在屏幕上看到您的网络摄像头。查看控制台,您可以看到已经与Socket.IO服务器交换了几条消息
    • 如果您在新标签中打开watch.html,系统会提示您输入广播ID。输入与之前相同的ID
    • 输入ID并短暂延迟后,您会在新标签页上看到您的网络摄像头。查看控制台,您可以看到早期的ICE候选者和提供的详细信息是由Socket.IO服务器发送的,并且观察者回答了答案
    • 返回广播标签,您可以验证是否已收到并处理了答案。现已建立连接
    • 对于奖励积分,pc变量位于全局范围(PeerConnection)中,因此在控制台中您可以建立RTCDataChannel并直接在选项卡之间发送消息(绕过Socket.IO服务器)

    以下是的工作原因:

    • 目前(我知道为什么会这样,所以这不是一个问题)只有第一个在watch.html页面输入ID的人才能真正看到广播。它不是“广播”,它只是点对点,一旦建立了一个连接,那么未来的连接就会失败
    • 我的问题:如果我从其他计算机或设备(在同一网络或不同的网络上)打开watch.html,则视频永远无法播放

    在后一种情况下,如果您查看控制台,您将看到要约和冰候选人被送到观察者,观察者生成答案,答案被发送回广播公司,观察者看到媒体流添加到PeerConnection。此媒体流将转换为blob URL并指定为视频元素的源。

    我正处于一个我不知道如何进步的地步。我不知道为什么视频没有出现。

1 个答案:

答案 0 :(得分:2)

你的watch.js不会发出冰候选人。这是一个可能的原因。如果这没有帮助,您可以使用chrome:// webrtc-internals来确定发生了什么 - 请参阅here以获取有关如何解释正在发生的事情的说明。

您可能还希望了解代码的现代化。 https://webrtc.github.io/samples/src/content/peerconnection/pc1/是使用promises和其他东西的现代WebRTC代码的一个相当简单的例子,比如使用srcObject而不是弃用的URL.createObjectURL。