Можно ли использовать v4l2 для чтения аудио и видео с одного устройства? - PullRequest
2 голосов
/ 27 мая 2009

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 мая 2009

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

0 голосов
/ 24 декабря 2009

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

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

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

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

Если вы хотите, чтобы ваш драйвер работал с gstreamer и т. Д., Как правило, требуется отдельное аудиоустройство.

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

...