在文件接收器中设置属性

ASF 文件接收器是媒体基金会提供的 IMFMediaSink 的实现,应用程序可以使用该实现将 ASF 媒体数据存档到文件中。 有关 ASF 媒体接收器的对象模型和常规用法的信息,请参阅 ASF 媒体接收器

创建 ASF 文件接收器后,必须使用有关输出文件中的流的信息对其进行配置。 将 流信息添加到 ASF 文件接收器中介绍了此过程。 可以根据编码类型在文件接收器上设置其他属性;泄漏桶;常规文件属性。 这些设置不会写入最终的 ASF 标头对象中。 本主题介绍在文件接收器的属性存储中添加这些属性的过程。

ContentInfo 对象维护文件接收器的全局文件属性和单个流属性。 有关获取对文件接收器的 ASF ContentInfo 对象的引用的信息,请参阅 创建 ASF 文件接收器

若要 (IPropertyStore) 获取对文件接收器的属性存储的引用,请对文件接收器的 ContentInfo 对象的引用调用 IMFASFContentInfo::GetEncodingConfigurationPropertyStore

流编码属性

若要正确编码内容,文件需要知道某些编码信息,例如编码类型和相关编码参数。 这些值在文件接收器上设置为 ASF ContentInfo 对象维护的属性存储中的属性值。 如果在实例化相关编码器之前配置文件接收器,则可以将 ContentInfo 对象与所有填充的属性一起使用来创建 Windows Media 编码器。 在这种情况下,属性会自动在实例化的编码器上设置。 相反,如果要在接收器之前创建编码器,请确保将编码器上设置的属性复制到文件接收器的属性存储中。

若要设置编码属性,需要访问文件接收器的流级属性存储。 在 IMFASFContentInfo::GetEncodingConfigurationPropertyStore 方法的 wStreamNumber 参数中传递流号。 流编号必须与在配置文件中配置每个流时设置的值匹配。 通过调用 IPropertyStore::SetValue 设置属性值。 下表描述了支持的属性。

属性取决于编码的类型。 有关必须设置的属性和相应值的信息,请参阅 编码属性

Leaky Bucket 属性

泄漏桶参数确定编码器为流使用的实际缓冲区窗口。 文件接收器的 MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET 属性包含泄漏的存储桶参数、比特率、缓冲区窗口和初始缓冲区填充度。此属性是在文件接收器的流级属性属性存储中设置的,必须在创建和配置编码器后设置。 此值在 中设置。 在媒体类型协商期间,编码器决定要使用的缓冲区窗口和比特率。 可以使用在 wmcodecifaces.h 中定义的 IWMCodecLeakyBucket 接口获取这些值,并且必须链接到 wmcodecdspuuid.lib 才能调用其方法。

可以为 ASF 文件接收器中的每个流设置此属性的检索值。

全局文件接收器属性

若要获取文件接收器的全局属性存储,请在 IMFASFContentInfo::GetEncodingConfigurationPropertyStore 方法的 wStreamNumber 参数中传递 0。 通过调用 IPropertyStore::SetValue 设置属性值。 下表描述了支持的属性。

文件级属性 说明
MFPKEY_ASFMEDIASINK_BASE_SENDTIME 发送时间指示何时释放泄漏存储桶中的有效负载。 此属性值指示第一次发送时间。 多路复用器使用此值计算生成的数据包的后续发送时间,并确保数据稳定地流经泄漏的存储桶。
MFPKEY_ASFMEDIASINK_AUTOADJUST_BITRATE 此 BOOL 值指示多路复用器是否需要自动调整比特率,以确保数据不会溢出泄漏的存储桶。
MFPKEY_ASFMEDIASINK_DRMACTION 这表示用于文件生成的 ASF 媒体接收器 DRM 操作。 在此版本中,仅支持 DRM 转码。

 

ASF 媒体接收器

管道层 ASF 组件

媒体基础中的 ASF 支持