Поделиться через


Использование расширений единиц данных (Microsoft Media Foundation)

Аудио- и видеокодеки Windows Media хорошо работают с контейнером Advanced Systems Format (ASF). ASF — это структурированный формат, используемый для файлов windows Media Audio (WMA) и файлов Windows Media Video (WMV). Это расширяемый формат, предназначенный для потоковой передачи данных. Одной из необычных характеристик структуры ASF является возможность присоединять метаданные к отдельным образцам и внедрять эти данные вместе с примерами в битовый поток. Элемент метаданных, хранящийся таким образом, называется расширением единицы данных или примером расширения.

Расширение единицы данных может содержать сведения, необходимые кодировщику, декодеру или приложению проигрывателя. Большинство типов расширений единиц данных, реализованных в серии кодеков Windows Media 9, содержат данные, предназначенные для приложения, которое декодирует и отрисовывает мультимедиа. Например, можно поддерживать коды времени SMPTE из исходных данных, добавляя их в качестве расширений единиц данных. Однако для следующих функций кодека требуются расширения единиц данных:

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

Передача расширенных примеров в объекты кодека

Пакет SDK для формата Windows Media использует объекты буфера, которые предоставляют интерфейсы INSSBuffer . Последний интерфейс — INSSBuffer4. Чтобы передать примеры в объект кодека с расширениями единиц данных, необходимо использовать объект буфера, реализующий интерфейс IMediaBuffer или IMFMediaBuffer и интерфейс INSSBuffer . Для этого можно использовать объекты буфера, созданные с помощью пакета SDK для формата Windows Media или Microsoft Media Foundation, или создать собственный класс буфера, соответствующий требованиям. Чтобы создать собственный класс буфера, необходимо соответствовать прототипам методов для интерфейсов INSSBuffer . Эти определения интерфейса можно найти в файле заголовка wmsbuffer.h, который устанавливается вместе с пакетом SDK для формата Windows Media.

Кодеки Windows Media