2013-04-08 4 views
4

Я пытаюсь разработать одну программу для воспроизведения и записи некоторых полос rtmp. Программа разработана в Qt.Linux tee команда с несколькими fifo. fifo blocks tee

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

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

Теперь я хочу записать поток в другой файл. Я знаю, что могу использовать 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 не открывается для чтения, он не будет блокировать тройник.

ответ

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^