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

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

Потоки

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

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

Сжатие

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Форматы

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

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

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

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

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

схема с компонентами для чтения файла мультимедиа

Для написания файла мультимедиа также требуется два шага.

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

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

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

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