Udostępnij przez


Zdarzenia źródłowe programu Sequencer

Gdy Sequencer Source odtwarza sekwencję plików, sesja multimediów zazwyczaj wysyła wszystkie te same zdarzenia, które są wysyłane podczas normalnego odtwarzania i które są wymienione w zdarzenia sesji multimediów. Aplikacja pobiera te zdarzenia przy użyciu interfejsu IMFMediaEventGenerator sesji multimediów.

Ponadto istnieją pewne zdarzenia specyficzne dla segmentów listy odtwarzania.

Zdarzenie Opis
MENewPresentation Sygnalizuje aplikację, aby wstępnie wyrejestrować następną topologię.
Aby zapewnić bezproblemowe przejście między dwiema kolejnymi prezentacjami, źródło programu Sequencer ładuje następną topologię z wyprzedzeniem. Mimo że aktywna topologia jest nadal odtwarzana, źródło programu Sequencer wysyła to zdarzenie dla następnej topologii, o ile w źródle jest dostępna kolejna topologia.
Te dane zdarzenia dla tego zdarzenia to deskryptor prezentacji dla następnej topologii. Aplikacja jest odpowiedzialna za ustawienie odpowiedniej topologii w sesji multimediów zgodnie z opisem w Using the Sequencer Source.
MEEndOfPresentationSegment Źródło programu Sequencer zgłasza to zdarzenie, gdy sesja multimediów zakończyła odtwarzanie bieżącego segmentu, jeśli po nim następuje inny segment. (Jeśli bieżący segment jest ostatnim, źródło programu sequencer zgłasza MEEndOfPresentation zdarzenia.
Sesja multimediów przekazuje to zdarzenie do aplikacji. Zazwyczaj aplikacja odbiera MEEndOfPresentationSegment po rozpoczęciu przetwarzania następnego segmentu sesji multimediów, ale podczas gdy ujścia multimediów nadal dostarczają przykłady dla poprzedniego segmentu.
MESessionTopologyStatusze stanem MF_TOPOSTATUS_SINK_SWITCHED. Sesja multimediów zgłasza to zdarzenie, gdy powoduje przejście do następnej topologii w źródle programu Sequencer, a ujścia multimediów zakończyło odtwarzanie poprzedniej topologii. To zdarzenie zawiera wskaźnik do następnej topologii.

 

Przykład 1. Odtwarzanie bez pomijania

Gdy źródło programu Sequencer jest zaangażowane, liczba zdarzeń pobieranych z sesji multimediów może być myląca, zwłaszcza dlatego, że zdarzenia skojarzone z jednym segmentem są często przeplatane zdarzeniami dla następnego segmentu.

W pierwszym przykładzie aplikacja kolejkuje trzy segmenty, S1, S2 i S3. Trzeci segment ma flagę SequencerTopologyFlags_Last, aby zasygnalizować, że jest to ostatni segment w sekwencji. Segment odpowiadający każdemu zdarzeniu jest podany w nawiasach. Wymieniono również wywołania SetTopology aplikacji, aby kolejność operacji było jaśniejsza.

Ta lista nie zawiera każdego zdarzenia, które może zostać odebrane. (Na przykład pomija zdarzenie MESessionCapabilitiesChanged, które jest wysyłane za każdym razem, gdy zmienią się możliwości sesji. Aplikacja zazwyczaj odbiera wiele zdarzeń MESessionCapabilitiesChanged w całej prezentacji. Zdarzenia wymienione w tym miejscu to te, które pokazują przejście z jednego segmentu do następnego. Najważniejsze zdarzenia to MENewPresentation, która sygnalizuje aplikację wstępnego wyrejestrowania następnej topologii i MEEndOfPresentationSegment, co sygnalizuje koniec segmentu (z wyjątkiem ostatniego segmentu).

Ponieważ zdarzenia w programie Media Foundation są asynchroniczne i nie są serializowane za pomocą wywołań metod, dokładna kolejność może się różnić. Można na przykład odebrać MF_TOPOSTATUS_STARTED_SOURCE dla S1, zanim aplikacja wywołuje SetTopology dla S2.

Ponadto w tym miejscu może nie zostać wyświetlone każde zdarzenie. Zdarzenia MEEndOfPresentation i MESessionEnded, na przykład, nie są wysyłane, chyba że ostatni segment ma flagę SequencerTopologyFlags_Last.

Na koniec ta lista nie wskazuje na upływ czasu. Czas od "początku S1" do "końca S1" to cały czas trwania S1, który może wynosić kilka sekund lub wiele godzin, w zależności od źródła.

Przykład 2. Odtwarzanie przy użyciu pomijania segmentów

W tym przykładzie aplikacja kolejkuje te same segmenty, ale pomija segment 3 podczas odtwarzania segmentu 1. W takim przypadku wysyłane są następujące zdarzenia:

Gdy aplikacja wywołuje Start, aby przejść do segmentu 3, źródło programu Sequencer anuluje segment 1, który nadal jest odtwarzany. Zdarzenie MEEndOfPresentationSegment zawiera atrybut MF_EVENT_SOURCE_TOPOLOGY_CANCELED wskazujący, że segment zakończył się, ponieważ został anulowany. Następnie, ponieważ segment 2 jest już wstępnie wdrożony, ten segment jest uruchamiany, ale następnie natychmiast anulowany. Zdarzenie MEEndOfPresentationSegment dla segmentu 2 zawiera również atrybut MF_EVENT_SOURCE_TOPOLOGY_CANCELED. Sesja może następnie przełączyć się na segment 3 i grać normalnie.

Informacje o źródła programu Sequencer

źródło Sequencer