同じデバイスからオーディオおよびビデオを読み取るためにV4L2使用することはできますか?
質問
私はエンベデッドオーディオとSDIビデオをキャプチャするキャプチャカードを持っています。私はvideo4linux2のサポートを追加するために強化しようとしていますLinuxドライバのためのソースコードを持っています。私の変更はビビ例に基づいています。
私が直面して来ている問題は、私は見つけることができるすべての例では、唯一のビデオまたはオーディオのみを扱うということです。でも、クライアント側では、すべてがV4Lはffmpegののlibavdeviceのように、単に映像であると仮定しているようだ。
私は私の運転手2つの別々のデバイス、V4L2デバイスとALSAデバイスを作成してもらう必要がありますか?これは同期してオーディオとビデオを維持する仕事ははるかに困難にように思えるます。
私はそのフレームと(V4L2のMMAPインタフェースを介して)ドライバとアプリケーションとの間で渡される各バッファ含むフレーム、プラス(時間に関して)まで一致するいくつかのオーディオのためのいくつかの方法を好むだろう。
それとも各バッファを持っているが、それは、ビデオフレーム、またはオーディオのチャンクであるかどうかを示すフラグを含みます。そして、バッファ上のタイムスタンプは、物事を同期するために使用することができます。
しかし、単一のデバイスからオーディオとビデオの両方を読んで、私はV4L2のAPI仕様でこれを行う方法が表示されない、また私はV4L2対応のアプリケーション(gstreamerの、ffmpegの、トランスコードなど)のいずれかの例を参照ください。
解決
一般的に、デバイスのオーディオキャプチャ部は、別個のデバイスとして示しています。これは通常、理にかなっている別の物理デバイス(posiblyカードを共有する)、です。私はそれがどのように多くの助けわからないんだけど、それは私が作品に精通していたソフトウェアの方法をすべてです...
他のヒント
mmapedバッファへのポインタを介して、呼び出し元のアプリケーションにドライバからの音声または他のデータを渡すために使用することができV4L2バッファ内のいくつかの予備または予約のフィールドがあります。
私はUbuntuの6.06のビデオに同期A / Dカードからデータを渡すために、このアプローチを使用するBT8x8ドライバを変更します。
これはOK働いたが、私の修正ドライバを維持するための努力は、私はこのアプローチを放棄させます。
あなたはまだ興味を持っている場合は、私は詳細を掘ることができます。
あなたがなどのgstreamerと遊ぶのがあなたのドライバをしたい場合は、別々のオーディオデバイスは、一般的に期待されているものです。
安いV4L2キャプチャカードのオーディオの大部分は、アナログサウンドカードのライン入力を介してオーディオをキャプチャするためにジャンパを必要とボリュームコントロールと通過されます。