Rate Change 属性集

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

“速率更改”属性集使 MPEG-2 源/分析程序筛选器能够更改播放速率。 MPEG-2 解码器应支持此属性集。 DVD 导航器和流缓冲区引擎都使用此属性集来控制播放速率。

Label
属性集 GUID AM_KSPROPSETID_TSRateChange

 

属性 ID 说明
AM_RATE_CorrectTS 通知解码器导航器正在设置正确的时间戳。
AM_RATE_ExactRateChange 已过时。
AM_RATE_MaxFullDataRate 查询解码器以获取解码器的最大数据速率。
AM_RATE_QueryFullFrameRate 查询解码器以获取解码器的最大全帧速率。
AM_RATE_QueryLastRateSegPTS 查询解码器最近设置的速率段的开始时间。
AM_RATE_SimpleRateChange 将速率更改发送到解码器。
AM_RATE_Step 已过时。 请参阅 Frame 步进属性集
AM_RATE_UseRateVersion 指定要使用的速率更改机制版本。

 

备注

在此属性集的上下文中,rate 度量时间戳相对于参考时钟的推进速率。 对播放速度的反转进行评分。 例如,如果播放速度为 2 倍,时间戳必须按正常速率的 1/2 增加。 这转换为更快的播放速度,因为样本的呈现时间比平常要早。

样本以 1x 速率将时间戳与演示时间相等的时间戳发送到解码器。 解码器必须将输出样本上的时间戳缩放为当前速率的正确呈现时间。 例如,如果速率为 1/2 (这意味着播放速度为 2 倍) ,则解码器必须将时间戳缩放 1/2。 通常,只有 I 帧具有时间戳。 解码器必须内插 B 和 P 帧的时间戳。 请注意,在反向播放期间,时间戳会继续增加 , 时间戳永远不会向后移动。

定义了两个版本的 Rate Change 属性集:版本 1.0 和版本 1.1。 默认行为由版本 1.0 提供。 建议解码器供应商支持版本 1.1,因为它提供更流畅的播放体验。 DVD 导航器当前使用版本 1.0。 流缓冲区引擎使用版本 1.1。

速率更改版本 1.0

Rate Change 属性集的版本 1.0 定义 MPEG-2 解码器的默认行为。

源筛选器通过设置 AM_RATE_SimpleRateChange 属性来发出速率更改信号。 此属性的数据是新速率,加上速率生效时输入样本的开始时间。 解码器维护挂起的速率更改队列,按开始时间排序。

在 DVD 导航器更改为非 1x 速度之前,它会提供所有挂起的样本,暂时将速率设置为 1.0,并刷新图形。 然后设置新速率。 所有速率更改都计划在当前 VOBU (视频对象单元) 结束时进行。 请注意,刷新图形会将演示时间重置为零。

DVD 导航器在 平滑模式扫描模式下运行。 在平滑模式下,它将每个帧发送到解码器,包括 B 帧和 P 帧。 只要播放速度大于零但小于解码器的最大值数据速率,DVD 导航器就使用平滑模式。 如果播放速度小于零 (反向播放) ,或超过解码器的最大数据速率,则 DVD 导航器使用扫描模式,其中只将 I 帧发送到解码器。 在非常高的速度下,它可能会跳过一些 I 帧;例如,它可能会发送其他 I 帧。

默认情况下,DVD 导航器将音频流静音,以使用 1.0 以外的速率。 可以通过使用 DVD_AudioDuringFFwdRew 标志调用 IDvdControl2::SetOption 来更改此设置。

速率更改版本 1.1

版本 1.1 的 Rate Change 属性集遵循与版本 1.0 相同的基本原则,但存在以下差异:

  • 源筛选器通过设置 AM_RATE_UseRateVersion 属性来指示解码器使用版本 1.1。 否则,解码器应使用版本 1.0 行为。
  • 源筛选器不会在速率更改之间刷新关系图。 因此,时间戳在速率更改边界上单调增加,而不是重置为零。
  • 源筛选器可以指定将速率更改应用于解码器 最向前的样本,该样本定义为解码器传出队列头部的样本,而不是在特定参考时间将速率更改排队。 为此,源筛选器使用 AM_RATE_SimpleRateChange 属性, 但将开始时间设置为等于 -1。
  • 源筛选器可以查询解码器最近排队的速率更改的开始时间。 为此,它使用 AM_RATE_QueryLastRateSegPTS 属性。
  • 源筛选器不会删除样本。 如果速率超过解码器的最大数据速率,解码器应根据需要删除帧。
  • 无论音频解码器的最大数据速率如何,源筛选器都不会将音频流静音。 如果播放速度超过解码器的最大速率,音频解码器可以删除样本。 但是,它仍应维护计划的速率更改队列。

要求

要求
标头
Dvdmedia.h

另请参阅

属性集