我正在使用vlc媒体播放器通过互联网连接到rtsp流。
我只需要定期查看流,但每次建立连接都需要很长时间。
相反,我保持连接打开,vlc将输出作为传输流写入命名管道。
然后,当我需要时,vlc的第二个实例可以从管道中读取。
问题是,据我所知,除非打开阅读,否则无法写入命名管道。
当第二个vlc实例未打开时解决此问题我:
cat < $PIPE > /dev/null
除了以这种方式使用cat之外,还有更好的方法来保持管道开放以便写入吗?
答案 0 :(得分:0)
如果管道还没有准备好写入,你没有说出连接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 %