2009-05-27 17 views
2

私は、オーディオが埋め込まれたSDIビデオをキャプチャするキャプチャカードを持っています。私はvideo4linux2のサポートを追加するために強化しようとしているLinuxドライバのソースコードを持っています。私の変更はviviの例に基づいています。v4l2を使用して同じデバイスからオーディオとビデオを読み取ることはできますか?

私が犯した問題は、私が見ることができるすべての例がビデオのみまたはオーディオのみを扱うことであるということです。クライアント側でさえ、すべてがv4lがffmpegのlibavdeviceのようなちょうどビデオだと仮定しているようです。

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

ドライバとアプリケーション(v4l2のmmapインターフェイス経由)間を渡される各バッファに、フレームと、そのフレームと(時間に対して)一致するいくつかのオーディオが含まれています。

おそらく、各バッファに、ビデオフレームであるかオーディオの塊であるかを示すフラグを含めるようにしてください。その後、バッファ上のタイムスタンプを使って物事を同期させることができます。

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

答えて

2

通常、デバイスのオーディオキャプチャ部分は別のデバイスとして表示されます。これは通常、物理的な別のデバイス(カードを共有する可能性があります)ですが、理にかなっています。私はどれくらいの助けをしているのかは分かりませんが、私がよく知っているソフトウェアの仕組みはどれですか...

+0

この場合、ビデオとオーディオを同期させる可能性はありますか? –

+0

特定のビデオデバイスに対応するオーディオデバイスを知る可能性はありますか?何がioctl VIDIOC_S_AUDIOとまったく同じですか? VIDIOC_S_AUDIOで選択したオーディオ入力からオーディオデータを読み込むにはどうすればよいですか? –

0

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

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

これは問題なく動作しましたが、変更されたドライバを維持していたため、私はこのアプローチを放棄しました。

あなたがまだ興味があるなら、私は詳細を掘り下げることができました。

ドライバをgstreamerなどで再生したい場合は、別のオーディオデバイスが一般的に予想されます。

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

関連する問題