初始化新 ASF 文件的 ContentInfo 对象

通过调用 MFCreateASFContentInfo 函数创建空 ContentInfo 对象后,应用程序必须调用 IMFASFContentInfo::SetProfile 以提供编码配置文件。 有关创建配置文件的信息,请参阅 创建 ASF 配置文件

SetProfile 方法必须通过检查流标识符或媒体类型来验证指定的配置文件对象,然后才能从配置文件中读取信息。 如果配置文件通过验证,则会生成各种标头对象,例如文件属性对象、流比特率属性对象、流属性对象和相互排除对象。

SetProfile 计算并设置某些属性(如预卷值)的建议值。 如果尚未设置此值,则建议的预滚动值(以毫秒为单位)取决于为配置文件中的流指定的泄漏存储桶的最大缓冲区时段。 同样,还设置了最小和最大数据包大小。 建议的值可能会通过属性替代在配置文件上设置的数据包大小。

由于文件正在创建过程中,因此该文件被归类为广播类型,由“文件属性对象的标志”字段表示。 某些未知值(如数据包数、播放持续时间和发送持续时间)设置为零。 这些值由 MF_PD_ASF_xxx 属性表示,必须在文件创建完成后由应用程序更新。

指定的配置文件对象替换与 ContentInfo 对象关联的任何现有配置文件,删除引用的标头对象,并重置全局文件属性,例如预滚动和数据包大小。

SetProfile 方法还会创建表示 ASF 数据对象的数据对象。 如果重复使用包含任何数据包相关信息的 ContentInfo 对象, SetProfile 将失败并返回MF_E_ALREADY_INITIALIZED错误,指示它已与现有 ASF 数据对象关联。 默认情况下,对于新的 ContentInfo 对象,数据包计数设置为零,数据对象大小设置为 50 字节。 如果使用多路复用器生成数据包,则多路复用器会更新 ContentInfo 对象以反映数据包计数等新值。 有关数据包生成的详细信息,请参阅 生成新的 ASF 数据包

将所有标头对象添加到最终的 ASF 标头对象后,可以通过调用 IMFASFContentInfo::GetHeaderSize 来检索总标头大小。 此大小包括初始数据对象大小。

在 ContentInfo 对象中设置属性

为新文件编写 ASF 标头对象