ASF 文件接收器是媒体基础提供的 IMFMediaSink 实现,应用程序可用于将 ASF 媒体数据存档到文件中。 有关 ASF 媒体接收器的对象模型和常规用法的信息,请参阅 ASF 媒体接收器。
可通过两种方式创建 ASF 文件接收器的实例。 可以调用 MFCreateASFMediaSink 或 MFCreateASFMediaSinkActivate。
如果调用 MFCreateASFMediaSink,则必须为输出文件指定字节流,该流将在编码会话期间将 ASF 内容写入其中。 指定的字节流必须具有可查找且可写的功能,否则 MFCreateASFMediaSink 调用将失败并显示E_FAIL错误代码。 此调用将创建进程内文件接收器对象,并返回指向文件接收器 的 IMFMediaSink 接口的指针。
如果调用 MFCreateASFMediaSinkActivate,则必须指定文件接收器将向其写入媒体数据的输出文件的 URL。 在这种情况下,文件接收器会在内部创建字节流。 该函数返回文件接收器的 IMFActivate 接口指针。 到
在编码拓扑设计成如下形式时,请考虑 MFCreateASFMediaSinkActivate 而不是 MFCreateASFMediaSink:
编码拓扑适用于受保护的媒体路径(PMP),文件接收器在进程外使用。
拓扑结构的输出节点是通过返回的指针指向文件接收器的激活对象来创建的,您的应用程序通过流编号跟踪文件接收器中的流。
注释
可以通过调用 IMFActivate::ActivateObject 来激活文件接收器。 但是,无需显式激活对象。 媒体会话会跟踪激活对象,并在编码会话期间自动激活文件写入端。
流信息是在 ContentInfo 对象中配置的。 在下一个子部分中进行了讨论。
创建 ASF 文件接收器后,必须先配置该接收器,然后才能生成拓扑。 文件接收器需要知道以下信息才能生成输出文件。
- 基本流信息
- 编码模式信息
- 元数据
文件接收器实现 ASF ContentInfo 对象 并公开 IMFASFContentInfo 接口,以便应用程序可以使用它设置与流和编码相关的信息。 根据调用以创建文件接收器的函数,可通过两种方式获取对 IMFASFContentInfo 接口的引用。
- 如果调用 MFCreateASFMediaSink 函数,应用程序必须通过在返回的文件接收器上调用 IMFMediaSink::QueryInterface 来查询 IMFASFContentInfo 接口。
- 如果选择调用 MFCreateASFMediaSinkActivate,此函数要求在调用之前具有完全配置的 ContentInfo 对象。 为此,需要通过调用 MFCreateASFContentInfo 来创建一个空的 ContentInfo 对象,然后使用所有必需的信息对其进行配置。 将配置好的 ContentInfo 对象传递给 MFCreateASFMediaSinkActivate,以获取指向接收器激活对象的指针。 无法通过使用返回的激活对象来激活文件汇聚器,随后更改任何流或编码信息。
有关配置汇流和特定属性的信息,请参阅以下主题:
相关主题
-
媒体基础 中的 ASF 支持