我有一张捕获卡,可以捕获带有嵌入音频的 SDI 视频。我有一个 Linux 驱动程序的源代码,我正在尝试增强它以添加对 video4linux2 的支持。我的更改基于 vivi 示例。
我遇到的问题是我能找到的所有示例都只处理视频或音频。即使在客户端,一切似乎都假设 v4l 只是视频,比如 ffmpeg 的 libavdevice。
我是否需要让我的驱动程序创建两个单独的设备,一个 v4l2 设备和一个 alsa 设备?似乎这使得保持音频和视频同步的工作变得更加困难。
对于在驱动程序和应用程序之间传递的每个缓冲区(通过 v4l2 的 mmap 接口),我希望以某种方式包含一个帧,以及一些与该帧匹配(相对于时间)的音频。
或者也许让每个缓冲区包含一个标志,指示它是视频帧还是音频块。然后缓冲区上的时间戳可用于同步。
但是我没有看到使用 V4L2 API 规范的方法,也没有看到任何支持 v4l2 的应用程序(gstreamer、ffmpeg、转码等)从单个设备读取音频和视频的示例。