如何确定支持的费率
在更改播放速率之前,应用程序应检查管道中的对象是否支持播放速率。 IMFRateSupport 接口提供方法,用于获取最大正向和反向速率、最接近所请求速率的支持速率以及最慢的速率。 其中每个速率查询都可以指定播放方向以及是否使用精简。 使用 IMFRateControl 接口查询确切的播放速率。
有关更改播放速率的信息,请参阅 如何在媒体会话上设置播放速率。
有关播放速率的一般信息,请参阅 关于速率控制。
确定当前播放速率
从媒体会话获取速率控制服务。
IMFRateControl *pRateControl = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**) &pRateControl );
在 MFGetService 的 punkObject 参数中传递初始化的 IMFMediaSession 接口指针。
应用程序必须通过媒体会话查询速率控制服务。 在内部,媒体会话查询拓扑中的对象。
调用 IMFRateControl::GetRate 方法以获取当前播放速率。
hr = pRateControl->GetRate(&bThin, &rate);
GetRate 的 pfThin 参数接收一个 BOOL 值,该值指示当前是否正在精简流。 如果应用程序不想查询对流的精简支持,则必须传递 NULL 。 pflRate 参数接收当前播放速率。
确定最接近的受支持费率
从媒体会话获取速率支持服务。
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
在 MFGetService 的 punkObject 参数中传递初始化的 IMFMediaSession 接口指针。
调用 IMFRateSupport::IsRateSupported 方法以检索最接近所请求播放速率的支持速率。
float rateRequested = 4.0; float actualRate = 0; hr = pRateSupport->IsRateSupported( TRUE, rateRequested, &actualRate );
该示例通过精简查询是否支持 4.0 的播放速率。 这是通过在 IsRateSupported 的 fThin 参数中传递 TRUE 来指示的。 如果支持此速率, 则 actualRate 包含 4.0 的播放速率,并且调用成功,返回值为 S_OK。 如果不支持确切的播放速率,则 以 actualRate 接收最接近的支持速率。 如果速率不受支持,并且没有可用的最接近播放速率,则调用将返回相应的错误代码。
这些值可能会根据加载的管道组件而更改。 因此,每当加载新的 topololgy 时,都应再次查询这些值。
如果不支持所需的播放速率,一个选项是单独查询拓扑中的每个对象,以确定特定组件是否不支持该速率。 你可能能够在没有此组件的情况下重新生成拓扑,然后以所需的速度播放。 例如,如果除音频呈现器以外的每个组件都支持给定速率,则可以在没有音频分支的情况下重新生成拓扑,并在没有音频的情况下以所需速率播放。
确定支持的最慢速率
从媒体会话获取速率支持服务。
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
在 MFGetService 的 punkObject 参数中传递初始化的 IMFMediaSession 接口指针。
调用 IMFRateSupport::GetSlowestRate 方法以检索支持的最慢速率。
float slowestRate = 0; hr = pRateSupport->GetSlowestRate( MFRATE_REVERSE, TRUE, &slowestRate);
该示例通过精简查询最慢的反向播放速率。 在 GetSlowestRate 的 slowestRate 参数中接收下限速率。
如果不支持反向播放或精简,调用将返回相应的错误代码。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈