私の理解は、コーデックはデコーダーであり、デコードの仕様でもあるということです。そのため、一部のグループは、フォーマットから生のビットストリームにデコードする方法を説明するコーデックを作成し、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つ挙げてください。それらをコンテキストに入れて、それらが必要なユースケースを理解しますか?前もって感謝します。
細かい点の詳細ですが、ほとんどのコーデックは、フォーマットを定義する仕様、および該当する場合はAPI仕様を含む、エンコードとデコードを行う方法から始まります。そこから、エンコーダとデコーダの両方の実装を作成できます。すべての実装が同じように作成されるわけではありません。たとえば、CoreAVC H.264デコーダーはマルチスレッドですが、他の多くの実装はそうではありません。
V4L2は、主にLinuxシステムでビデオを作成/キャプチャするために使用されるため、エンコーダーが組み込まれています(または外部のものを参照する可能性があります)。これは主にウェブカメラやビデオキャプチャ/ TVカードに使用されます。もっと見る ウィキペディアで 。生のストリームを作成するアプリは、V4L2を使用してビデオを好みに合わせてエンコードします。デコードは別のパッケージ(おそらくlibavcodec)によって行われます。
[〜#〜] alsa [〜#〜] コーデックが含まれていますが、それ自体がLinuxのすべてのオーディオ操作のサポートスタックであるため、音が聞こえる場所ではどこでも、ALSAがそれを実現します。 ALSAにはオーディオ入力(マイク/ライン入力)用のコンポーネントがあると確信しているので、何らかの形式のエンコードが可能である必要がありますが、私はそれを使用していません。
あなたの例では、V4L2よりもはるかに優れた品質とパフォーマンスを提供する可能性が高いH.264エンコーダーを使用しているため、V4L2が関与するとはまったく思われません。 ALSAはビデオの再生に使用されますが、エンコードには使用されません。
サウンドを再生するときは、ALSAが機能します。あなたがあなたのウェブカメラを使うとき、それは仕事でL4V2です。
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など)とどのように異なりますか? を参照してください。