Создание и настройка Потоки ASF

Каждый ФАЙЛ ASF содержит один или несколько потоков. Объект профиля ASF представляет коллекцию потоков ASF. Для кодирования ASF необходимо создать и настроить потоки, которые требуется кодировать.

Приложение может выполнять следующие задачи с объектом профиля ASF:

  • Добавление или удаление потока.
  • Получите параметры конфигурации потока.
  • Настройте расширения полезных данных.
  • Добавление, удаление или изменение объекта взаимного исключения ASF.

Эта тема описана в следующих разделах.

Создание нового потока

Объект профиля ASF должен содержать параметры конфигурации по крайней мере для одного потока ASF. Каждый поток представлен объектом конфигурации потока, который предоставляет интерфейс IMFASFStreamConfig. Сведения в объекте конфигурации потока соответствуют объекту "Свойства потока" и объектам расширенных потоков в заголовке ФАЙЛА ASF. (См. раздел Структура файлов ASF.)

Чтобы добавить поток в профиль ASF, выполните следующие действия.

  1. Создайте пустой объект конфигурации потока.
  2. Настройте поток в соответствии с требованиями приложения.
  3. Добавьте поток в профиль.

Чтобы создать поток для профиля, вызовите МВФASFProfile::CreateStream для создания объекта конфигурации пустого потока и получения указателя в параметре ppIStream . CreateStream должен знать тип создаваемого потока. Наиболее распространенными типами потоков, используемых в ФАЙЛАх ASF, являются звуковые и видеопотоки. В Media Foundation типы потоков обозначаются объектом типа мультимедиа, предоставляющим интерфейс МВФMediaType . Основной тип типа мультимедиа определяет категорию цифрового потока мультимедиа, например аудио или видео. Подтип определяет формат основного типа. Исходный тип носителя, заданный CreateStream , можно изменить с помощью объекта конфигурации steam. Чтобы получить тип носителя для потока, вызовите МВФASFStreamConfig::GetMediaType или чтобы получить основной тип вызова IMFASFStreamConfig::GetStreamType. Исходный тип носителя для потока можно заменить новым настроенным типом носителя, вызвав МВФASFStreamConfig::SetMediaType.

Если приложение создает профиль из допустимого дескриптора презентации путем вызова MFCreateASFProfileFromPresentationDescriptor. Функция автоматически задает объекты конфигурации потока для каждого потока и задает их в профиле. Типы мультимедиа потоков задаются на основе дескрипторов потока, связанных с дескриптором презентации.

Назначение номеров потоков

Потоки всех типов необходимо назначить номер потока. Номера потоков не должны быть последовательными, но должны находиться в диапазоне от 1 до 127. Чтобы назначить номера потоков, вызовите МВФASFStreamConfig::SetStreamNumber. Чтобы получить вызов номера потока, МВФASFStreamConfig::GetStreamNumber.

Примечание.

Номер потока отличается от индекса потока, который используется при получении потоков в профиле с помощью IMFASFProfile::GetStream. Индекс потока является номером, назначенным потоку объектом профиля. Диапазон индексов потоков в диапазоне от 0 до одного меньше количества потоков, полученных МВФASFProfile::GetStreamCount. Вы также можете получить поток из профиля по номеру потока, вызвав МВФASFProfile::GetStreamByNumber.

 

Установка нечетких значений контейнеров

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

Эти значения доступны приложению через атрибут MF_ASFSTREAMCONFIG_LEAKYBUCKET1 и атрибут MF_ASFSTREAMCONFIG_LEAKYBUCKET2. Для кодирования файлов фактические значения зависят от типа кодирования и определяются кодировщиком. Если у вас уже есть настроенный кодировщик и тип вывода задан в кодировщике, приложение должно запросить кодировщик для параметров утечки контейнера и задать значения в этих атрибутах.

Если вы используете компоненты слоя конвейера и настраиваете потоки для приемника мультимедиа ASF, скорее всего, у вас нет настроенного кодировщика. В этом случае необходимо запросить переговоры по типу носителя кодировщика и задать обновленное значение в свойстве MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET хранилища свойств приемника мультимедиа ASF. Хранилище свойств кодирования извлекается через объект ContentInfo, связанный с профилем. Обновленные значения отражаются автоматически в значениях атрибутов контейнера утечки потока. Общие сведения о утечках контейнеров и способах получения значения утечки контейнера из кодировщика см. в модели буфера утечки.

Расширения полезных данных

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

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

Чтобы получить общее количество расширений полезных данных, заданных в потоке, вызовите МВФASFStreamConfig::GetPayloadExtensionCount, а затем перечислите список путем вызова МВФASFStreamConfig::GetPayloadExtension. Чтобы добавить расширение полезных данных для потока, вызовите МВФASFStreamConfig::AddPayloadExtension. Это добавит дополнительные данные в отдельные примеры мультимедиа, созданные для потока.

Чтобы удалить существующие расширения полезных данных, связанные с потоком, вызовите МВФASFStreamConfig::RemoveAllPayloadExtensions.

Добавление потока в профиль

После настройки потока вызовите IMFASFProfile::SetStream , чтобы добавить поток в профиль.

Чтобы удалить существующий поток в профиле, вызовите МВФASFProfile::RemoveStream.

Настроенный профиль необходимо задать в объекте ContentInfo путем вызова МВФASFContentInfo::SetProfile. При внесении изменений в существующий поток необходимо снова добавить его в профиль и задать профиль в объекте ContentInfo.

Профиль ASF

Поддержка ASF в Media Foundation

Компоненты ASF WMContainer