共用方式為


Sequencer 來源事件

Sequencer Source 播放一連串檔案時,媒體會話通常會傳送一般播放期間傳送的所有相同事件,而且會列在媒體會話事件 中。 應用程式會使用媒體會話 IMFMediaEventGenerator 介面取得這些事件。

此外,還有一些事件是播放清單區段特有的。

事件 描述
MENewPresentation 指示應用程式預先註冊下一個拓撲。
為了在兩個連續的簡報之間提供順暢的轉換,排序器來源會事先載入下一個拓撲。 當作用中的拓撲仍在播放時,只要來源中有後續可用的拓撲,排序器來源就會傳送下一個拓撲的這個事件。
此事件的這個事件數據是下一個拓撲的呈現描述項。 應用程式負責在媒體會話上設定對應的拓撲,如使用排序器來源 中所述。
MEEndOfPresentationSegment 如果該區段後面接著另一個區段,當媒體會話完成播放目前區段時,排序器來源會引發此事件。 (如果目前的區段是最後一個區段,則排序器來源會改為引發 MEEndOfPresentation 事件。
媒體會話會將此事件轉送至應用程式。 一般而言,在媒體會話開始處理下一個區段之後,應用程式會收到 MEEndOfPresentationSegment,但媒體接收仍會提供上一個區段的樣本。
MESessionTopologyStatus,狀態為 MF_TOPOSTATUS_SINK_SWITCHED 媒體會話會在轉換至排序器來源中的下一個拓撲時引發此事件,而媒體接收已完成播放先前的拓撲。 此事件包含下一個拓撲的指標。

 

範例 1:不略過播放

當涉及排序器來源時,您從媒體會話取得的事件數目可能會造成混淆,特別是因為與一個區段相關聯的事件通常會與下一個區段的事件交錯。

在第一個範例中,應用程式會將三個區段排入佇列:S1、S2 和 S3。 第三個區段具有 SequencerTopologyFlags_Last 旗標,表示它是序列中的最後一個區段。 每個事件對應的區段會在括弧中指定。 應用程式 SetTopology 呼叫也會列出,讓作業順序更清楚。

此清單不包含您可能會收到的每個事件。 (例如,它會省略 MESessionCapabilitiesChanged 事件,每當會話功能變更時,就會傳送此事件。應用程式通常會在整個簡報中接收多個MESessionCapabilitiesChanged事件。此處列出的事件是顯示從一個區段轉換到下一個區段的事件。 最重要的事件是 MENewPresentation,會指示應用程式預先註冊下一個拓撲,並 MEEndOfPresentationSegment,這會發出區段結尾的訊號(最後一個區段除外)。

因為 Media Foundation 中的事件是異步的,而且不會以方法呼叫串行化,所以確切的順序可能會有所不同。 例如,您可以在應用程式呼叫 S2 SetTopology 之前收到 S1 的 MF_TOPOSTATUS_STARTED_SOURCE

此外,您可能不會在此列出每個事件。 例如,除非最後一個區段具有 SequencerTopologyFlags_Last 旗標,否則 MEEndOfPresentationMESessionEnded 事件不會傳送。

最後,此列表不會指出時間的流逝。 從「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 來源