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


Кодирование чересстрочного видео (Microsoft Media Foundation)

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

В прошлом переплетированные видеоконтенты всегда были разобжены перед кодировкой с помощью кодека Видео в Windows Media. Начиная с серии Windows Media 9, видеокодировщик поддерживает сжатие чересстрочного содержимого без предварительного преобразования его в прогрессивную развертку. Поддержание чересстрочной развертки в закодированном файле важно, если содержимое когда-либо отображается на чересстрочном дисплее, например, телевизоре. Эта функция становится все более важной, так как поддержка содержимого на базе Windows Media распространяется на DVD-проигрыватели, приставки и другую домашнюю электронику.

Самый простой способ кодирования и доставки разных видео — разработка приложения с помощью пакета SDK для формата Windows Media и хранение содержимого в файлах ASF. Перемежающаяся информация о кадрах передается в кодек с помощью расширений единиц данных, которые хорошо работают для содержимого ASF, но требуют большей поддержки в других контейнерах. Дополнительные сведения о расширениях единиц данных см. в разделе Использование расширений единиц данных.

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

Чересстрочное видео и кодировщик

Первым шагом в кодировании видео с сохранением чересстрочной развертки является настройка кодировщика для кодирования чересстрочных полей. Для этого задайте для свойства MFPKEY_INTERLACEDCODINGENABLED значение TRUE. Это подготавливает кодировщик для получения чересстрочных образцов. Каждый входной пример должен содержать оба поля.

Каждый образец, который обрабатывается кодировщиком после активации чересстрочной кодировки, должен иметь расширение единицы данных. Предполагается, что примеры без ожидаемого расширения единицы данных являются прогрессивными. Идентификатор GUID, определяющий расширение, — D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. Значения, передаваемые объектами пакета SDK для формата Windows Media, определяются в следующей таблице.

Ценность Описание
0x00000020 Указывает, что пример закодирован первым нижним полем. Это значение имеет смысл только в сочетании с чересстрочным значением.
0x00000040 Указывает, что пример закодирован первым верхним полем. Это значение имеет смысл только в сочетании с чересстрочным значением.
0x00000080 Указывает, что образец чересстрочный. Это единственное значение, которое имеет смысл для динамических административных объектов кодека.

 

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

Объект записи SDK формата Windows Media включает расширения единиц данных типа контента в образцах, которые он записывает в раздел данных контейнера ASF для использования при воспроизведении.

Чтение и отрисовка чересстрочного видео

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

Трудности при воспроизведении чересстрочного видео возникают после того, как декодатор передает кадры. Отрисовщик (видеокарта или микросхема в устройстве) не может правильно отображать видеоконтент, не зная, какое поле является каким. В приложениях, использующих Windows Media Format SDK, расширение блока данных типа контента извлекается из несжатых образцов и может передаваться на устройство.

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

Заметка

Установка свойства MFPKEY_INTERLACEDCODINGENABLED в TRUEи последующее неотправление образцов с прикрепленным расширением типа контента может привести к сбою кодировщика. Задайте кодировщик для чересстрочной кодировки только в том случае, если у вас есть чересстрочные образцы для передачи.

 

работа с видео