Linux tee команда с несколькими fifo. футболка блоков fifo

Я пытаюсь разработать одну программу для воспроизведения и записать несколько потоков RTMP. Программа разработана в Qt.

я использую rtmpdump и mplayer. так как оба работают в отдельном процессе, я использую fifo для передачи потока из rtmpdump в mplayer. Мне нужен отдельный процесс, потому что mplayer должен контролироваться пользователем. так что mplayer работает в режиме slave.

это нормально работает для воспроизведения потока.

Теперь я хочу записать поток в другой файл. я знаю, что могу использовать mplayer для этого. но при использовании одного mplayer это невозможно, поскольку он поддерживает только воспроизведение или запись. поэтому подумал об использовании команды tee для разделения потока и использования процесса 2 mplayer, одного для записи и одного для воспроизведения.

теперь поток течет так

rtmpdump | tee fifo_for_playing fifo_for recording 

один mplayer читает fifo_for_playing, а другой - fifo_for_recording.

Теперь проблема в том, что mplayer, который должен записывать, запустится только тогда, когда пользователь нажмет кнопку записи, fifo_for_recording заблокирует тройник, так как он не открыт. так что игра тоже не запустится.

Кто-нибудь может предложить решение или лучший способ добиться этого? то, что я пытаюсь сделать, это тройник с не блокирующим fifo. так что даже если один fifo не открыт для чтения, он не заблокирует тройник..

1 ответ

У файлов Fifos нет буфера (или, если он есть, он очень маленький). Если вы пишете в него, и никто не читает ваш блок, как вы узнаете.

Вы можете написать небольшую программу для чтения fifo и буферизации в памяти или на диске. Может быть, программа dd может это сделать?

Или вы можете вызвать с помощью rtmpdump с опцией -stop в цикле и записать вывод в файл. Затем обработайте файлы по старинке без fifo.

Другие вопросы по тегам