2016-06-17 6 views
1

私はレンダリングされた画像をモバイルクライアントにインターネット経由でストリーミングする必要があるOpenGLアプリケーションを持っています。これまではレンダリングを単純にビデオファイルに記録するだけで済みましたが、これは後でストリーミングに拡張する必要があります。今取り組んでいる何HTTPを介したストリームOpenGLフレームバッファー(FFmpeg経由)

  • はNvIFR
  • はNvENC必要(なしCPU往復を使用してH.264にそれをエンコード使用してFBOのコンテンツをキャプチャ
  • OpenGLのフレームバッファオブジェクトにシーンをレンダリング)
  • は、ビデオファイル
にバイト配列として
  • 追加このフレームをホストメモリに符号化されたフレームをダウンロード

    これまでFFmpegや他のライブラリを使用していませんでした。私は今、最後のステップを "インターネット経由で現在のフレームのバイト配列をストリームする"と置き換えたいと思います。私はFFmpegとFFserverを使用することがこれに対して妥当な選択であると仮定します。私は正しいですか?そうでない場合、適切な方法は何でしょうか?

    もしそうなら、私はC++コードの中でどのようにこれにアプローチしますか?指摘したように、フレームは既に符号化されている。また、音やその他のものはなく、不規則に更新され、安定したビデオストリームに変換されるべきバイト配列としての単純なH.264符号化フレームです。私はこれがFFmpegの仕事であり、FFserverによる後続のストリーミングはそこから簡単であると仮定します。私が知りませんが、最初の場所で私のデータをFFmpegにフィードする方法です。私が見つけたすべてのFFmpegチュートリアル(非網羅的な検索で)は、データソースとしてのファイルまたはウェブカメラ/キャプチャデバイスで動作します。メインメモリ。

    私がすでに作成している上記のファイルは、各単一フレームを追加するC++ファイルストリームです。つまり、ビデオとレンダリングの異なるフレームレートが正しく処理されません。これはまた、ある時点で世話をする必要があります。

    誰かが正しい方向に向けることができますか?私のアプリケーションからFFmpegにデータを転送して、ハードディスクに書き込むことなく適切なビデオフィードを構築できますか?チュートリアルは非常に高く評価されています。ところでFFmpeg/FFserverは必須ではありません。 OpenGLのフレームバッファの内容をストリーミングする方がいいアイデアがあれば、私は知りたいと思っています。

  • 答えて

    1

    H.264データ(-f h264)を容易にエンコードしたffmpegプロセスをフィードして、ストリームを出力マルチプレクサ(-c:v copy)にコピーするように伝えることができます。 ffmpegのに実際にデータを取得するにはちょうどあなたがffmpeg_inにあなたのエンコードされたH264ストリームを書き込むことができ、その標準入力に接続された配管と子プロセスとして起動し、ソース

    FILE *ffmpeg_in = popen("ffmpeg -i /dev/stdin -f h264 -c copy ...", "w"); 
    

    を読んだとしてSTDINを指定します。

    +0

    ありがとう、これは有望だと思います。私はこれをテストします。 – mOfl

    関連する問題