共用方式為


如何判斷支援的速率

變更播放速率之前,應用程式應該檢查管線中的物件是否支援播放速率。 IMFRateSupport 介面提供方法來取得最高向前和反向利率、最接近所要求比率的支援率,以及最慢的速率。 每個速率查詢都可以指定播放方向,以及是否要使用精簡。 使用IMFRateControl介面來查詢確切的播放速率。

如需變更播放速率的資訊,請參閱 如何在媒體會話上設定播放速率。

如需播放速率的一般資訊,請參閱 關於速率控制

判斷目前的播放速率

  1. 從媒體會話取得速率控制服務。

    IMFRateControl *pRateControl = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateControl, 
           (void**) &pRateControl );
    

    在 MFGetService 的 punkObject 參數中傳遞初始化 IMFMediaSession 介面指標。

    應用程式必須透過媒體會話查詢速率控制服務。 在內部,媒體會話會查詢拓撲中的物件。

  2. 呼叫 IMFRateControl::GetRate 方法來取得目前的播放速率。

    hr = pRateControl->GetRate(&bThin, &rate);
    

    GetRate pfThin 參數會收到 BOOL 值,指出數據流目前是否正在精簡。 如果應用程式不想查詢數據流的精簡支援,則必須傳遞 NULLpflRate 參數會接收目前的播放速率。

判斷最接近支援率

  1. 從媒體會話取得速率支持服務。

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    在 MFGetService 的 punkObject 參數中傳遞初始化 IMFMediaSession 介面指標。

  2. 呼叫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收到最接近的支援速率。 如果不支援速率,而且沒有可用的最接近播放速率,則呼叫會傳回適當的錯誤碼。

    這些值可能會根據載入管線元件而變更。 因此,每當載入新的拓撲時,您應該再次查詢值。

    如果不支援所需的播放速率,有一個選項是個別查詢拓撲中的每個物件,以找出特定元件是否不支援速率。 您可以重建不含此元件的拓撲,然後以所需的速率播放。 例如,如果音訊轉譯器以外的每個元件都支援指定的速率,您可以重建不含音訊分支的拓撲,並以所需的速率播放沒有音訊。

判斷支援率最慢

  1. 從媒體會話取得速率支持服務。

    IMFRateSupport *pRateSupport = NULL;
    hr = MFGetService(
           pMediaSession, 
           MF_RATE_CONTROL_SERVICE,
           IID_IMFRateSupport, 
           (void**) &pRateSupport );
    

    在 MFGetService 的 punkObject 參數中傳遞初始化 IMFMediaSession 介面指標。

  2. 呼叫IMFRateSupport:GetSlowestRate方法來擷取最慢的支援率。

    float slowestRate = 0;
    hr = pRateSupport->GetSlowestRate(
           MFRATE_REVERSE, 
           TRUE, 
           &slowestRate);
    

    此範例會使用精簡查詢最慢的反向播放速率。 下限速率會以 GetSlowestRate 的 slowestRate 參數接收。

    如果不支援反向播放或精簡,呼叫會傳回適當的錯誤碼。

媒體會話

速率控制

搜尋、快速向前和反向播放