2

我有一张捕获卡,可以捕获带有嵌入音频的 SDI 视频。我有一个 Linux 驱动程序的源代码,我正在尝试增强它以添加对 video4linux2 的支持。我的更改基于 vivi 示例。

我遇到的问题是我能找到的所有示例都只处理视频或音频。即使在客户端,一切似乎都假设 v4l 只是视频,比如 ffmpeg 的 libavdevice。

我是否需要让我的驱动程序创建两个单独的设备,一个 v4l2 设备和一个 alsa 设备?似乎这使得保持音频和视频同步的工作变得更加困难。

对于在驱动程序和应用程序之间传递的每个缓冲区(通过 v4l2 的 mmap 接口),我希望以某种方式包含一个帧,以及一些与该帧匹配(相对于时间)的音频。

或者也许让每个缓冲区包含一个标志,指示它是视频帧还是音频块。然后缓冲区上的时间戳可用于同步。

但是我没有看到使用 V4L2 API 规范的方法,也没有看到任何支持 v4l2 的应用程序(gstreamer、ffmpeg、转码等)从单个设备读取音频和视频的示例。

4

2 回答 2

2

通常,设备的音频捕获部分显示为单独的设备。它通常是不同的物理设备(可能共享一张卡),这是有道理的。我不确定这有多大帮助,但这就是我熟悉的所有软件的工作方式......

于 2009-05-27T19:56:49.137 回答
0

v4l2 缓冲区中有一些备用或保留字段,可用于通过指向映射缓冲区的指针将音频或其他数据从驱动程序传递到调用应用程序。

我修改了 BT8x8 驱动程序以使用这种方法将数据从 A/D 卡同步到 Ubuntu 6.06 上的视频。

它工作正常,但是维护我修改过的驱动程序的努力使我放弃了这种方法。

如果您仍然感兴趣,我可以挖掘细节。

如果您希望您的驱动程序使用 gstreamer 等播放,通常需要一个单独的音频设备。

大多数便宜的 v4l2 采集卡的音频只是模拟通过音量控制,需要跳线通过声卡的线路输入来采集音频。

于 2009-12-24T19:53:31.140 回答