【发布时间】:2017-12-13 19:45:24
【问题描述】:
我目前正在从事以下工作:
在一台计算机上,我有一个带有白色画布的浏览器,您可以在其中进行绘图。 在许多其他计算机上,您应该能够以视频流的形式接收该画布。计划是以某种方式将画布表面转换为视频流并通过 udp 将其发送到其他计算机。
到目前为止,我实现的是,画布在其他计算机上使用 node.js 和 socket.io 重绘(所以我基本上只是发送绘图信息,如坐标)。然后我还使用 WebRTC 的captureStream()-方法,将画布表面转换为视频标签。所以“视觉上”,它的工作,我在一台电脑上画画,在其他电脑上,我可以将视频设置为全屏,它似乎正在工作。
但这还不是我想要和需要的。我需要它作为一个真正的视频流,所以就像用 MPV 接收它一样。所以问题是:如何将画布表面作为 UDP 实时视频流发送?可能我还需要通过 FFMPEG 或其他方式发送它以对其进行转码..
到目前为止我读了很多,但基本上没有完全弄清楚该怎么做......
我查看了您从 captureStream() 返回的 MediaStream,但这似乎没有多大帮助,因为从画布捕获时 getTracks() 不起作用。
另外,当谈到 WebRTC 时,我不确定它是否工作,不是 2P2 吗?或者我可以以某种方式广播它并将数据包发送到 UDP 地址?我读到的here 是它不是直接可能的。但即使,我应该发送什么?那么如何将画布表面作为视频发送?
所以基本上有两个问题:1. 我必须发送什么,如何将画布发送到视频流和 2. 我如何将其作为流发送给其他客户端?
欢迎任何方法或提示。
【问题讨论】:
-
您说
getTracks()不起作用,但是为什么您需要专门的track?您可以发送整个流并访问另一端的canvas属性,对吗?当然,假设它是受支持的。 -
@PatrickRoberts 它是正确的,我可以在另一边访问 canvas 属性是的,所以在另一边我有
CanvasCaptureMediaStream及其画布、id、活动、onaddTrack 和 currentTime,如以及stream变量,它将内容放入视频标签中。但对我来说,它不是一个真正的“流”,或者是的,问题是:我如何将它放入我的后端?例如,我怎样才能真正将它流式传输到 UDP 地址? -
WebRTC 是 P2P,因为它除了初始信令过程之外没有“后端”。由于 JavaScript 除了通过 WebRTC 之外不支持 UDP,它的 API 受到非常严格的控制以防止任意 UDP 访问,因此这是不可能的。请参阅this answer 以获得更好的解释。
-
@PatrickRoberts 所以你认为这根本行不通吗?我很确定,它必须以某种方式成为可能,每个问题都有解决方案,问题只是哪一个......
标签: javascript node.js canvas video-streaming webrtc