レート制御について

Media Foundation では、 再生レート は、現在の再生レートと通常の再生レートの比率として表されます。 たとえば、2.0 のレートは通常の速度の 2 倍、0.5 は通常の半分の速度です。 負の値は、逆再生を示します。 -2.0 の再生速度は、通常の速度の 2 倍の速度でストリームを逆方向に再生します。 レートが 0 の場合、1 つのフレームがレンダリングされます。その後、プレゼンテーションクロックは進まない。 ゼロの速度で別のフレームを取得するには、アプリケーションは新しい位置をシークする必要があります。

アプリケーションでは、次のインターフェイスを使用して再生速度を制御します。

  • IMFRateSupport。 可能な最も速く、最も遅い再生速度を調べるのに使用されます。
  • IMFRateControl。 再生速度を変更するために使用します。

これら 2 つのインターフェイスを取得するには、メディア セッションで IMFGetService::GetService を呼び出します。 サービス識別子がMF_RATE_CONTROL_SERVICE。

レート制御サービスを使用することで、アプリケーションは早送り再生と逆再生を実装できます。

間伐

間引き は、ストリーム内のサンプルの数を減らし、全体的なビットレートを下げるプロセスです。 ビデオの場合、間引きは一般にデルタ フレームを削除し、キー フレームのみを配信することによって実現されます。 多くの場合、パイプラインでは、差分フレームがデコードされないため、データ レートが低いため、シン再生を使用して高速な再生速度をサポートできます。

間引きしても、サンプルのタイム スタンプや期間は変更されません。 たとえば、ビデオ ストリームの公称レートが 25 フレーム/秒の場合、メディア ソースがすべての差分フレームを削除している場合でも、各フレームの継続時間は 40 ミリ秒としてマークされます。 つまり、1 つのフレームの終了と次のフレームの開始の間に時間差があります。

スクラブ

スクラブとは、スクロール バー、タイムライン、またはその他の視覚的な時間表現を操作して、ストリーム内の特定のポイントを瞬時にシークするプロセスです。 この用語は、リールを前後に揺れ動かし、再生ヘッドをテープでスクラブするようなセクションを見つけるリールからリールへのテーププレーヤーの時代から来ています。

スクラブは、再生速度を 0 に設定することで Media Foundation に実装されます。 詳細については、「 スクラブを実行する方法」を参照してください。

レート制御

シーク、早送り、リバース プレイ

サービス インターフェイス