次の方法で共有


Sequencer ソース イベント

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

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

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

 

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

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

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

この一覧には、受け取る可能性のあるすべてのイベントが含まれているわけではありません。 (たとえば、セッション機能が変更されるたびに送信される MESessionCapabilitiesChanged イベントは省略されます。通常、アプリケーションはプレゼンテーション全体で複数の MESessionCapabilitiesChanged イベントを受け取ります)。次に示すイベントは、1 つのセグメントから次のセグメントへの移行を示すイベントです。 最も重要なイベントは、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 ソース