如何在不使用画布的情况下结合网络摄像头和屏幕共享视频



我有一个webrtc-react应用程序,用户可以在其中将他们的流同步播放到youtube、facebook等(如restream.io(。

我想将两个流(屏幕共享和网络摄像头(作为一个视频发送(半屏幕共享和半网络摄像头,网络摄像头覆盖在屏幕共享上,视频顶部的字幕(,如studio.restream.io

一切都很好,可以在画布上绘制流,并使用websocket将数据管道传输到后端,在那里它被转码为rtmp并发送到fb、yt等。(这种方法仅适用于高端PC(。

但这种方法唯一的问题是,当我在画布上绘制流时,它需要大量的cpu和浏览器挂起(只有当你有gpu时才有效(。

问题是如何优化?

我们需要一个后端服务来使用ffmpeg合并视频吗?或有什么方法可以在浏览器中完成吗?

通常,浏览器中的画布操作(以及许多其他与绘图相关的操作(假设GPU可用,并且在必须在CPU上运行时速度非常慢。

对于你正在做的事情,你可能确实需要在有GPU的硬件上运行浏览器。

你是对的,你可以使用ffmpeg或GStreamer更灵活地进行这种合成。我们在Daily.co.上广泛使用了ffmpeg和GStreamer

对于我们的生产直播工作者,我们使用在没有GPU的AWS实例上运行的GStreamer。我们的媒体服务器将WebRTC rtp曲目作为原始rtp转发到GStreamer进程,该进程对曲目进行解码、合成视频曲目、混合音频曲目并编码到RTMP。GStreamer有一个陡峭的学习曲线,是一个与浏览器完全不同的工具包,但它在浏览器中运行时也很高效和灵活。

最新更新