次の方法で共有


新しいセグメント

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

セグメントは、一般的な開始時刻、停止時間、再生速度を共有するメディア サンプルのグループです。 IPin::NewSegment メソッドは、新しいセグメントの開始を通知します。 ソース フィルターが、時間とレートの情報が変更されたことをダウンストリーム フィルターに通知する方法を提供します。 たとえば、ソース フィルターがストリーム内の新しいポイントをシークする場合は、新しい開始時刻で NewSegment を呼び出します。

一部のダウンストリーム フィルターでは、サンプルを処理するときにセグメント情報が使用されます。 たとえば、フレーム間圧縮を使用する形式では、停止時間がデルタ フレームに当たる場合、ソース フィルターは停止時間の後に追加のサンプルを送信する必要がある場合があります。 これにより、デコーダーは最終的なデルタ フレームをデコードできます。 正しい最終フレームを決定するために、デコーダーはセグメント停止時間を参照します。 もう 1 つの例として、オーディオ レンダラーはセグメント レートとオーディオ サンプリング レートを使用して、正しいオーディオ出力を生成します。

プッシュ モデルでは、ソース フィルターによって NewSegment 呼び出しが開始されます。 プル モデルでは、これはパーサー フィルターによって行われます。 どちらの場合も、フィルターはダウンストリーム入力ピンで NewSegment を呼び出します。これにより、呼び出しがレンダラーに到達するまで、呼び出しが次のフィルターに伝達されます。 フィルターは、IMemInputPin::Receive などの他のストリーミング呼び出しで NewSegment 呼び出しをシリアル化する必要があります。

ストリーム時間は、新しい各セグメントの後に 0 にリセットされます。 セグメントが 0 から開始した後に配信されたサンプルのタイム スタンプ。