簡體   English   中英

保持管道打開而不從中讀取?

[英]keep pipe open without reading from it?

我正在使用vlc媒體播放器通過互聯網連接到rtsp流。

我只需要定期查看流,但是每次建立連接都花費太長時間。

相反,我保持連接打開狀態,並且vlc將輸出作為傳輸流寫入命名管道。

然后,可以在需要時從管道讀取vlc的第二個實例。

據我了解,問題在於,除非打開可讀的命名管道,否則無法將其寫入。

為了在第二個vlc實例未打開時解決此問題,我:

    cat < $PIPE > /dev/null

除了以這種方式使用cat之外,還有沒有更好的方法可以保持管道打開以進行書寫?

如果管道尚未准備好進行寫入,則您沒有告訴連接的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 %

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM