我有来自 ffmpeg 的输入字节。我想将此输出发送到其他几个 ffmpeg 进程。因为我不能为此使用 Unix 管道、套接字、..(或者我可以吗?)我使用 python 作为管道的接收端。然后一个子程序将接收到的数据复制到所有先前“注册”的导出。
感觉不对!
具体我的感觉是,这意味着大量的内存复制。它现在有效。但我真的很想了解这样做的“正确方法”。
def writeData(self,data):
"""Write 'data' to all outputs"""
if len(self.outlets) > 0:
for outlet in self.outlets:
outlet.writeData(data)
else:
self.logger.warn("Received data but no outlets registred (yet?)")
编辑:感谢 Phil,他更正了早期版本中的错误(请参阅评论)。
使用bash
,你可以做到
ffmpeg ... | tee >(ffmpeg ...) >(ffmpeg ...) >(ffmepg ...) > /dev/null
这会将第一个 ffmpeg
的输出通过管道传递给其他三个。
如果你不使用bash
,你可以手动创建命名管道,将它们连接到ffmpeg
进程并使用tee
管道到命名管道:
mkfifo pipe1 pipe2
ffmpeg ... < pipe1
ffmpeg ... < pipe2
ffmpeg ... | tee pipe1 pipe2 | ffmpeg ...
rm pipe1 pipe2
上面的bash
代码基本上是一样的。命名管道的创建和删除是透明的。
我是一名优秀的程序员,十分优秀!