У меня есть карта захвата, которая захватывает видео SDI со встроенным звуком. У меня есть исходный код для драйвера Linux, который я пытаюсь улучшить, добавив поддержку video4linux2. Мои изменения основаны на примере VIVI.
Проблема, с которой я столкнулся, заключается в том, что все примеры, которые я могу найти, касаются только видео или только аудио. Даже на стороне клиента все, кажется, предполагают, что v4l - это просто видео, как в libavdevice ffmpeg.
Нужно ли, чтобы мой драйвер создавал два отдельных устройства, устройство v4l2 и устройство alsa? Похоже, это значительно усложняет синхронизацию аудио и видео.
Я бы предпочел, чтобы каждый буфер, передаваемый между драйвером и приложением (через интерфейс mmap v4l2), содержал кадр, а также некоторое аудио, которое совпадает (по времени) с этим кадром.
Или, возможно, каждый буфер содержит флаг, указывающий, является ли это видеокадром или фрагментом аудио. Тогда отметки времени на буферах могут быть использованы для синхронизации.
Но я не вижу способа сделать это с помощью спецификации API V4L2, а также не вижу примеров приложений с поддержкой v4l2 (gstreamer, ffmpeg, transcode и т. Д.), Читающих как аудио, так и видео с одного устройства.