Sekvenserarens källhändelser
När Sequencer Source spelar upp en sekvens med filer skickar mediasessionen vanligtvis samma händelser som skickas under normal uppspelning och som visas i Media Session Events. Programmet hämtar dessa händelser med hjälp av mediasessionens IMFMediaEventGenerator--gränssnitt.
Dessutom finns det vissa händelser som är specifika för spellistesegment.
Händelse | Beskrivning |
---|---|
MENewPresentation | Signalerar att programmet ska förregistrera nästa topologi. För att ge en sömlös övergång mellan två på varandra följande presentationer läser sekvenserarens källa in nästa topologi i förväg. Medan den aktiva topologin fortfarande spelas upp skickar sekvenserarens källa den här händelsen för nästa topologi, så länge det finns en efterföljande topologi tillgänglig i källan. Dessa händelsedata för den här händelsen är presentationsbeskrivningen för nästa topologi. Programmet ansvarar för att ange motsvarande topologi på mediesessionen enligt beskrivningen i Using the Sequencer Source. |
MEEndOfPresentationSegment | Sekvenserarens källa genererar den här händelsen när mediasessionen har slutfört uppspelningen av det aktuella segmentet, om det segmentet följs av ett annat segment. (Om det aktuella segmentet är det sista genererar sekvenserarens källa MEEndOfPresentation händelsen i stället.) Mediasessionen vidarebefordrar händelsen till programmet. Vanligtvis tar programmet emot MEEndOfPresentationSegment efter att mediesessionen har börjat bearbeta nästa segment, men medan mediemottagare fortfarande levererar exemplen för föregående segment. |
MESessionTopologyStatus, med statusen MF_TOPOSTATUS_SINK_SWITCHED. | Mediasessionen genererar den här händelsen när den gör en övergång till nästa topologi i sekvenserarens källa och mediemottagare har slutfört uppspelningen av föregående topologi. Den här händelsen innehåller en pekare till nästa topologi. |
Exempel 1: Uppspelning utan att hoppa över
När sekvenserarens källa är inblandad kan antalet händelser som du får från mediesessionen vara förvirrande, särskilt eftersom händelser som är associerade med ett segment ofta interfolieras med händelser för nästa segment.
I det första exemplet köar programmet tre segment, S1, S2 och S3. Det tredje segmentet har flaggan SequencerTopologyFlags_Last för att signalera att det är det sista segmentet i sekvensen. Det segment som varje händelse motsvarar anges inom parenteser. Programmets SetTopology-anrop visas också för att göra åtgärdsordningen tydligare.
- Programanrop IMFMediaSession::SetTopology (S1)
- MESessionTopologySet (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
- MENewPresentation (S2-förregistrering)
- Programanrop IMFMediaSession::SetTopology (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (början av S1)
- MESessionTopologySet (S2)
- MEEndOfPresentationSegment (slutet av S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (övergång till S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (början av S2)
- MENewPresentation (S3-förregistrering)
- Programanrop IMFMediaSession::SetTopology (S2)
- MESessionTopologySet (S3)
- MEEndOfPresentationSegment (slutet av S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (övergång till S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (början av S3)
- MEEndOfPresentation (slutet av S3; sista segmentet)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED
- MESessionEnded
Den här listan innehåller inte alla händelser som du kan få. (Den utelämnar till exempel händelsen MESessionCapabilitiesChanged, som skickas när sessionsfunktionerna ändras. Ett program tar vanligtvis emot flera MESessionCapabilitiesChanged-händelser under en presentation.) Händelserna som visas här är de som visar övergången från ett segment till ett annat. De viktigaste händelserna är MENewPresentation, som signalerar programmet att förregistrera nästa topologi och MEEndOfPresentationSegment, som signalerar slutet på ett segment (förutom det sista segmentet).
Eftersom händelser i Media Foundation är asynkrona och inte serialiseras med metodanrop kan den exakta ordningen variera. Du kan till exempel ta emot MF_TOPOSTATUS_STARTED_SOURCE för S1 innan programmet anropar SetTopology för S2.
Dessutom kanske du inte får alla händelser listade här. Händelserna MEEndOfPresentation och MESessionEnded skickas till exempel inte om inte det sista segmentet har flaggan SequencerTopologyFlags_Last.
Slutligen anger den här listan inte tidens gång. Tiden från "start av S1" till "slutet av S1" är hela varaktigheten för S1, vilket kan vara några sekunder eller många timmar, beroende på källan.
Exempel 2: Uppspelning med segmenthopp
I det här exemplet köar programmet samma segment, men hoppar över till segment 3 medan segment 1 spelas upp. I det här fallet skickas följande händelser:
- Programanrop IMFMediaSession::SetTopology (S1)
- MESessionTopologySet (S1)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
- MENewPresentation (S2-förregistrering)
- Programanrop IMFMediaSession::SetTopology (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (början av S1)
- MESessionTopologySet (S2)
- Programanrop IMFMediaSession::Starta (hoppa till S3)
- MENewPresentation (S3-förregistrering)
- Programanrop IMFMediaSession::SetTopology (S3)
- MESessionStarted
- MEEndOfPresentationSegment (S1 avbröts)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S1)
- MESessionTopologySet (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (övergång till S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_READY (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (S2)
- MEEndOfPresentationSegment (S2 avbröts)
- MESessionTopologyStatus: MF_TOPOSTATUS_ENDED (S2)
- MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (övergång till S3)
- MESessionTopologyStatus: TOPOSTATUS_READY (S3)
- MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (S3)
När programmet anropar Starta för att hoppa till segment 3 avbryter sekvenserarens källa segment 1, som fortfarande spelas upp. Händelsen MEEndOfPresentationSegment för det här segmentet innehåller attributet MF_EVENT_SOURCE_TOPOLOGY_CANCELED som anger att segmentet avslutades eftersom det avbröts. Eftersom segment 2 redan är förvalt startas det segmentet men avbryts sedan omedelbart. Händelsen MEEndOfPresentationSegment för segment 2 innehåller även attributet MF_EVENT_SOURCE_TOPOLOGY_CANCELED. Sessionen kan sedan växla till segment 3 och spela upp den normalt.
Relaterade ämnen