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


Настройка расширений модуля данных

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

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

  1. Получите указатель на интерфейс IWMStreamConfig2 , вызвав метод QueryInterfaceобъекта IWMStreamConfig.
  2. Вызовите IWMStreamConfig2::AddDataUnitExtension , чтобы зарегистрировать тип расширения единицы данных для потока.

Вы можете изучить все типы расширений единиц данных, зарегистрированные в потоке, вызвав IWMStreamConfig2::GetDataUnitExtensionCount , чтобы получить количество зарегистрированных типов расширений для единиц данных. Затем можно выполнить цикл по всем типам, используя вызовы IWMStreamConfig2::GetDataUnitExtension для каждого из них.

Расширениям единиц данных назначается размер при настройке для потока. Во многих системах модулей обработки данных используются данные постоянного размера (обычно это структура). Однако вы также можете настроить для расширений единиц данных переменный размер, задав размер 0xFFFF. Каждое расширение единицы данных, назначенное во время кодирования, может иметь любой размер от 1 байта до 65534 байт. Модули для единиц данных изменяемого размера также называются динамическими модулями данных.

Преимущество использования расширений динамических единиц данных заключается в том, что при необходимости можно присоединять данные расширения. Если вы определяете расширение единицы данных с заданным размером, каждая выборка для потока должна содержать данные расширения такого размера, даже если у вас нет данных для некоторых примеров. С помощью расширений динамических единиц данных можно исключить расширения единиц данных из некоторых примеров, что экономит пространство и снижает требования к пропускной способности. Однако если расширения единиц данных имеют переменный размер, объект чтения не может проверить полученные данные расширения со статическим размером. Необходимо убедиться, что получаемые данные расширения являются допустимыми, а не вредоносными искажениями битового потока.

Отдельные расширения единиц данных должны быть заданы в примерах с помощью метода INSSBuffer3::SetProperty . Дополнительные сведения см. в разделе Настройка расширений единиц данных.

Настройка потоков