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


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

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

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

Настройка объекта ContentInfo с параметрами кодировщика

Цифровые аудио- или видеоданные мультимедиа являются сложными и занимают большой объем памяти. В большинстве случаев аудио и видео сжимаются с помощью кодировщиков перед добавлением в ASF-файл. В Media Foundation кодировщики реализуются как преобразования Media Foundation (MFT) с одним входом и одним выходом. Необходимо выбрать тип выходного носителя в зависимости от типа носителя входного потока и типа кодирования, выбранного для сжатия потока.

Перед сеансом кодирования кодировщик необходимо настроить, задав соответствующие свойства в зависимости от типа кодирования.

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

  1. Получите указатель на хранилище свойств кодировщика, запросив кодировщик (интерфейс IMFTransform ) непосредственно для интерфейса IPropertyStore .
  2. Вызовите IMFASFContentInfo::GetEncodingConfigurationPropertyStore. Чтобы задать свойства потока, укажите идентификатор потока в параметре wStreamNumber ; для свойств уровня файла передайте значение 0. Параметр ppIStore получает указатель на интерфейс IPropertyStore . Полученное хранилище свойств пусто.
  3. Вызовите метод IPropertyStore::GetValue в кодировщике и получите значение свойства, указав константы ключа свойства. Полный список свойств кодирования см. в справочнике по программированию кодека.
  4. Вызовите метод IPropertyStore::SetValue для объекта ContentInfo, чтобы задать требуемое свойство в хранилище свойств.
  5. Повторите шаги 3 и 4 для каждого свойства, которое вы хотите задать.

Приемник мультимедиа ASF можно создать с помощью объекта активации, вызвав MFCreateASFMediaSinkActivate. Новый объект приемника мультимедиа настраивается на основе параметров приемника мультимедиа, которые можно задать в хранилище свойств объекта ContentInfo. В следующей таблице показаны константы свойств приемника мультимедиа ASF.

Свойство Описание
MFPKEY_ASFMEDIASINK_BASE_SENDTIME Время отправки указывает, когда будут освобождены полезные данные в контейнере с утечкой. Это значение свойства указывает время первой отправки. Мультиплексор использует это значение для вычисления времени последующей отправки для сгенерированных пакетов и обеспечивает постоянный поток данных через контейнер утечки.
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE Это значение BOOL указывает, нужно ли мультиплексору автоматически настраивать скорость передачи, чтобы гарантировать, что данные не переполняют негерметичный контейнер.
MFPKEY_ASFMEDIASINK_DRMACTION Это указывает на действие DRM приемника мультимедиа ASF для создания файлов. В этом выпуске поддерживается только перекодирование DRM.
MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET Это свойство необходимо задать, когда кодировщик решает, какое окно буфера и скорость передачи данных следует использовать. Чтобы задать эти значения, используйте интерфейс IWMCodecLeakyBucket . Его необходимо задать для каждого потока в ASF-файле.

 

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