将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合

Posted

技术标签:

【中文标题】将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合【英文标题】:Stream microphone from client browser to remote server and pass audio in real time to ffmpeg to combine with a second video source 【发布时间】:2021-06-30 13:18:52 【问题描述】:

作为使用此类实时流媒体服务的初学者,我已经花费了数小时试图弄清楚这是如何实现的,但似乎无法弄清楚我是否会这样做。

我正在制作一个个人基本网络应用程序的原型,该应用程序执行以下操作:

    在 Web 浏览器中,Web 应用程序有一个显示“流式麦克风”的按钮 - 当按下它时,它会将来自用户麦克风的音频(用户显然必须同意授予发送麦克风音频的权限)通过流式传输到我假设的服务器将运行 node.js(此时没有具体原因,只是认为这就是我要这样做的方式)。

    服务器以某种方式接收到足够接近实时的音频(不知道我会怎么做)。

    然后我可以在命令行上运行 ffmpeg 并实时获取实时音频并将其作为声音添加到视频文件中(假设我要播放 testmovie.mp4)想玩。

我查看了各种解决方案 - 例如可能使用 WebRTC、RTP/RTSP、将音频管道传输到 ffmpeg、Gstreamer、Kurento、Flashphoner 和/或 Wowza - 但不知何故,它们看起来过于复杂,而且通常似乎只关注视频带音频。我只需要处理音频。

【问题讨论】:

【参考方案1】:

正如您所发现的,有许多不同的选项可以从支持 WebRTC 的浏览器接收音频。从最简单到更难的选项可能是:

使用支持 WebRTC 的服务器,例如 Janus、Kurento、Jitsi(不确定 wowzer)等。这些服务器往往具有插件系统,其中一个可能已经具备您需要的音频混合功能。

如果您对节点感到满意,您可以使用werift 库来接收 WebRTC 音频流,然后将其转发到 FFmpeg。

如果您想完全控制 WebRTC 管道并可能进行音频混合,您可以使用gstreamer。根据您的描述,它应该能够完成完整的任务,而无需涉及单独的 FFmpeg 进程。

【讨论】:

【参考方案2】:

我们这样做的方法是在 Java 中创建一个 Wowza 模块,该模块将从传入的流中获取音频,从您想要的任何地方获取视频,然后将它们混合在一起。

没有理由在混合中引入像 ffmpeg 这样的第三方。

Wowza 甚至为此提供了一个示例:https://github.com/WowzaMediaSystems/wse-plugin-avmix

【讨论】:

以上是关于将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 ffmpeg 以与第二个视频源结合的主要内容,如果未能解决你的问题,请参考以下文章

LAMP:如何从远程 URL/文件创建 .Zip 并将其即时流式传输到客户端

PHP:将远程pdf流式传输到客户端浏览器

我可以使用 nodejs 将麦克风音频从客户端流式传输到客户端吗?

使用分块传输通过 HTTP POST 流式传输麦克风输出

将音频从 Mac 上的麦克风流式传输到 iPhone

使用 Java SDK 将音频从麦克风流式传输到 IBM Watson SpeechToText Web 服务