Потоковое аудио / видео: кто мультиплексируется и кодируется, где и когда?
Я просматривал список поддерживаемых VLC видео / аудио форматов и понял, что на самом деле очень мало знаю о потоковой передаче мультимедиа.
Если поток потокового мультимедиа содержит как аудио, так и видео, как эти отдельные сигналы объединяются / объединяются в один? В какой-то момент я предполагаю, что видеокадр (с камеры) и звуковой кадр (с микрофона) объединяются в один и тот же сигнал?
Я бы предположил, что оттуда интегрированный A/V-сигнал кодируется?
Или они оба кодируются отдельно, а затем интегрируются / мультиплексируются вместе?
И является ли мультиплексирование даже правильным словом / процессом, чтобы описать, как они интегрированы?
Заранее спасибо.
1 ответ
Прежде всего, вы должны различать видео / аудио кодек и мультимедийный контейнер. Я более подробно рассказал о разнице между кодеками и контейнерами в другом ответе суперпользователя. Вкратце, существует контейнер для хранения различных потоков аудио и видео (и субтитров, данных, изображений и т. Д.).
Этот процесс объединения потоков битов в один контейнер действительно часто называют "мультиплексированием". Вы можете назвать процесс чередования аудио / видео для мультиплексирования контейнера, но, строго говоря, этот термин относится к мультиплексированию транспортного потока MPEG-2. Мы вернемся к этому позже.
Сейчас существуют различные форматы контейнеров, но все они служат одной и той же цели: работа с синхронизацией потоков внутри. Вы хотите удостовериться, что части, играющие вместе, воспроизводятся одновременно. Контейнер несет метаинформацию, которая, в частности, сообщает устройству воспроизведения, где искать и во что играть, скажем, 00:02:01.250.
Другие вещи, которые позволяют вам делать контейнеры, включают в себя информацию о самом потоке. Например, во многих потоковых контекстах проигрыватель должен знать размер видео, его частоту кадров, различные другие вещи. При потоковой передаче файла MP4 (MPEG-4 Part 14 является контейнером, а не кодеком), вы хотите, чтобы атом MOOV был помещен в начало файла, чтобы проигрыватель мог его сразу проанализировать. Обычно этот "атом" данных располагается в конце файла, где он не очень полезен, потому что перед потоковой передачей вам придется загрузить весь файл. Вот почему существуют инструменты для его перемещения в начало, такие как qt-faststart.
Однако важно то, что в любом мультимедийном приложении, которое мультиплексирует контейнеры из отдельных битовых потоков, эти потоки кодируются первыми. Там нет "интегрированного аудио / видео сигнала", который закодирован - контейнер просто обернет то, что там, и не коснется реальных аудио и видео данных. Итак, ваше видео подается на видеокодер, ваше аудио подается на аудиокодер. Результат обеих этих задач объединяется / перемежается в контейнере. Контейнер позаботится о сборке конечного потока битов, который может быть передан в контексте потоковой передачи или сохранен в виде файла.
Сейчас есть много контейнеров, которые подходят для различных приложений. Транспортные потоки MPEG-2 обычно используются в телевизионном вещании. Здесь несколько телевизионных каналов мультиплексируются в один контейнер, который затем передается по воздуху, кабелю или спутнику. Методом мультиплексирования является мультиплексирование с временным разделением. Здесь "мультиплексирование" также является правильным техническим термином. Для других контейнеров это используется не так часто. MPEG-4 Part 14 (MP4, мы кратко упомянули об этом раньше), с другой стороны, очень распространен в сети и в мобильном контексте, и он становится все более и более стандартным для обмена файлами, даже в профессиональной сфере.
Существуют и другие контейнеры, такие как MKV, Ogg, программные потоки MPEG, FLV и многие другие. Как вы можете видеть, какой из них выбрать, зависит от приложения, но здесь это далеко выходит за рамки.