Media Foundation: основные понятия

Если вы не знакомы с цифровыми носителями, в этом разделе описываются некоторые понятия, которые необходимо понимать перед написанием приложения Media Foundation.

Потоки

Поток — это последовательность данных мультимедиа с универсальным типом. Наиболее распространенными типами являются аудио и видео, но поток может содержать практически любой тип данных, включая текст, команды скриптов и изображения. Поток терминов в этой документации не подразумевает доставку по сети. Файл мультимедиа, предназначенный для локального воспроизведения, также содержит потоки.

Как правило, файл мультимедиа содержит либо один аудиопоток, либо только один видеопоток и один аудиопоток. Однако файл мультимедиа может содержать несколько потоков одного типа. Например, видеофайл может содержать аудиопотоки на нескольких разных языках. Во время выполнения приложение выбирает, какой поток следует использовать.

Сжатие

Сжатие относится к любому процессу, который уменьшает размер потока данных, удаляя избыточные сведения. Алгоритмы сжатия делятся на две широкие категории:

  • Сжатие без потери . Используя алгоритм без потери, восстановленные данные идентичны исходному.
  • Сжатие потери . Используя алгоритм потери, восстановленные данные являются приближением исходного, но не является точным совпадением.

В большинстве других доменов сжатие потери неприемлемо. (Imagine вернуться к "приближению" электронной таблицы!) Но схемы сжатия потери хорошо подходят для аудио и видео, по нескольким причинам.

Первая причина связана с физикой человеческого восприятия. Когда мы слушаем сложный звук, как музыка запись, некоторые сведения, содержащиеся в этом звуке, не восприимчивы к уху. С помощью теории обработки сигналов можно анализировать и разделять частоты, которые не могут восприниматься. Эти частоты можно удалить без перцептивного эффекта. Хотя реконструированный звук не будет точно соответствовать оригиналу, он будет звучать так же для прослушивателя. Аналогичные принципы применяются к видео.

Во-вторых, некоторые ухудшения качества звука или изображения могут быть приемлемыми в зависимости от предполагаемой цели. Например, в телефонии звук часто сильно сжимается. Результат достаточно хорош для телефонного разговора, но вы не хотите слушать симфонический оркестр по телефону.

Сжатие также называется кодировкой, а устройство, которое кодирует, называется кодировщиком. Обратный процесс расшифровывается, и устройство естественно называется декодером. Общим термином для кодировщиков и декодеров является кодек. Кодеки можно реализовать в оборудовании или программном обеспечении.

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

Контейнеры мультимедиа

Редко можно хранить необработанный аудио- или видеопоток в виде файла компьютера или отправлять его непосредственно по сети. Для одной вещи было бы невозможно декодировать такой поток, не зная заранее, какой кодек следует использовать. Поэтому файлы мультимедиа обычно содержат по крайней мере некоторые из следующих элементов:

  • Заголовки файлов, описывающие количество потоков, формат каждого потока и т. д.
  • Индекс, обеспечивающий случайный доступ к содержимому.
  • Метаданные, описывающие содержимое (например, художник или заголовок).
  • Заголовки пакетов для включения сетевой передачи или случайного доступа.

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

Ранним примером контейнера мультимедиа является формат файла AVI. Другие примеры включают MP4 и расширенный формат систем (ASF). Контейнеры можно определить по расширению имени файла (например, .mp4) или по типу MIME.

На следующей схеме показана типичная структура контейнера мультимедиа. Схема не представляет какой-либо конкретный формат; Подробные сведения о каждом формате сильно различаются.

diagram showing a typical media container

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

Термин мультиплексирования относится к процессу пакетизации аудио- и видеопотоков и чередование пакетов в контейнер. Обратный процесс, перезаписывая потоки из пакетовых данных, называется демультиплексированием.

Форматы

В цифровых носителях термин имеет неоднозначный формат . Формат может ссылаться на тип кодирования, например видео H.264 или контейнер, например MP4. Это различие часто запутано для обычных пользователей. Имена, заданные в форматах мультимедиа, не всегда помогают. Например, MP3 относится как к формату кодирования (MPEG-1 Audio Layer 3), так и к формату файла.

Однако различие имеет важное значение, так как чтение файла мультимедиа фактически включает в себя два этапа:

  1. Во-первых, контейнер должен быть проанализирован. В большинстве случаев количество потоков и формат каждого потока не могут быть известны до завершения этого шага.
  2. Затем, если потоки сжимаются, их необходимо декодировать с помощью соответствующих декодеров.

Этот факт вполне естественно приводит к программному проектированию, в котором отдельные компоненты используются для анализа контейнеров и декодирования потоков. Кроме того, этот подход поддается модели подключаемого модуля, чтобы сторонние разработчики могли предоставлять собственные средства синтаксического анализа и кодеки. На Windows модель com предоставляет стандартный способ отделить API от реализации, что является обязательным требованием для любой модели подключаемого модуля. По этой причине (среди прочего), Media Foundation использует COM-интерфейсы.

На следующей схеме показаны компоненты, используемые для чтения файла мультимедиа:

diagram showing the components to read a media file

Для записи файла мультимедиа также требуется выполнить два действия:

  1. Кодирование несжатых аудио- и видеоданных.
  2. Помещение сжатых данных в определенный формат контейнера.

На следующей схеме показаны компоненты, используемые для записи файла мультимедиа:

diagram showing the components to write a media file.

Руководство по программированию Media Foundation