配置数据单元扩展

写入 ASF 文件的示例可以包含除媒体示例本身之外的其他信息。 此信息包含在数据单元扩展中。 有关数据单元扩展的详细信息,请参阅 数据单元扩展

若要使用数据单元扩展,必须在配置文件中配置流以接受它们。 若要为流配置数据单元扩展,请执行以下步骤。

  1. 通过调用 IWMStreamConfigQueryInterface 方法获取 指向 IWMStreamConfig2 接口的指针。
  2. 调用 IWMStreamConfig2::AddDataUnitExtension 为流注册一种类型的数据单元扩展。

可以通过调用 IWMStreamConfig2::GetDataUnitExtensionCount 来检索已注册的数据单元扩展类型数,检查当前为流注册的所有数据单元扩展类型。 然后,可以使用对每个类型调用 IWMStreamConfig2::GetDataUnitExtension 来循环访问所有类型。

为流配置数据单元扩展时,会为数据单元扩展分配一个大小。 许多数据单元扩展系统使用大小恒定的数据 (通常是结构) 。 但是,还可以通过将大小设置为 0xFFFF,将数据单元扩展配置为可变大小。 编码时分配的每个数据单元扩展都可以是 1 字节到 65534 字节之间的任意大小。 大小可变的数据单元扩展也称为动态数据单元扩展。

使用动态数据单元扩展的优点是可以根据需要附加扩展数据。 如果定义具有设置大小的数据单元扩展,则流的每个样本都必须包含该大小的扩展数据,即使某些样本没有数据也是如此。 使用动态数据单元扩展,可以从某些示例中省略数据单元扩展,从而节省空间并减少带宽要求。 但是,如果数据单元扩展的大小可变,则读取对象无法根据静态大小验证收到的扩展数据。 必须验证收到的扩展数据是否有效,而不是对位流进行恶意失真。

必须使用 INSSBuffer3::SetProperty 方法在样本上设置单个数据单元扩展。 有关详细信息,请参阅 设置数据单元扩展

配置流