Linux 如何构建延迟/缓冲管道?
是否有可能构建一个缓冲管道来保留来自标准linux工具(如cat、dd等)的数据(在一定数量的字节或一定时间内) 例如,收集一定数量的数据包、音频数据或其他信息 例如,要构建一个脚本Linux 如何构建延迟/缓冲管道?,linux,bash,pipe,Linux,Bash,Pipe,是否有可能构建一个缓冲管道来保留来自标准linux工具(如cat、dd等)的数据(在一定数量的字节或一定时间内) 例如,收集一定数量的数据包、音频数据或其他信息 例如,要构建一个脚本delaybuffer,执行以下操作: arecord | delaybuffer 16000 | aplay 要播放录制的音频,延迟16000字节 有一个名为buffer的工具来完成这项工作。(-也可能在其他发行版中提供。) 缓冲区使用共享内存将可变输入数据速率转换为恒定输出数据速率 另一种方法是使用dd(如果您
delaybuffer
,执行以下操作:
arecord | delaybuffer 16000 | aplay
要播放录制的音频,延迟16000字节 有一个名为
buffer
的工具来完成这项工作。(-也可能在其他发行版中提供。)
缓冲区使用共享内存将可变输入数据速率转换为恒定输出数据速率
另一种方法是使用dd(如果您的dist上不存在缓冲区)
我不太确定这些标志,可能有更好的方法,而不仅仅是一次爆破一个块。以下内容给了
cdparanoia
在开始读取输出之前提取音频CD曲目7的4秒障碍。
可以作为命令行cd播放器使用
cdparanoia 7 ~/temp.wav & sleep 4 ; tail -f -c +1 ~/temp.wav | aplay
16000字节应读取哪些字节?零字节?还有别的吗?delaybuffer命令如何知道一次读取一次要消耗多少字节?您的意思是说缓冲区程序在读取16000字节之前不应该写入?一旦它读取了规定的字节,就开始写入所有数据?注意这一点——如果选择的大小太大,管道可能会满,从而导致
arecord
的写入阻塞,整个链也会停止。根据man7pipe
最新的Linux内核的管道容量为65535。因此,16000是安全的,但是要注意,如果这个太大,就会破坏它。C编译器算是“标准linux工具”吗?我不希望内核管道缓冲区保存我的数据,但是一些delaybuffer
自己的内存。下面的答案似乎与此相符。谢谢。这正是我的想法。只是想知道是否有可能得到一个基于磁盘的缓冲区?因此,它也可以用来缓冲视频数据的大延迟,例如…我认为这就是答案,即使它通常需要在大多数系统上安装一个工具。但是,似乎没有简单的解决方案,如果您需要在写入之前确保缓冲区已满,则需要使用-p
选项。还有另一个名为mbuffer
的工具,其工作原理类似。
cdparanoia 7 ~/temp.wav & sleep 4 ; tail -f -c +1 ~/temp.wav | aplay