Rate Change 属性集
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media 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 属性。
- 源筛选器不会删除样本。 如果速率超过解码器的最大数据速率,解码器应根据需要删除帧。
- 无论音频解码器的最大数据速率如何,源筛选器都不会将音频流静音。 如果播放速度超过解码器的最大速率,音频解码器可以删除样本。 但是,它仍应维护计划的速率更改队列。
要求
要求 | 值 |
---|---|
标头 |
|
另请参阅