将输入流与 nodejs/ffmpeg 合并



我正在创建一个非常基本和基本的视频网络聊天。在客户端,我将使用一个简单的getUserMediaAPI调用来捕获网络摄像头数据,并将视频数据作为data-blob发送到我的服务器。

从那里,我计划要么使用fluent-ffmpeg库,要么只是自己生成ffmpeg并将原始数据传送到ffmpeg,这反过来又会做一些魔术并将其作为HLS流推送到亚马逊 AWS 服务(例如),然后实际显示在 Web 浏览器上,供视频聊天中的所有参与者使用。

到目前为止,我认为所有这些都应该相当容易实现,但我一直在思考这个问题,如何创建"组合"或"合并"帧和流,因此从我的服务器到分布式云服务的输出 HLS 数据只需要一个组合数据流即可接收。

如果该视频聊天中有 3 个人,我的服务器将从这些客户端接收 3 个数据流,并将这些数据流(来自各个网络摄像头数据源)合并到一个输出流中。

如何做到这一点? 可以这么说,我可以用ffmpeg"创建"一个新框架吗?如果有人能在这里给我一个提示,我将非常感激,也许我的想法完全错误。

我出现的另一个问题是,如果我真的可以"转储"任何数据,我从从getUserMediaMultiStreamRecorder创建的二进制 blob接收到ffmpeg,或者我是否必须在某个地方指定以某种方式使用的确切编解码器等?

在视频会议应用程序中使用 hls 流时的巨大缺点是延迟。您的延迟最多可以有 10 秒,这对于实时聊天来说并不理想。

您正在寻找的是SFU(选择性转发单元),它可以从浏览器 ->服务器 ->其他浏览器实时重定向数据。那里的延迟非常低,无需存储任何东西。

您可以使用多种技术,例如janus-gateway,kurento媒体服务器或jitsi。我个人使用mediasoup,这提供了更多的灵活性。

这是一个使用mediasoup的简单视频会议项目,可以帮助您入门。

如果最后你仍然想使用HLS进行流式传输,因为它也可以方便地查看过去的视频,你仍然可以使用mediasoup将视频发送到服务器,然后发送到ffmpeg,直接将其转换为hls。

这是一个使用 ffmpeg 实现录制的录制项目。在此代码中,它保存为 webm,但通过一些参数调整,您可以将其保存为 HLS。(如果您想实现它,请给我留言)

最新更新