2

オーディオが埋め込まれた SDI ビデオをキャプチャするキャプチャ カードがあります。video4linux2 サポートを追加するために拡張しようとしている Linux ドライバーのソース コードがあります。私の変更はviviの例に基づいています。

私が直面した問題は、私が見つけることができるすべての例がビデオまたはオーディオのみを扱っていることです。クライアント側でも、ffmpeg の libavdevice のように、すべて v4l が単なるビデオであると想定しているようです。

v4l2 デバイスと alsa デバイスの 2 つの別個のデバイスをドライバーに作成させる必要がありますか? これにより、オーディオとビデオの同期を維持する作業がはるかに困難になるようです。

ドライバーとアプリの間で (v4l2 の mmap インターフェイスを介して) 渡される各バッファーには、フレームと、そのフレームと (時間に関して) 一致するいくつかのオーディオが含まれていることをお勧めします。

または、各バッファに、それがビデオ フレームであるか、オーディオのチャンクであるかを示すフラグを含めることもできます。次に、バッファのタイムスタンプを使用して同期を行うことができます。

しかし、V4L2 API 仕様でこれを行う方法がわかりません。また、単一のデバイスからオーディオとビデオの両方を読み取る v4l2 対応アプリ (gstreamer、ffmpeg、トランスコードなど) の例も見当たりません。

4

2 に答える 2

2

通常、デバイスのオーディオキャプチャ部分は別のデバイスとして表示されます。これは通常、別の物理デバイス(おそらくカードを共有している)であり、これは理にかなっています。それがどれだけ役立つかはわかりませんが、私が精通しているすべてのソフトウェアがどのように機能するかです...

于 2009-05-27T19:56:49.137 に答える
0

v4l2バッファーには、mmapされたバッファーへのポインターを介して、ドライバーから呼び出し元のアプリケーションにオーディオまたはその他のデータを渡すために使用できるスペアフィールドまたは予約済みフィールドがいくつかあります。

このアプローチを使用して、Ubuntu6.06のビデオに同期されたA/Dカードからデータを渡すようにBT8x8ドライバーを変更しました。

それは問題なく機能しましたが、変更したドライバーを維持するための努力により、このアプローチを断念しました。

それでも興味があれば、詳細を掘り下げることができます。

ドライバーをgstreamerなどで再生したい場合は、通常、別のオーディオデバイスが期待されます。

安価なv4l2キャプチャカードのオーディオのほとんどは、サウンドカードのライン入力を介してオーディオをキャプチャするためにジャンパーを必要とするボリュームコントロールを備えたアナログパススルーのみです。

于 2009-12-24T19:53:31.140 に答える