我有一个webrtc react应用程序,用户可以将他们的流同时播放到youtube、facebook等(比如restream.io)。
我想将两个流(屏幕共享和网络摄像头)作为一个视频发送(半屏幕共享和半网络摄像头,网络摄像头覆盖在屏幕共享上,视频顶部有字幕),如studio.restream.io
在画布上绘制流,并使用websocket将数据传输到后端,在后端将其转码到rtmp并发送到fb、yt等(此方法仅适用于高端pc)。
但这种方法唯一的问题是,当我在画布上绘制流时,它需要大量的cpu和浏览器挂起(只有当您有gpu时才有效)。
问题是如何优化这一点?
我们是否需要后端服务来使用ffmpeg合并视频?或者有什么方法可以在浏览器中实现吗?
1条答案
按热度按时间sdnqo3pr1#
一般来说,浏览器中的画布操作(以及许多其他与绘图相关的操作)假定gpu可用,并且在必须在cpu上运行时速度非常慢。
对于您正在做的事情,您可能确实需要在具有gpu的硬件上运行浏览器。
您是对的,您可以使用ffmpeg或gstreamer更灵活地进行这种合成。我们在daily.co上广泛使用了ffmpeg和gstreamer。
对于我们的生产实时流媒体工作者,我们使用在没有GPU的aws示例上运行的gstreamer。我们的媒体服务器将webrtc rtp曲目作为原始rtp转发给gstreamer进程,gstreamer进程对曲目进行解码、合成视频曲目、混合音频曲目并编码到rtmp。gstreamer具有陡峭的学习曲线,是一个与浏览器完全不同的工具包,但它的效率和灵活性也是在浏览器中运行所不能达到的。