使用编码器的激活对象
若要将媒体文件转换为 ASF 格式,可以使用 Windows Media 编码器。 若要使用这些编码器,必须向系统注册这些编码器。
有关编码器注册的信息,请参阅 实例化编码器 MFT。
使用编码器的激活对象
除了使用编码器的 IMFTransform 接口 (使用 CoCreateInstance) 中所述,还可以为编码器创建激活对象的实例。 激活对象有助于编码器创建,Media Foundation 为此方法提供以下两个函数:
- MFCreateWMAEncoderActivate 用于实例化 Windows Media 音频编码器。
- MFCreateWMVEncoderActivate 用于实例化 Windows Media 视频编码器。
这两个函数都需要在调用这些函数之前创建目标媒体类型并设置编码属性。 如果应用程序使用 管道层 ASF 组件 将文件编码为 ASF 格式,并且已创建并配置 ASF 媒体接收器,则可以从 ASF 媒体接收器获取这组信息。
MFCreateWMAEncoderActivate 和 MFCreateWMVEncoderActivate 将编码器的输出类型设置为应用程序指定的媒体类型。
注意 如果使用 MFCreateWMAEncoderActivate 和 MFCreateWMVEncoderActivate ,可以通过调用 IMFActivate::ActivateObject 来激活编码器,但不能更改编码器的输入和输出媒体类型,也不能更改任何编码属性。
有关使用激活对象创建 Media Foundation 对象的详细信息,请参阅 激活对象。
从 ASF 媒体接收器获取目标媒体类型
- 通过在 ASF 媒体接收器上调用 IMFMediaSink::QueryInterface 并将 IID_IMFASFContentInfo 作为接口标识符传递,获取指向 ASF 媒体接收器的 IMFASFContentInfo 指针的指针。
- 获取与 ContentInfo 对象关联的 ASF 配置文件对象。
- 枚举配置文件中的流以获取流的媒体类型。
从 ASF 媒体接收器获取编码属性
如果已在媒体接收器中配置 编码属性 (在 文件接收器) 中设置属性 中所述,则可以通过在 ASF 媒体接收器上调用 IMFMediaSink::QueryInterface 并将IID_IPropertyStore作为接口标识符传递 来 引用接收器的属性存储。
如果你有指向接收器的 ContentInfo 对象的指针,则可以调用 IMFASFContentInfo::GetEncodingConfigurationPropertyStore 以获取对媒体接收器的属性存储的引用。
请确保在 ASF 媒体接收器上设置的所有编码属性都反映在传递给 MFCreateWMAEncoderActivate 和 MFCreateWMVEncoderActivate 的属性存储中。 编码器是根据应用程序指定的设置自动配置的。
在编码拓扑中创建转换节点时,可以将对象类型设置为在这两次调用中收到的 IMFActivate 指针。 解析拓扑后,媒体会话使用激活对象创建编码器 MFT 的实例。
Windows 7 及更高版本中的编码器枚举
对于在 Windows 7 上运行的应用程序,除了 MFTEnum 之外,还可以通过调用 MFTEnumEx 枚举编码器 MFT。 此函数返回指向编码器 MFT 的激活对象的指针。 函数的结构与上述 MFTEnum 非常相似,但 MFTEnumEx返回符合搜索条件的编码器 MMT 的 IMFActivate 指针数组。
相关主题