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

时间:2021-04-04 10:14:40

标签: ffmpeg webrtc gstreamer wowza kurento

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

>

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

  1. 在 web 浏览器中,web 应用程序有一个按钮,上面写着“流麦克风” - 当按下它时,它会从用户的麦克风流式传输音频(用户显然必须同意允许发送他们的麦克风音频)通过到我假设将运行 node.js 的服务器(此时没有具体原因,只是认为我会这样做)。

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

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

甚至还有一个来自 Wowza 的样本:https://github.com/WowzaMediaSystems/wse-plugin-avmix