Eventi di origine sequencer
Quando l'origine sequencer riproduce una sequenza di file, la sessione multimediale invia in genere tutti gli stessi eventi inviati durante la riproduzione normale e che sono elencati in Eventi sessione multimediali. L'applicazione ottiene questi eventi usando l'interfaccia FMIMediaEventGenerator di Media Session.
Inoltre, esistono alcuni eventi specifici per i segmenti di playlist.
Event | Descrizione |
---|---|
MENewPresentation | Segnala all'applicazione di prerollare la topologia successiva. Per fornire una transizione senza problemi tra due presentazioni consecutive, l'origine del sequencer carica in anticipo la topologia successiva. Mentre la topologia attiva è ancora in riproduzione, l'origine sequencer invia questo evento per la topologia successiva, purché esista una topologia successiva disponibile nell'origine. Questi dati di evento per questo evento sono il descrittore di presentazione per la topologia successiva. L'applicazione è responsabile dell'impostazione della topologia corrispondente nella sessione multimediale, come descritto in Uso dell'origine sequencer. |
MEEndOfPresentationSegment | L'origine del sequencer genera questo evento quando la sessione multimediale ha completato la riproduzione del segmento corrente, se tale segmento viene seguito da un altro segmento. Se il segmento corrente è l'ultimo, l'origine del sequencer genera invece l'evento MEEndOfPresentation . La sessione multimediale inoltra questo evento all'applicazione. In genere, l'applicazione riceve MEEndOfPresentationSegment dopo l'avvio dell'elaborazione del segmento successivo, ma mentre i sink multimediali forniscono ancora gli esempi per il segmento precedente. |
MESessionTopologyStatus, con stato MF_TOPOSTATUS_SINK_SWITCHED. | La sessione multimediale genera questo evento quando esegue una transizione alla topologia successiva nell'origine del sequencer e nei sink multimediali sono stati completati la riproduzione della topologia precedente. Questo evento contiene un puntatore alla topologia successiva. |
Esempio 1: Riproduzione senza ignorare
Quando l'origine del sequencer è coinvolto, il numero di eventi che si ottiene dalla sessione multimediale può essere confuso, soprattutto perché gli eventi associati a un segmento vengono spesso interleavedati con eventi per il segmento successivo.
Nel primo esempio, l'applicazione accoda tre segmenti, S1, S2 e S3. Il terzo segmento ha il flag SequencerTopologyFlags_Last , per segnalarlo è l'ultimo segmento della sequenza. Segmento a cui corrisponde ogni evento viene assegnato tra parentesi. Le chiamate SetTopology dell'applicazione sono elencate anche per rendere più chiaro l'ordine delle operazioni.
- L'applicazione chiama IMFMediaSession::SetTopology (S1)
- MESessionTopologySet (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
- MENewPresentation (preroll S2)
- L'applicazione chiama IMFMediaSession::SetTopology (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inizio di S1)
- MESessionTopologySet (S2)
- MEEndOfPresentationSegment (fine di S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transizione a S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inizio di S2)
- MENewPresentation (preroll S3)
- L'applicazione chiama IMFMediaSession::SetTopology (S2)
- MESessionTopologySet (S3)
- MEEndOfPresentationSegment (fine di S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transizione a S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inizio di S3)
- MEEndOfPresentation (fine di S3; ultimo segmento)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED
- MESessionEnded
Questo elenco non include tutti gli eventi ricevuti. Ad esempio, omette l'evento MESessionCapabilitiesChanged , che viene inviato ogni volta che cambiano le funzionalità della sessione. Un'applicazione riceve in genere più eventi MESessionCapabilitiesChanged in una presentazione. Gli eventi elencati di seguito sono quelli che mostrano la transizione da un segmento al successivo. Gli eventi più importanti sono MENewPresentation, che segnala all'applicazione di prerollare la topologia successiva e MEEndOfPresentationSegment, che segnala la fine di un segmento (ad eccezione dell'ultimo segmento).
Poiché gli eventi in Media Foundation sono asincroni e non vengono serializzati con chiamate di metodo, l'ordine esatto potrebbe variare. Ad esempio, è possibile ricevere MF_TOPOSTATUS_STARTED_SOURCE per S1 prima che l'applicazione chiami SetTo topologia per S2.
Inoltre, potrebbe non essere visualizzato ogni evento elencato qui. Gli eventi MEEndOfPresentation e MESessionEnded , ad esempio, non vengono inviati a meno che l'ultimo segmento non abbia il flag di SequencerTopologyFlags_Last .
Infine, questo elenco non indica il passaggio di tempo. L'ora da "inizio di S1" alla "fine di S1" è l'intera durata di S1, che potrebbe essere di pochi secondi o molte ore, a seconda dell'origine.
Esempio 2: Riproduzione con ignora segmento
In questo esempio l'applicazione accoda gli stessi segmenti, ma passa al segmento 3 mentre il segmento 1 viene riprodotto. In questo caso, vengono inviati gli eventi seguenti:
- L'applicazione chiama IMFMediaSession::SetTopology (S1)
- MESessionTopologySet (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
- MENewPresentation (preroll S2)
- L'applicazione chiama IMFMediaSession::SetTopology (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inizio di S1)
- MESessionTopologySet (S2)
- L'applicazione chiama IMFMediaSession::Start (passare a S3)
- MENewPresentation (preroll S3)
- L'applicazione chiama IMFMediaSession::SetTopology (S3)
- MESessionStarted
- MEEndOfPresentationSegment (S1 annullata)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S1)
- MESessionTopologySet (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transizione a S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (S2)
- MEEndOfPresentationSegment (S2 annullato)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transizione a S3)
- MESessionTopologyStatus: TOPOSTATUS_READY (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (S3)
Quando l'applicazione chiama Start per ignorare il segmento 3, l'origine sequencer annulla il segmento 1, che è ancora in riproduzione. L'evento MEEndOfPresentationSegment per questo segmento contiene l'attributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED , che indica che il segmento è terminato perché è stato annullato. Quindi, perché il segmento 2 è già pre-rollback, tale segmento viene avviato ma poi immediatamente annullato. L'evento MEEndOfPresentationSegment per segmento 2 contiene anche l'attributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED . La sessione può quindi passare al segmento 3 e giocarla normalmente.
Argomenti correlati