将麦克风从客户端浏览器流式传输到远程服务器,并将音频实时传递到 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 并将其即时流式传输到客户端