Инициализация объекта ContentInfo нового ФАЙЛА ASF
После создания пустого объекта ContentInfo путем вызова функции MFCreateASFContentInfo приложение должно вызывать IMFASFContentInfo::SetProfile для предоставления профиля кодирования. Для получения информации о создании профиля см. Создание профиля ASF.
Перед чтением сведений из профиля метод SetProfile должен проверить указанный объект профиля, проверяя идентификаторы потока или типы носителей. Если профиль проходит проверку, создаются различные объекты заголовков, такие как объект Свойства файла, объект Свойства битрейта потока, объект Свойства потока и объект взаимного исключения.
SetProfile вычисляет и задает рекомендуемые значения для определенных свойств, таких как значение преролла. Если это еще не установлено, рекомендуемое значение преролла в миллисекундах зависит от максимального буферного окна течи, указанного для потоков в профиле. Аналогичным образом также задаются минимальные и максимальные размеры пакетов данных. Рекомендуемые значения могут переопределить размеры пакетов, заданные в профиле с помощью атрибутов.
Так как файл находится в процессе создания, файл классифицируется как тип вещания, который обозначается полем Флагов объекта свойств файла. Некоторые неизвестные значения, такие как количество пакетов данных, длительность воспроизведения и длительность отправки, равны нулю. Эти значения представлены MF_PD_ASF_xxx атрибутами и должны обновляться приложением после завершения создания файла.
Указанный объект профиля заменяет любой существующий профиль, связанный с объектом ContentInfo, удаляет объекты заголовка со ссылкой и сбрасывает глобальные свойства файла, такие как размер предварительного запуска и пакета данных.
Метод SetProfile также создает объект данных, представляющий объект данных ASF. Если вы повторно используете объект ContentInfo, содержащий сведения о пакетах данных, SetProfile завершается ошибкой и возвращает ошибку MF_E_ALREADY_INITIALIZED, указывающую, что она уже связана с существующим объектом данных ASF. По умолчанию для нового объекта ContentInfo число пакетов данных равно нулю, а размер объекта данных — 50 байт. При использовании мультиплексера для создания пакетов данных мультиплексер обновляет объект ContentInfo, чтобы отразить новые значения, такие как число пакетов данных. Дополнительные сведения о создании пакетов данных см. в разделе Создание новых пакетов данных ASF.
После добавления всех объектов заголовков в окончательный объект заголовка ASF общий размер заголовка можно получить путем вызова IMFASFContentInfo::GetHeaderSize. Этот размер включает начальный размер объекта данных.
Связанные разделы