javascript - 使用 nodejs/ffmpeg 合并输入流
问题描述
我正在创建一个非常基本和基本的视频网络聊天。在客户端,我将使用一个简单的getUserMedia
API 调用来捕获网络摄像头数据并将视频数据发送data-blob
到我的服务器。
从那里,我计划要么使用该fluent-ffmpeg
库,要么只是生成ffmpeg
自己并将原始数据通过管道传输到ffmpeg
,这反过来会产生一些魔力并将其作为HLS
流推送到Amazon AWS 服务(例如),然后实际上得到显示在网络浏览器上,供视频聊天中的所有参与人员使用。
到目前为止,我认为所有这些都应该很容易实现,但我一直在思考这个问题,如何创建“组合”或“合并”帧和流,以便将 HLS 数据从我的服务器输出到分发云服务只需一个组合数据流即可接收。
如果视频聊天中有 3 个人,我的服务器会从这些客户端接收 3 个数据流,并将这些数据流(来自各个网络摄像头数据源)组合成一个输出流。
这怎么可能实现?ffmpeg
可以这么说,我可以“创建”一个新框架吗?如果有人能在这里给我一个提示,我将非常感激,也许我的想法完全错误。
我想到的另一个问题是,如果我真的可以“转储”任何数据,这些数据是从创建自或到的二进制 blob接收的,或者我是否必须指定某处以及以某种方式使用的确切编解码器等?getUserMedia
MultiStreamRecorder
ffmpeg
解决方案
在视频会议应用程序中使用 hls 流的巨大缺点是延迟。您可以有长达 10 秒的延迟,这对于实时聊天来说并不理想。
您正在寻找的是一个SFU(选择性转发单元),它可以从浏览器 -> 服务器 -> 其他浏览器实时重定向数据。那里的延迟非常低,不需要存储任何东西。
您可以使用多种技术,例如 janus-gateway、kurento 媒体服务器或 jitsi。我个人使用mediasoup,它提供了更多的灵活性。
HERE是一个使用 mediasoup 的简单视频会议项目,可以帮助您入门。
如果最后你仍然想使用 HLS 进行流式传输,因为它也可以方便地查看过去的视频,你仍然可以使用 mediasoup 将视频发送到服务器,然后将其直接转换为 hls 的 ffmpeg。
这是一个使用 ffmpeg 实现录制的录制项目。在此代码中,它保存为 webm,但通过一些参数调整,您可以将其保存为 HLS。(如果你想实现它,给我发消息)
推荐阅读
- php - 爆炸函数在数组的第 0 个索引处返回空值
- python - 尽管已安装模块,但 jupyter 笔记本中未定义 skimage
- node.js - server.use(express.static(path.join(__dirname, 'public'))); 不工作
- javascript - React - 列表中的每个孩子都应该有一个唯一的“关键”道具
- joomla - 类别上的 Joomla 斜杠
- c# - 如何检查字符串是否不等于多个字符串
- docker - k8s 集群中的两个 coredns Pod 处于挂起状态
- apache-spark - spark应用程序是否等同于用户代码?
- kubernetes-dashboard - kube-system pods core-dns 和仪表板待处理
- javascript - 如果 ast 包含空值,则 nodejs 的 ast-compare 包返回 false