好吧,我是一家广播电台的唯一 IT 员工,我遇到了一件让我头疼的事(对我来说)。我们有两台 PC 将音频(从无线接收,通过显示器输出到麦克风插孔)传输到商业流媒体服务,两个电台各一台。当然,由于很多原因(其中最不重要的原因是他们运行的是 XP),这远非最佳。
无论如何,我弄清楚了如何将所有这些整合到一台机器中,使用 ffmpeg 对音频输入和输出进行采样,并将其输出到 icecast 服务器。到目前为止一切顺利。大约一年来,一切都进展顺利。但有一个问题:我们必须对体育节目进行大量停播,当我们这样做时,流媒体根本无法使用(在用户端,我们基本上让服务禁用我们在停播期间的连接能力)。因此,用户得到的相当于死气沉沉。不仅如此,它还要求我们通过他们的界面处理停播,而我们无法真正在本地处理(我的偏好)。
因此我的总经理要求我解决这个问题。由于单纯购买新设备是不可能的,所以我必须想出一个软件解决方案。
当前设置仅使用 ffmpeg 对音频线进行采样并输出到 icecast 服务器。
我想要做的是将此设置拆分为一个 ffmpeg 实例,该实例对音频线进行采样并可能对其进行一些处理,然后将其输入到 ffmpeg 进程中,该进程仅保持与 icecast 服务器的连接并发送它收到的任何内容(如果它没有收到任何东西,它只会向 icecast 服务器发送静音)。
源/样本进程应该是可终止的,而无需终止极端的 ffmpeg 进程,并且可以放入新的 ffmpeg 源(例如,从机器本地的预录文件发送音频)并开始提供音频。
我想要的可能相当于一个音频服务器。它运行在为无人值守操作而设置的最低限度的 Linux Mint 19 上。
大致:
[音频线] ----/---- [Extreamer ffmpeg] ---- [流媒体服务] [音频文件] ---/ [没有什么] - /
我对 Jack 和 Pulseaudio 之类的东西不是特别熟悉,但我并不反对使用它们。
我所需要的大致相当于通过转换器将两个或三个音频源连接到 barix extreamer。但我需要在软件中实现它。
我尝试过 ffmpeg 的 -stream-loop 选项,但我不确定我是否使用正确。我还尝试过使用源进行编码,将其放入 FIFO,然后使用 extreamer 进程读取 FIFO。这并没有像我希望的那样有效。我记得该进程很好地传输了第一个进程的输出,但当它结束时,extreamer 进程认为它已经完成并终止,而不是保持连接并等待更多数据。