Я пытаюсь разработать одну программу для воспроизведения и записи некоторых потоков RTMP. Программа разработана на Qt.
Я использую rtmpdump и mplayer. поскольку оба работают в отдельном процессе, я использую FIFO для передачи потока из rtmpdump в mplayer. Мне нужен отдельный процесс, потому что mplayer должен контролироваться пользователем. так что mplayer работает в подчиненном режиме.
это отлично работает для воспроизведения потока.
теперь я хочу записать поток в другой файл. Я знаю, что могу использовать для этого mplayer. но использование одного mplayer невозможно, так как он поддерживает только воспроизведение или запись. поэтому подумал об использовании команды tee для разделения потока и использования двух процессов mplayer, одного для записи и одного для воспроизведения.
теперь поток течет вот так
rtmpdump | tee fifo_for_playing fifo_for recording
один mplayer читает fifo_for_playing, а другой - fifo_for_recording.
Теперь проблема в том, что, поскольку mplayer, который должен записывать, запустится только тогда, когда пользователь нажмет кнопку записи, fifo_for_recording заблокирует тройник, поскольку он не открывается. так что играть тоже не начнется.
Кто-нибудь может предложить решение или лучший способ добиться этого? я пытаюсь сделать тройник с неблокирующим фифо. так что даже если один фифо не открыт для чтения, он не заблокирует тройник ..