Можно ли использовать v4l2 для чтения аудио и видео с одного устройства?

StackOverflow https://stackoverflow.com/questions/917060

  •  06-09-2019
  •  | 
  •  

Вопрос

У меня есть карта захвата, которая захватывает видео SDI со встроенным звуком.У меня есть исходный код драйвера Linux, который я пытаюсь улучшить, добавив поддержку video4linux2.Мои изменения основаны на примере vivi.

Проблема, с которой я столкнулся, заключается в том, что все примеры, которые я могу найти, касаются только видео или только звука.Даже на стороне клиента кажется, что все предполагает, что v4l — это просто видео, как libavdevice ffmpeg.

Нужно ли мне, чтобы мой драйвер создавал два отдельных устройства: устройство v4l2 и устройство alsa?Похоже, что это значительно усложняет синхронизацию аудио и видео.

Я бы предпочел, чтобы каждый буфер, передаваемый между драйвером и приложением (через интерфейс mmap v4l2), содержал кадр, а также некоторый звук, который совпадает (по времени) с этим кадром.

Или, возможно, каждый буфер должен содержать флаг, указывающий, является ли это видеокадром или фрагментом звука.Тогда метки времени в буферах можно было бы использовать для синхронизации.

Но я не вижу способа сделать это с помощью спецификации API V4L2, а также не вижу примеров приложений с поддержкой v4l2 (gstreamer, ffmpeg, transcode и т. д.), считывающих как аудио, так и видео с одного устройства.

Это было полезно?

Решение

Обычно часть устройства, предназначенная для захвата звука, отображается как отдельное устройство.Обычно это другое физическое устройство (возможно, использующее общую карту), что имеет смысл.Я не уверен, насколько это поможет, но именно так работает все программное обеспечение, с которым я знаком...

Другие советы

В буферах v4l2 есть несколько запасных или зарезервированных полей, которые можно использовать для передачи аудио или других данных от драйвера вызывающему приложению через указатели на буферы mmaped.

Я модифицировал драйвер BT8x8, чтобы использовать этот подход для передачи данных с аналого-цифровой карты, синхронизированных с видео в Ubuntu 6.06.

Это работало нормально, но усилия по поддержанию моего модифицированного драйвера заставили меня отказаться от этого подхода.

Если вам все еще интересно, я мог бы узнать подробности.

ЕСЛИ вы хотите, чтобы ваш драйвер играл с gstreamer и т. д.обычно ожидается отдельное аудиоустройство.

Большая часть звука дешевой карты захвата v4l2 представляет собой только аналоговый проход с регулировкой громкости, требующей перемычки для захвата звука через линейный вход звуковой карты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top