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

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

Потоки

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

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

Сжатие

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

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

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

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

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

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

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

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

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

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

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

Ранним примером контейнера мультимедиа является формат 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