如何通过重试将流拆分为两个二进制文件?

如何通过重试将流拆分为两个二进制文件?

我有一个二进制文件,可以生成 s16le 格式的音频流。我想将此流拆分为两个不同的进程,但我不希望命令在进程 2 出错时退出并中断进程 1。基本上我想要的是:

$ ./input | tee >(process_1) | process_2

除非进程 2 退出,否则我想重新启动它。默认情况下,如果 process_2 退出,则当管道信号传播时整个命令将退出。

我知道我可以在 C 中通过显式处理信号并编写自己的逻辑来做到这一点,但想知道是否有更好的方法使用本机 bash 来捕获/处理信号并重新启动下游进程而不中断命令本身。

在本例中,我在录音和网络流之间分割音频数据:

get_audio | tee >(./recorder) | ffmpeg -i pipe: ...

这里的问题是,如果 ffmpeg 与 IceCast 的连接中断,整个命令将终止,但我希望前一个进程继续不间断地记录。

相关内容