1

私は現在、次の構成のパイプラインで数日間作業しています: - 2 つのライブ入力ストリーム (RTMP) - 1 つのコンポジターに入る - 別の RTMP ストリームに出力する

いくつかのコンバーター、キューなどを間に挟むと、かなりうまく機能します。

しかし、私の問題は、RTMP 入力の 1 つが開始時に利用できない可能性があるため、パイプラインを開始できず、次のエラーでクラッシュすることです: - エラー: ストリームからデータを読み取れませんでした - エラー: 内部データ フロー エラー

2 番目の入力がまだ準備できていなくても、最初の入力でストリームを開始するにはどうすればよいでしょうか?

私はいくつかの方法を試しました: パイプラインを動的に変更する、パッド プローブで遊ぶ、エラー メッセージを聞く、..しかし、今のところ動作させることはできません。

ありがとう、PL

4

1 に答える 1

0

コードを投稿しなかったので、概念的な答えで大丈夫だと思います..

失敗するタイミングを制御できる rtspsrc のオプションはほとんどありません。それらは(すべてかどうかはわかりません):

retry - this may be not very useful if it deals only with ports ..
timeout - if you want to try with UDP some longer time you can enlarge this one
tcp-timeout - this is important, try to play with it - make it much larger
connection-speed - maybe it will help to make smaller this one
protocols - I have experience that for bad streams TCP was much better for me

実際の概念(私は専門家ではありません。問題の別の見方として考えてください):

各ストリームに 1 つずつ、合計 2 つのビンを作成できます。rtspsrc と decodebin を使用し、decodebin の出力パッドをすべてのパッドが揃うまでブロックしてから、コンポジターに接続します。

エラーが発生した場合 (すべてのパッドを待機している段階である必要があります)、ビンを NULL 状態 (NULL と呼ばれる GStreamer 状態を意味します) にして、再び再生/一時停止します.パッドの問題を使用する必要があります。適切に(それが何であるかわかりません:D)..これに関するコードを投稿できますか?たぶん、エラーメッセージを破棄して、パイプを分解しないようにしてください..

また、ビデオ入力しかありませんか?いいえ、オーディオにaudiomixerを使用できます..また、コンポジターには、はるかに高速なOpenGLバージョンがありglvideomixerます..しかし、別のOpenGL関連の問題が発生する可能性があります..Intel GPUがあれば、おそらく安全です.

于 2016-07-04T07:18:32.250 に答える