涉及到相当多的代码,所以我将我所拥有的内容扔进了一个临时的github仓库:
https://github.com/stevendesu/webrtc-failure
我正在学习WebRTC并且长期想要做一些奇特的东西,但是现在我开始很简单:从一台计算机向另一台计算机发送视频。不幸的是失败了。这就是我到目前为止所建立的......
broadcast.html
和watch.html
。前者创建媒体流,并(使用Socket.IO)将连接细节发送到信令服务器。后者从信令服务器获取连接详细信息并尝试观察流运行npm install
后,您可npm start
运行服务器并在localhost:2017
访问它。
所以 的工作原理 :
broadcast.html
后,系统会提示您输入广播ID。你可以在这里输入任何东西,但我通常只是做一个递增的数字 - 所以我从“1”watch.html
,系统会提示您输入广播ID。输入与之前相同的ID pc
变量位于全局范围(PeerConnection)中,因此在控制台中您可以建立RTCDataChannel并直接在选项卡之间发送消息(绕过Socket.IO服务器)以下是不的工作原因:
watch.html
页面输入ID的人才能真正看到广播。它不是“广播”,它只是点对点,一旦建立了一个连接,那么未来的连接就会失败watch.html
,则视频永远无法播放在后一种情况下,如果您查看控制台,您将看到要约和冰候选人被送到观察者,观察者生成答案,答案被发送回广播公司,观察者看到媒体流添加到PeerConnection。此媒体流将转换为blob URL并指定为视频元素的源。
我正处于一个我不知道如何进步的地步。我不知道为什么视频没有出现。
答案 0 :(得分:2)
你的watch.js不会发出冰候选人。这是一个可能的原因。如果这没有帮助,您可以使用chrome:// webrtc-internals来确定发生了什么 - 请参阅here以获取有关如何解释正在发生的事情的说明。
您可能还希望了解代码的现代化。 https://webrtc.github.io/samples/src/content/peerconnection/pc1/是使用promises和其他东西的现代WebRTC代码的一个相当简单的例子,比如使用srcObject而不是弃用的URL.createObjectURL。