Video4Linux 和 ALSA 如何与编解码器配合使用

Video4Linux 和 ALSA 如何与编解码器配合使用

我的理解那是一个编解码器既是解码器,也是解码规范。因此,一些小组编写了一个编解码器,解释了如何解码从其格式恢复到原始比特流,然后它们离开编码任何想要编写兼容编码器的人都可以实现。例如,h.264 是一个著名的视频编解码器,x264 是一个著名的 h.264 FOSS 编码器。但还有许多其他 h.264 编码器。

我的理解VideoForLinux (V4L2) 是一套用于在 Linux 机器上处理流视频的内核和用户空间库。

我的理解ALSA 是一套内核和用户空间库,用于在 Linux 机器上处理流音频。

如果我上面所述的任何内容不正确,请首先纠正/澄清我!

假设我或多或少是正确的,那么我就看不出在 Linux 机器上尝试编码、压缩和传输音频和视频比特流时 V4L2 和 ALSA 必须发挥什么作用(如果有的话)。

如果我可以使用 x264 来编码我的视频流,使用 faac 来编码我的音频流,然后在ffmpegMPEG-TS 容器内部压缩、多路复用和传输这两个流,那么 V4L2 和 ALSA 在哪里发挥作用?

如果答案是“他们不这样做”,那么有人可以给出一两个 V4L2/ALSA 的例子吗?如何使用它们,以便我可以将它们放在上下文中并了解需要它们的用例?提前致谢。

答案1

  1. 需要注意的是,大多数编解码器都是从定义格式和编码和解码方法的规范开始的,如果适用,还包括 API 规范。从那里可以创建编码器和解码器的实现。并非所有实现都是平等的。例如,CoreAVC H.264 解码器是多线程的,而许多其他实现则不是。

  2. V4L2 主要用于在 Linux 系统上创建/捕获视频,因此它内置了一个编码器(或者更可能引用外部编码器)。它主要用于网络摄像头和视频捕获/电视卡。查看更多在维基百科上。创建原始流的应用程序使用 V4L2 根据自己的喜好对视频进行编码。解码由不同的包(可能是 libavcodec)完成。

  3. 阿尔萨斯大学包含编解码器,但本身是 Linux 中所有音频操作的支持堆栈,因此无论您在哪里听到声音,ALSA 都会实现这一点。我确信 ALSA 有用于音频输入(麦克风/线路输入)的组件,因此它必须能够进行某种形式的编码,但我没有用过它。

在您的示例中,我认为 V4L2 根本不会参与其中,因为您使用的是 H.264 编码器,它可能提供比 V4L2 更好的质量和性能。ALSA 将用于播放您的视频,但不会用于对其进行编码。

当你播放任何声音时,这就是 ALSA 在工作。当你使用网络摄像头时,这就是 L4V2 在工作。

答案2

至于 ffmpeg,ALSA 和 V4L2 被称为输入设备,而不是编解码器(并不是说这个术语编解码器总是准确的——我一般称之为编码器和/或解码器。其他输入设备包括 JACK、脉冲、x11grab、iec61883、dv1394 等。从FFmpeg 文档

输入设备是 FFmpeg 中配置的元素,允许访问来自连接到系统的多媒体设备的数据。

例如,您可以使用阿尔萨斯大学捕获插入音频卡的麦克风的音频。您可以使用V4L2从网络摄像头捕获视频。未经测试的基本示例命令:

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

你提到:

h.264 是一个著名的视频编解码器(解码器)

H.264 是一种标准,而不是编解码器。FFmpeg 有一个名为 的解码器h264。这可能会造成混淆。请参阅什么是编解码器(例如 DivX?),它与文件格式(例如 MPG)有何不同?

相关内容