オーディオが埋め込まれた SDI ビデオをキャプチャするキャプチャ カードがあります。video4linux2 サポートを追加するために拡張しようとしている Linux ドライバーのソース コードがあります。私の変更はviviの例に基づいています。
私が直面した問題は、私が見つけることができるすべての例がビデオまたはオーディオのみを扱っていることです。クライアント側でも、ffmpeg の libavdevice のように、すべて v4l が単なるビデオであると想定しているようです。
v4l2 デバイスと alsa デバイスの 2 つの別個のデバイスをドライバーに作成させる必要がありますか? これにより、オーディオとビデオの同期を維持する作業がはるかに困難になるようです。
ドライバーとアプリの間で (v4l2 の mmap インターフェイスを介して) 渡される各バッファーには、フレームと、そのフレームと (時間に関して) 一致するいくつかのオーディオが含まれていることをお勧めします。
または、各バッファに、それがビデオ フレームであるか、オーディオのチャンクであるかを示すフラグを含めることもできます。次に、バッファのタイムスタンプを使用して同期を行うことができます。
しかし、V4L2 API 仕様でこれを行う方法がわかりません。また、単一のデバイスからオーディオとビデオの両方を読み取る v4l2 対応アプリ (gstreamer、ffmpeg、トランスコードなど) の例も見当たりません。