Bash 如何在stdout中延迟实时流?

Bash 如何在stdout中延迟实时流?,bash,audio,Bash,Audio,我有一个音频流到stdout,它将通过管道传输到媒体播放器(例如VLC、ffplay)。我想知道有没有可能通过以下方式将音频流延迟几秒钟(假设在Ubuntu bash shell中): || 我想延迟音频流,使其与另一个视频流更同步 是否有任何计划/方法可以实现这一目标 谢谢您的建议。您可以尝试以下内容(python脚本): 会读2次,只写一次,所以会移位 告诉我它是否有效,这只是一次尝试。如果答案不存在,我将删除它。流的格式是什么?未经加工的还有别的吗?例如,您可以使用dd创建一个包含零的文

我有一个音频流到stdout,它将通过管道传输到媒体播放器(例如VLC、ffplay)。我想知道有没有可能通过以下方式将音频流延迟几秒钟(假设在Ubuntu bash shell中):

||
我想延迟音频流,使其与另一个视频流更同步

是否有任何计划/方法可以实现这一目标


谢谢您的建议。

您可以尝试以下内容(python脚本):

会读2次,只写一次,所以会移位


告诉我它是否有效,这只是一次尝试。如果答案不存在,我将删除它。

流的格式是什么?未经加工的还有别的吗?例如,您可以使用
dd
创建一个包含零的文件。然后像这样使用
cat
:| cat zeroes.bin-|因此当您运行该命令时,首先使用空文件。但是为什么不直接使用
sleep
?事实上,我正在使用VLC来播放音频流。音频是“libfdk_aac”ffmpeg编码的24k(比特率)流。如果在这个编码流之前加上“零”,VLC会正确播放吗?此外,我不知道你所说的“使用睡眠”是什么意思,你能详细说明一下吗?我不知道零。值得一试。“使用睡眠”,我的意思是,为什么不在运行命令之前等待呢?经过一些搜索,“睡眠”似乎是一个Linux命令,用于睡眠一段时间。但是,音频是通过网络发送的连续实时流,我无法控制流的创建。作为接收端,我只能尝试延迟一点,以便与另一个视频流更加同步。如果我可以在将音频流发送到媒体播放器之前将其缓存一段时间,那么我的问题就会得到解决。然而,我不知道什么程序可以为我做到这一点。代码运行正常。我现在可以设置chunk_大小来调整音频流的延迟时间。谢谢。我很高兴它对你有用,因为我无法测试它。
<audio stream> | <stream delay program> | <media player, e.g. ffplay>
import sys

chunk_size = 100000  # adjust according to sample rate, nb_channels, etc..

buffer2=None

while True:
    buffer1 = sys.stdin.read(chunk_size)
    if buffer2:
        sys.stdout.write(buffer2)
    buffer2 = sys.stdin.read(chunk_size)
    sys.stdout.write(buffer1)