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


Инициализация объекта ContentInfo нового ФАЙЛА ASF

После создания пустого объекта ContentInfo путем вызова функции MFCreateASFContentInfo приложение должно вызвать IMFASFContentInfo::SetProfile , чтобы предоставить профиль кодирования. Сведения о создании профиля см. в разделе Создание профиля ASF.

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

SetProfile вычисляет и задает рекомендуемые значения для определенных свойств, таких как значение preroll. Если этот параметр еще не задан, рекомендуемое значение предварительной подготовки в миллисекундах зависит от максимального окна буфера неисхоемого контейнера, указанного для потоков в профиле. Аналогичным образом задаются минимальные и максимальные размеры пакетов данных. Рекомендуемые значения могут переопределять размеры пакетов, заданные в профиле с помощью атрибутов.

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

Указанный объект профиля заменяет любой существующий профиль, связанный с объектом ContentInfo, удаляет указанные объекты заголовков и сбрасывает глобальные свойства файла, такие как preroll и размер пакета данных.

Метод SetProfile также создает объект данных, представляющий объект данных ASF. При повторном использовании объекта ContentInfo, который содержит сведения о любых пакетах данных, SetProfile завершается ошибкой и возвращает ошибку MF_E_ALREADY_INITIALIZED, указывающую на то, что он уже связан с существующим объектом данных ASF. По умолчанию для нового объекта ContentInfo количество пакетов данных равно нулю, а размер объекта данных — 50 байт. Если мультиплексор используется для создания пакетов данных, мультиплексор обновляет объект ContentInfo для отражения новых значений, таких как число пакетов данных. Дополнительные сведения о создании пакетов данных см. в статье Создание новых пакетов данных ASF.

После добавления всех объектов заголовков в окончательный объект заголовка ASF общий размер заголовка можно получить, вызвав IMFASFContentInfo::GetHeaderSize. Этот размер включает исходный размер объекта данных.

Задание свойств в объекте ContentInfo

Запись объекта заголовка ASF для нового файла