【发布时间】:2013-12-25 19:47:17
【问题描述】:
具体来说,我正在尝试从设备捕获音频或视频流,并在按下按钮时仅保留 X 分钟(或 Y MBytes)。 在 Linux 中有什么本地方法可以做到这一点?
我知道先进先出,但这只是保留所有数据。我想将我的流传输到一个特定的缓冲区,该缓冲区只保留最后的 Y MBytes,并丢弃其余的。
谢谢
【问题讨论】:
具体来说,我正在尝试从设备捕获音频或视频流,并在按下按钮时仅保留 X 分钟(或 Y MBytes)。 在 Linux 中有什么本地方法可以做到这一点?
我知道先进先出,但这只是保留所有数据。我想将我的流传输到一个特定的缓冲区,该缓冲区只保留最后的 Y MBytes,并丢弃其余的。
谢谢
【问题讨论】:
我看到的最接近的事情是使用 -b 和 -v 选项将您的流传输到 split 命令中。 -b 告诉 split 按字节数分割行,而不是行数,并且 -v 告诉你什么时候 split 开始一个新文件。将 split 的输出通过管道传输到一些小脚本中,当 split 开始新文件时,该脚本开始删除文件,因此您永远不会同时拥有多个文件。
如果你给 split 命令一个前缀 XXX(不同的流不同的前缀),你可以 cat XXX* 把这些部分放在一起。
当然,您的输出的开头将按单个文件大小“跳跃”,而不是按字节。但我认为这是您在没有特定程序的情况下可以获得的最接近的结果。
Fifos 在您的情况下无论如何都无法正常工作,因为它们的缓冲区大小有限;当没有阅读器时,作者会阻塞,并且您不能同时拥有多个阅读器。
【讨论】: