ffmpeg - 实时室内流媒体和音乐混音

标签 ffmpeg audio-streaming rtp live-streaming wifi

我正在做这个项目,我们正在与大约 6 位音乐家在一个大空间中彼此远离地进行现场表演。观众将戴着耳机,当他们四处走动时,我们希望他们听到不同区域的不同效果。为了计算用户的位置,我们使用蓝牙信标。我们预计大约有 100 个用户,我们的延迟不能超过 2 秒。

这样的设置可能吗?

目前我们正在考虑的实现方式是将这个地方划分为大约 30 个不同的部分。
对于服务器,我们将从所有音乐家那里获取输入,并为每个部分混合不同的流,并使用 RTP 协议(protocol)在本地 WLAN 上流式传输。
我们将拥有 Android 和 iOS 应用程序,它们将使用蓝牙信标定位用户并相应地切换直播流。

Presonus 一号工作室 音乐混音器 - 可以有多个可以输出到设备的 channel 。 30 个 channel 。
虚拟音频线 - 用于创建将从 channel 获取输出的虚拟设备。 30 台设备。
FFMpeg 流媒体 - 用于为每个设备创建 RTP 流。 30 条流。

这是一个好主意吗?还有其他方法吗?
任何帮助将不胜感激。

最佳答案

音频捕捉和混合

首先,您需要将这六个音频 channel 捕获到您可以使用的东西中。我认为您对虚拟音频电缆的想法是不可持续的。以我的经验,一旦你得到更多,它们就不会那么好用了。您需要能够直接从混音器转到正在为流进行编码的内容,这意味着您需要像 JACK audio 这样的东西。 .

有两种方法可以做到这一点。一种是使用数字混音器为您创建这 30 种混音,然后将结果流发送给您。另一种是简单地捕获 6 个音频 channel ,然后在软件中进行混音。通常我认为外部混合的灵 active 是你想要的,通常我会推荐 Behringer X32系列给你。我自己还没有尝试过使用 JACK 音频,但我听说它可以工作并且价格合理。您可以以便宜的价格获得它的机架安装包,它具有所有功能而无需控制表面(更便宜,并且足以满足您的需求)。 然而 ,X32 只有 16 条总线,因此您需要其中两条才能获得所需的混音数量。 (你可以通过矩阵混合获得创意,但这只会让你多出 6 个,总共 22 个。)

我认为您需要做的是捕获该音频并在软件中进行混音。您可能想要使用 Liquidsoap为了这。它可以以编程方式混合通过 JACK 拉入的音频流,并在输出端创建互联网广播风格的流。

流媒体

你需要一个服务器。有很多 RTP/RTSP 服务器可用,但我推荐 Icecast。这将更容易设置并且客户端更兼容。 (无需制作应用程序,您可以轻松地在网页上以 HTML5 音频标签播放这些流。)Liquidsoap 可以将流直接发送到 Icecast。

潜伏

将延迟保持在 2 秒以下将是一个问题。您将希望尽可能降低缓冲区,尤其是在您的 Icecast 服务器上。这是合理可能的边缘,因此您需要进行测试以确保延迟满足您的要求。

网络

同一频谱上的 100 个客户端也是有问题的。您需要什么取决于您的空间的具体情况,但您可以通过使用常规消费者接入点来摆脱困境。鉴于您的延迟和带宽要求,我建议您获取一些 commercial access points with built-in sector antennas and multiple radios .这种齿轮的制造商有很多。

祝这个独特的项目好运!完成后,请发布一些设置照片。

关于ffmpeg - 实时室内流媒体和音乐混音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33580649/

相关文章:

ffmpeg - 如何组合两个 ffmpeg 命令

java - 使用 FFMPEG 编码流后如何将 H.263 打包为 RTP 数据包

java - 如何在java中从tcp流播放声音

audio-streaming - 网站上的实时音频流

gstreamer - 如何使用 gst-launch 通过 rtp 流式传输 mp4 音频和视频并播放?

java - 视频流无法通过互联网或本地网络工作

select - FFMPEG场景检测: overlay original frame number

arrays - 使用批处理,您将如何遍历一个您不知道它可能包含多少个值的数组以在每个单独的变量上运行一个函数

powershell - 限制在 powershell 中运行的 Start-Process 数量

用于播放通过套接字传输的 wav 文件的 iOS 库