サポートされている料金を決定する方法
再生速度を変更する前に、アプリケーションは、パイプライン内のオブジェクトで再生速度がサポートされているかどうかを確認する必要があります。 IMFRateSupport インターフェイスには、最大転送レートと逆レート、要求されたレートに最も近いサポートされているレート、および最も低速なレートを取得するメソッドが用意されています。 これらの各レート クエリでは、再生方向と、間引きを使用するかどうかを指定できます。 正確な再生速度は、 IMFRateControl インターフェイスを使用して照会されます。
再生レートの変更については、「 メディア セッションで再生レートを設定する方法を参照してください。
再生レートに関する一般的な情報については、「 About Rate Control」を参照してください。
現在の再生速度を確認するには
メディア セッションからレート制御サービスを取得します。
IMFRateControl *pRateControl = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**) &pRateControl );
初期化された IMFMediaSession インターフェイス ポインターを punkObject MFGetService のパラメーターに渡します。
アプリケーションは、メディア セッションを介してレート制御サービスのクエリを実行する必要があります。 内部的には、メディア セッションはトポロジ内のオブジェクトに対してクエリを実行します。
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 );
初期化された IMFMediaSession インターフェイス ポインターを punkObject MFGetService のパラメーターに渡します。
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 で受信されます。 レートがサポートされておらず、使用可能な最も近い再生レートがない場合、呼び出しは適切なエラー コードを返します。
これらの値は、読み込まれるパイプライン コンポーネントに応じて変更される可能性があります。 そのため、新しいトポロジを読み込むたびに値のクエリを再度実行する必要があります。
目的の再生レートがサポートされていない場合は、トポロジ内の各オブジェクトに対して個別にクエリを実行し、特定のコンポーネントがレートをサポートしていないかどうかを調べる方法があります。 このコンポーネントを使用せずにトポロジを再構築し、必要な速度で再生できる場合があります。 たとえば、オーディオ レンダラーを除くすべてのコンポーネントで特定のレートがサポートされている場合は、オーディオ ブランチなしでトポロジを再構築し、オーディオなしで目的のレートで再生できます。
サポートされている最も遅いレートを確認するには
メディア セッションからレート サポート サービスを取得します。
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
初期化された IMFMediaSession インターフェイス ポインターを punkObject MFGetService のパラメーターに渡します。
IMFRateSupport::GetSlowestRate メソッドを呼び出して、サポートされている最も低速なレートを取得します。
float slowestRate = 0; hr = pRateSupport->GetSlowestRate( MFRATE_REVERSE, TRUE, &slowestRate);
この例では、最も遅い逆再生速度を間引いてクエリを実行します。 下限レートは、GetSlowestRate の slowestRate パラメーターで受け取ります。
逆再生または間引きがサポートされていない場合、呼び出しは適切なエラー コードを返します。
関連トピック