1

フォローアップ: RTMP ストリームが 1 秒間サウンドを再生してから停止 - ビデオがまったくない

ここでの振る舞いは本当に奇妙です。

私の設定:

jwplayer('canvas').setup({
    file : "stream.smil",
    width : 1024,
    height : 768,
    stagevideo : false,
    autostart : true
});

stream.smil:

<smil>
  <head>
    <meta base="rtmp://192.168.1.160:1340/live/" />
  </head>
  <body>
    <switch>
      <video src="large" width="1024" height="768" system-bitrate="2000000" />
      <video src="small" width="640" height="480" system-bitrate="800000" />
    </switch>
  </body>
</smil>

さて、(GPU レンダリング) をオフstagevideoにすると白いビデオは改善されましたが、オーディオの問題は残っています。新しい情報がいくつかあります。

私のRTMPサーバーは、 (smilが示唆するように)リッスンする rtmp module を備えたnginxです。 私は ffmpeg の入力として使用する出力を Mobotix IP カメラを持っており、RTMP サーバーにフィードします。1340

ffmpeg -f mxg -i "http://admin:meinsm@192.168.1.161:80/control/faststream.jpg?stream=MxPEG&needlength" -f flv -ar 44100 -s 1024x768 "rtmp://localhost:1340/live/large"

Chrome、Firefox、Opera、Safari は期待どおりに動作しますが、IE はまったく別の奇跡的な世界です。

  1. ページを開くとすぐに音声が聞こえますが、動画の読み込みに時間がかかります。動画が読み込まれると、約 1 秒間再生された後、音声が停止し、動画がフリーズします。
  2. 低品質のストリームに切り替えると、同じことが起こります.ほとんどすぐにオーディオを聞くことができます.ビデオをロードするのに時間がかかります.
  3. プレーヤー/ストリーム自体を一時停止/閉じずにffmpegフィーダーを再起動すると、しばらくすると、プレーヤーはオーディオとビデオの両方を中断することなく再生し始めます。ある時点でストリームを再度変更するか、ページをリロードすると、#1 に戻ります。その後、再び ffmpeg フィーダーを再起動すると、何も起こらなかったかのようにビデオが続行されます。

独自のコーデックを使用し、デフォルトのコーデックとはいくつかの違いがあるため、MxPEG ライブ ストリームに問題がある可能性がある思います

I フレームの代わりに...

現在の MxPEG の実装では、1 秒ごとや 20 フレームごとなど、完全な JPEG フレームを含めるようにコーデックに指示する方法はありません。したがって、他のコーデックで知られている I フレームの概念はありません。しかし、1 秒前に戻ってデコードを開始する上記の方法は、実用的な回避策として役立つ可能性があります。

コーデック自体に関する追加情報は、こちらで入手できます。

ただし、そのような違いがあっても、動作しないのが IE だけである理由を説明するものではありません (ただし、プレーヤーが RTMP から読み取り中にフィードを再起動しても問題ありません)。

ここでは手がかりがありません。FLVコーデックをAACでx264に変更しようとしました-Chrome、Opera、Firefox、Safariは機能しますが、IEは機能しません(ただし、別の問題)。

RTMP出力に同じオプションを使用して、入力として静的ビデオファイル(BlendersのSintelビデオ、mp4)をffmpegにフィードしようとしました-一貫した問題があり、すべてのブラウザでビデオが途切れましたが、再生されました。

しかし、はい、誰かがここで何が悪いのか手がかりを持っているのでしょうか?

4

1 に答える 1

0

何が問題なのかがわかりました: https://github.com/arut/nginx-rtmp-module/issues/340

実際、ドキュメントには、デフォルトで有効にする必要があるとさえ書かれています: https://github.com/arut/nginx-rtmp-module/wiki/Directives#wait_video

はい、明らかに、RTMP ホスティング用に nginx rtmp モジュールを実行している場合は、次のように設定する必要があります。

wait_video on;

RTMP アプリケーションの構成ブロック内。

于 2014-05-13T14:11:50.053 に答える