我有一张捕获卡,可以捕获带有嵌入音频的SDI视频。我有一个Linux驱动程序的源代码,我正在尝试增强它以添加video4linux2支持。我的更改基于vivi示例。
我遇到的问题是我能找到的所有例子都只涉及视频或仅涉及音频。即使在客户端,一切似乎都假设v4l只是视频,就像ffmpeg的libavdevice。
我是否需要让我的驱动程序创建两个独立的设备,一个v4l2设备和一个alsa设备?这似乎使得保持音频和视频同步更加困难。
我更喜欢在驱动程序和应用程序之间传递的每个缓冲区(通过v4l2的mmap接口)包含一个帧,以及一些与该帧匹配的音频(相对于时间)。
或许每个缓冲区都包含一个标志,指示它是视频帧还是一大块音频。然后缓冲区上的时间戳可用于同步。
但是我没有看到使用V4L2 API规范的方法,也没有看到任何启用v4l2的应用程序(gstreamer,ffmpeg,转码等)从单个设备读取音频和视频的示例。
答案 0 :(得分:2)
通常,设备的音频捕获部分显示为单独的设备。它通常是一个不同的物理设备(可以共享一张卡),这是有道理的。我不确定有多少帮助,但这就是我熟悉的所有软件的工作方式......
答案 1 :(得分:0)
v4l2缓冲区中有一些备用或保留字段,可用于通过指向mmaped缓冲区的指针将音频或其他数据从驱动程序传递到调用应用程序。
我修改了BT8x8驱动程序,使用这种方法从同步到Ubuntu 6.06上的视频的A / D卡传递数据。
它工作正常,但维护我修改过的驱动程序的努力导致我放弃了这种方法。
如果您仍然感兴趣,我可以挖掘出详细信息。
如果您希望您的驱动程序使用gstreamer等,则通常会提供单独的音频设备。
大多数便宜的v4l2采集卡的音频只是一个模拟传递,音量控制需要跳线才能通过声卡的线路输入捕获音频。