2

Насколько я понимаю , кодек - это и декодер, и спецификация для декодирования. Поэтому некоторые группы пишут кодек, который объясняет, как декодировать из своего формата обратно в необработанный поток битов, и они оставляют реализацию кодирования любому, кто хочет написать совместимый кодер. Так, например, h.264 - это известный видеокодек (декодер), а x264 - это известный FOSS-кодер для h.264. Но есть много других кодеров h.264.

Насколько я понимаю , VideoForLinux (V4L2) - это набор библиотек ядра и пользовательского пространства для работы с потоковым видео на компьютерах с Linux.

Насколько я понимаю , ALSA - это набор библиотек ядра и пользовательского пространства для работы с потоковым аудио на компьютерах с Linux.

Если что-то, что я изложил выше, неверно, пожалуйста, начните исправлять / разъяснять меня!

Если предположить, что я более или менее прав, то мне не удается понять, какую роль (если таковые имеются) должны играть V4L2 и ALSA при попытке кодировать, сжимать и передавать аудио- и видеопотоки на компьютере с Linux.

Если бы я мог использовать x264 для кодирования моего видеопотока, faac для кодирования моего аудиопотока, а затем ffmpeg для сжатия, мультиплексирования и передачи двух потоков, скажем, в контейнере MPEG-TS, тогда где в игру вступают V4L2 и ALSA?

И если ответ «они этого не делают», то кто-нибудь может привести пример или два, когда будет использоваться V4L2/ALSA , чтобы я мог представить их в контексте и понять случаи использования, где они необходимы? Заранее спасибо.

2 ответа2

1
  1. Просто тонкая деталь, большинство кодеков начинаются как спецификации, определяющие формат, и методологии, с помощью которой происходит кодирование и декодирование, включая спецификации API, если это применимо. Оттуда могут быть созданы реализации как кодера, так и декодера. Не все реализации созданы равными. Например, декодер CoreAVC H.264 является многопоточным, тогда как многие другие реализации - нет.

  2. V4L2 в основном используется для создания / захвата видео в системах Linux, поэтому в него встроен кодировщик (или, скорее всего, он ссылается на внешний). Он в основном используется для веб-камер и видеозахвата / телевизионных карт. Смотрите больше в Википедии. Приложения, которые создают необработанные потоки, используют V4L2 для кодирования видео по своему вкусу. Декодирование выполняется другим пакетом (возможно, libavcodec).

  3. ALSA содержит кодеки, но сама является стеком поддержки для всех аудио операций в Linux, поэтому, где бы вы ни слышали звук, ALSA делает то, что происходит. Я уверен, что в ALSA есть компоненты для аудиовхода (микрофон / линейный вход), поэтому он должен быть способен к некоторой форме кодирования, но я не работал с этим.

В вашем примере я не верю, что V4L2 будет задействован вообще, поскольку вы используете кодер H.264, который, вероятно, обеспечивает гораздо лучшее качество и производительность, чем V4L2. ALSA будет использоваться для воспроизведения вашего видео, но не будет использоваться при его кодировании.

Когда вы играете любой звук, это ALSA на работе. Когда вы используете свою веб-камеру, это L4V2 на работе.

0

Что касается ffmpeg, ALSA и V4L2 называются устройствами ввода, а не кодеками (не то, что термин кодек всегда точен - я обычно называю что-то кодером и / или декодером, чтобы быть более конкретным). Другие устройства ввода включают в себя JACK, pulse, x11grab, iec61883, dv1394 и т.д. Из документации FFmpeg:

Устройства ввода - это сконфигурированные элементы в FFmpeg, которые позволяют получить доступ к данным, поступающим с мультимедийного устройства, подключенного к вашей системе.

Например, вы можете использовать ALSA для записи звука с микрофона, который подключен к вашей звуковой плате. Вы можете использовать V4L2 для захвата видео с веб-камеры. Базовая, непроверенная пример команды:

ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0 output.mkv

Вы упоминаете:

h.264 - известный видеокодек (декодер)

H.264 - это стандарт, а не кодек. FFmpeg имеет декодер с именем h264 . Это может сбить с толку. См. Что такое кодек (например, DivX?) И чем он отличается от формата файла (например, MPG)?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .