5

いくつかの rtmp ストリームを再生および記録する 1 つのプログラムを開発しようとしています。プログラムは Qt で開発されています。

rtmpdump と mplayer を使用しています。どちらも別のプロセスで実行されているため、fifo を使用してストリームを rtmpdump から mplayer に渡しています。mplayer はユーザーが制御する必要があるため、別のプロセスが必要です。したがって、mplayer はスレーブ モードで実行されます。

これは、ストリームを再生するために正常に機能しています。

今、ストリームを別のファイルに記録したいと思います。私はそれを行うために mplayer を使用できることを知っています。ただし、単一の mplayer を使用することはできません。これは、再生または録音のいずれかしかサポートしていないためです。したがって、tee コマンドを使用してストリームを分割し、2 つの mplayer プロセス (1 つは記録用、もう 1 つは再生用) を使用することを考えました。

今、流れはこのように流れています

rtmpdump | tee fifo_for_playing fifo_for recording 

1 つの mplayer が fifo_for_playing を読み取り、別の mplayer が fifo_for_recording を読み取ります。

ここでの問題は、記録するはずの mplayer がユーザーが記録ボタンを押したときにのみ開始されるため、 fifo_for_recording が開かれていないためティーをブロックすることです。再生も開始されません。

誰かがこれを達成するための解決策またはより良い方法を提案できますか? 私がやろうとしているのは、ブロックされていない fifo でティーを作ることです。そのため、1 つの fifo が読み取り用に開かれていない場合でも、ティーがブロックされることはありません。

4

1 に答える 1

1

fifo にはバッファーがありません (または、バッファーがある場合は非常に小さいです)。あなたがそれに書き込み、誰も読んでいない場合は、あなたが見つけているようにブロックします。

fifo を読み取り、メモリまたはディスクにバッファリングする小さなプログラムを作成できます。多分 dd プログラムはそれを行うことができますか?

または、ループ内で -stop オプションを指定して rtmpdump を呼び出し、その出力をファイルに書き込むことができます。次に、FIFO を使用せずに昔ながらの方法でファイルを処理します。

于 2014-05-03T20:50:45.760 に答える