Share via


Sequencer ソース イベント

シーケンサー ソースが一連のファイルを再生すると、通常の再生中に送信され、メディア セッション イベントに一覧表示されているのと同じイベントがすべてメディア セッションによって送信されます。 アプリケーションは、メディア セッションの IMFMediaEventGenerator インターフェイスを使用してこれらのイベントを取得します。

さらに、プレイリスト セグメントに固有のイベントがいくつかあります。

Event 説明
MENewPresentation 次のトポロジを事前登録するようにアプリケーションに通知します。
2 つの連続するプレゼンテーション間のシームレスな切り替えを提供するために、シーケンサー ソースは次のトポロジを事前に読み込みます。 アクティブ なトポロジがまだ再生されている間、シーケンサー ソースは、ソースで後続のトポロジが使用可能である限り、次のトポロジに対してこのイベントを送信します。
このイベントのこのイベント データは、次のトポロジのプレゼンテーション記述子です。 アプリケーションは、 Sequencer ソースの使用に関するページで説明されているように、メディア セッションで対応するトポロジを設定する役割を担います。
MEEndOfPresentationSegment メディア セッションが現在のセグメントの再生を完了したときに、そのセグメントの後に別のセグメントが続いている場合、シーケンサー ソースによってこのイベントが発生します。 (現在のセグメントが最後のセグメントの場合、シーケンサー ソースは代わりに MEEndOfPresentation イベントを 発生させます)。
メディア セッションは、このイベントをアプリケーションに転送します。 通常、メディア セッションが次のセグメントの処理を開始した後、アプリケーションは MEEndOfPresentationSegment を受け取りますが、メディア シンクは前のセグメントのサンプルを引き続き配信します。
MESessionTopologyStatus、状態 MF_TOPOSTATUS_SINK_SWITCHED メディア セッションは、シーケンサー ソース内の次のトポロジへの移行を行い、メディア シンクが前のトポロジの再生を完了したときに、このイベントを発生させます。 このイベントには、次のトポロジへのポインターが含まれています。

 

例 1: スキップせずに再生する

シーケンサー ソースが関係する場合、メディア セッションから取得するイベントの数がわかりにくい場合があります。特に、1 つのセグメントに関連付けられているイベントは、次のセグメントのイベントとインターリーブされることが多いためです。

最初の例では、アプリケーションは S1、S2、S3 の 3 つのセグメントをキューに入れます。 3 番目のセグメントには 、シーケンス の最後のセグメントであることを通知するために、SequencerTopologyFlags_Last フラグがあります。 各イベントが対応するセグメントは、かっこで囲まれています。 アプリケーションの SetTopology 呼び出しも一覧表示され、操作の順序が明確になります。

この一覧には、受信する可能性のあるすべてのイベントが含まれているわけではありません。 (たとえば、セッション機能が変更されるたびに送信 される MESessionCapabilitiesChanged イベントは省略されます。通常、アプリケーションはプレゼンテーション全体で複数の MESessionCapabilitiesChanged イベントを受け取ります。ここに一覧表示されているイベントは、あるセグメントから次のセグメントへの遷移を示すイベントです。 最も重要なイベントは MENewPresentation で、アプリケーションが次のトポロジを事前に登録するように通知します。 MEEndOfPresentationSegment は、セグメントの末尾を通知します (最後のセグメントを除く)。

Media Foundation のイベントは非同期であり、メソッド呼び出しでシリアル化されないため、正確な順序は異なる可能性があります。 たとえば、アプリケーションが S2 の SetTopology を呼び出す前に、S1 のMF_TOPOSTATUS_STARTED_SOURCEを受け取る場合があります。

また、ここに一覧表示されているすべてのイベントが表示されない場合もあります。 たとえば、 MEEndOfPresentation イベントと MESessionEnded イベントは、最後のセグメントに SequencerTopologyFlags_Last フラグがない限り送信されません。

最後に、このリストは時間の経過を示していません。 "S1 の開始" から "S1 の終わり" までの時間は S1 の期間全体であり、ソースによっては数秒または数時間になる場合があります。

例 2: セグメント スキップを使用した再生

この例では、アプリケーションは同じセグメントをキューに入れますが、セグメント 1 の再生中はセグメント 3 にスキップします。 この場合、次のイベントが送信されます。

アプリケーションが Start を呼び出してセグメント 3 にスキップすると、シーケンサー ソースはセグメント 1 を取り消します。これはまだ再生中です。 このセグメント の MEEndOfPresentationSegment イベントには 、セグメント が取り消されたために終了したことを示すMF_EVENT_SOURCE_TOPOLOGY_CANCELED属性が含まれています。 その後、セグメント 2 は既に事前にロールされているため、そのセグメントは開始されますが、直ちに取り消されます。 セグメント 2 の MEEndOfPresentationSegment イベントにも 、MF_EVENT_SOURCE_TOPOLOGY_CANCELED 属性が含まれています。 その後、セッションはセグメント 3 に切り替えて、正常に再生できます。

Sequencer ソースについて

Sequencer ソース