如果管道还没有准备好写入,你没有告诉连接的 VLC 做了什么。
如果它在看到管道尚未准备好写入并继续从连接中读取时丢弃输出,那么您可以简单地拥有一个打开管道但不读取它的进程。像这样的东西:
while sleep 7d; do :; done < $PIPE &
然后,当您开始播放 VLC 时,它将开始从管道读取,连接的 VLC 将写入它,直到播放 VLC 停止。
但是,如果连接的 VLC 在写入管道时停止,那么通过上述设置,RTSP 连接最终将超时,并且当正在播放的 VLC 开始从管道读取时,连接的 VLC 将终止或需要重新连接。VLC 也可能只是在写入管道时超时。
在这种情况下,您可以从管道中读取并丢弃其内容,直到正在播放的 VLC 到达,并在它停止时继续读取。您可以让多个进程打开一个管道,但数据只能从中读取一次,即进程将竞争数据。
您可以通过在开始播放 VLC 之前使用 SIGSTOP 暂停丢弃过程并在停止后使用 SIGCONT 恢复它来实现,假设读取管道的间隙不足以使连接超时。
像这样:
cat $FIFO > /dev/null &
kill -SIGSTOP %
vlc $FIFO
kill -SIGCONT %