将数据单元扩展 (Microsoft Media Foundation)

Windows Media 音频和视频编解码器设计为可与高级系统格式 (ASF) 容器配合使用。 ASF 是用于 Windows Media Audio (WMA) 文件和 Windows Media Video (WMV) 文件的结构化格式。 它是一种可扩展的格式,专为流式处理数据而设计。 ASF 结构的一个不同寻常特征是能够将元数据附加到单个样本,并将该数据与位流中的样本一起嵌入。 以这种方式存储的元数据项称为数据 单元扩展示例扩展

数据单元扩展可以包含编码器、解码器或播放器应用程序所需的信息。 在 Windows Media 9 系列编解码器中实现的大多数数据单元扩展类型都包含用于解码和呈现媒体的应用程序的数据。 例如,可以通过将源数据添加为数据单元扩展来维护 SMPTE 时间代码。 但是,以下编解码器功能需要数据单元扩展:

  • 强制关键帧插入
  • 隔行扫描视频编码
  • 直接访问编解码器时使用数据单元扩展的困难在于对象接收扩展数据的机制。 这是通过使用旨在支持此功能的缓冲区对象通过 Windows Media Format SDK 的对象来实现的。 建议使用 Windows Media Format SDK 来激活需要数据单元扩展的编解码器功能,但你可以使这些功能适用于独立的编解码器对象。

将扩展示例传递给编解码器对象

Windows Media Format SDK 使用公开 INSSBuffer 接口的 缓冲区对象。 最新接口为 INSSBuffer4。 若要将示例传递给具有数据单元扩展的编解码器对象,必须使用实现 IMediaBufferIMFMediaBuffer 接口和 INSSBuffer 接口的缓冲区对象。 可以使用 Windows Media Format SDK 或 Microsoft Media Foundation 创建的缓冲区对象来实现此目的,也可以创建自己的满足要求的缓冲区类。 若要创建自己的缓冲区类,必须符合 INSSBuffer 接口的方法原型。 可以在随 Windows Media Format SDK 一起安装的 wmsbuffer.h 头文件中找到这些接口定义。

Windows Media 编解码器