web-dev-qa-db-ja.com

Video4LinuxとALSAがコーデックとどのように連携するか

私の理解は、コーデックはデコーダーであり、デコードの仕様でもあるということです。そのため、一部のグループは、フォーマットから生のビットストリームにデコードする方法を説明するコーデックを作成し、encoding互換性のあるエンコーダーを作成したい人までの実装。したがって、たとえば、h.264は有名なビデオコーデック(デコーダー)であり、x264はh.264用のよく知られたFOSSエンコーダーです。しかし、他にも多くのh.264エンコーダーがあります。

私の理解は、VideoForLinux(V4L2)がLinuxマシンでストリーミングビデオを操作するためのカーネルお​​よびユーザースペースライブラリのスイートであるということです。

私の理解は、ALSAはLinuxマシンでストリーミングオーディオを操作するためのカーネルお​​よびユーザースペースライブラリのスイートであるということです。

私が上で述べたことが間違っている場合は、私を訂正/明確化することから始めてください!

私が多かれ少なかれ正しいと仮定すると、Linuxマシンでオーディオとビデオのビットストリームをエンコード、圧縮、送信しようとするときに、V4L2とALSAがどのような役割を果たさなければならないかがわかりません。

X264を使用してビデオストリームをエンコードし、faacを使用してオーディオストリームをエンコードし、次にffmpegを使用して、たとえばMPEG-TSコンテナ内の2つのストリームを圧縮、マルチプレクサ、および送信できる場合、V4L2とALSAが登場しますか?

そして、答えが「そうではない」の場合、誰かがV4L2/ALSAを使用する場合の例を1つか2つ挙げてください。それらをコンテキストに入れて、それらが必要なユースケースを理解しますか?前もって感謝します。

2
pnongrata
  1. 細かい点の詳細ですが、ほとんどのコーデックは、フォーマットを定義する仕様、および該当する場合はAPI仕様を含む、エンコードとデコードを行う方法から始まります。そこから、エンコーダとデコーダの両方の実装を作成できます。すべての実装が同じように作成されるわけではありません。たとえば、CoreAVC H.264デコーダーはマルチスレッドですが、他の多くの実装はそうではありません。

  2. V4L2は、主にLinuxシステムでビデオを作成/キャプチャするために使用されるため、エンコーダーが組み込まれています(または外部のものを参照する可能性があります)。これは主にウェブカメラやビデオキャプチャ/ TVカードに使用されます。もっと見る ウィキペディアで 。生のストリームを作成するアプリは、V4L2を使用してビデオを好みに合わせてエンコードします。デコードは別のパッケージ(おそらくlibavcodec)によって行われます。

  3. [〜#〜] alsa [〜#〜] コーデックが含まれていますが、それ自体がLinuxのすべてのオーディオ操作のサポートスタックであるため、音が聞こえる場所ではどこでも、ALSAがそれを実現します。 ALSAにはオーディオ入力(マイク/ライン入力)用のコンポーネントがあると確信しているので、何らかの形式のエンコードが可能である必要がありますが、私はそれを使用していません。

あなたの例では、V4L2よりもはるかに優れた品質とパフォーマンスを提供する可能性が高いH.264エンコーダーを使用しているため、V4L2が関与するとはまったく思われません。 ALSAはビデオの再生に使用されますが、エンコードには使用されません。

サウンドを再生するときは、ALSAが機能します。あなたがあなたのウェブカメラを使うとき、それは仕事でL4V2です。

1
Frank Thomas

Ffmpegに関しては、ALSAとV4L2はコーデックではなく入力デバイスと呼ばれます(コーデックという用語が常に正確であるとは限りません。私は通常、何かをエンコーダーと呼びます。またはデコーダーをより具体的に)。他の入力デバイスには、JACK、Pulse、x11grab、iec61883、dv1394などがあります。 FFmpegドキュメント から:

入力デバイスはFFmpegで構成された要素であり、システムに接続されたマルチメディアデバイスからのデータにアクセスできます。

たとえば、 [〜#〜] alsa [〜#〜] を使用して、オーディオカードに接続されているマイクからオーディオをキャプチャできます。 V4L2 を使用して、Webカメラからビデオをキャプチャできます。基本的なテストされていないサンプルコマンド:

ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0 output.mkv

あなたが言及する:

h.264は有名なビデオコーデック(デコーダー)です

H.264は標準であり、コーデックではありません。 FFmpegにはh264という名前のデコーダーがあります。混乱する可能性があります。 コーデック(DivXなど)とは何ですか?また、ファイル形式(MPGなど)とどのように異なりますか? を参照してください。

0
llogan