首页 > 解决方案 > 使用 nodejs/ffmpeg 合并输入流

问题描述

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

从那里,我计划要么使用该fluent-ffmpeg库,要么只是生成ffmpeg自己并将原始数据通过管道传输到ffmpeg,这反过来会产生一些魔力并将其作为HLS流推送到Amazon AWS 服务(例如),然后实际上得到显示在网络浏览器上,供视频聊天中的所有参与人员使用。

到目前为止,我认为所有这些都应该很容易实现,但我一直在思考这个问题,如何创建“组合”或“合并”帧和流,以便将 HLS 数据从我的服务器输出到分发云服务只需一个组合数据流即可接收。

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

这怎么可能实现?ffmpeg可以这么说,我可以“创建”一个新框架吗?如果有人能在这里给我一个提示,我将非常感激,也许我的想法完全错误。

我想到的另一个问题是,如果我真的可以“转储”任何数据,这些数据是从创建自或到的二进制 blob接收的,或者我是否必须指定某处以及以某种方式使用的确切编解码器等?getUserMediaMultiStreamRecorderffmpeg

标签: javascriptnode.jsffmpegvideo-streamingwebrtc

解决方案


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

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

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

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

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

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


推荐阅读