Partilhar via


Eventos de origem do sequenciador

Quando o Sequencer Source reproduz uma sequência de arquivos, a Sessão de Mídia geralmente envia todos os mesmos eventos que são enviados durante a reprodução normal e que estão listados em Eventos de Sessão de Mídia. O aplicativo obtém esses eventos usando a interface deIMFMediaEventGeneratorMedia Session.

Além disso, existem alguns eventos que são específicos para segmentos de listas de reprodução.

Evento Descrição
MENewPresentation Sinaliza o aplicativo para pré-rolar a próxima topologia.
Para fornecer uma transição perfeita entre duas apresentações consecutivas, a fonte do sequenciador carrega a próxima topologia com antecedência. Enquanto a topologia ativa ainda está em execução, a fonte do sequenciador envia esse evento para a próxima topologia, desde que haja uma topologia subsequente disponível na fonte.
Esses dados de evento para este evento são o descritor de apresentação para a próxima topologia. O aplicativo é responsável por definir a topologia correspondente na sessão de mídia, conforme descrito em Usando a fonte do Sequencer.
MEEndOfPresentationSegment A fonte do sequenciador gera esse evento quando a Sessão de Mídia tiver concluído a reprodução do segmento atual, se esse segmento for seguido por outro segmento. (Se o segmento atual for o último, a fonte do sequenciador acionará o evento MEEndOfPresentation em vez disso.)
A Sessão de Mídia encaminha esse evento para o aplicativo. Normalmente, o aplicativo recebe MEEndOfPresentationSegment depois que a sessão de mídia começou a processar o próximo segmento, mas enquanto os coletores de mídia ainda estão entregando as amostras para o segmento anterior.
MESessionTopologyStatus, com status MF_TOPOSTATUS_SINK_SWITCHED. A Sessão de Mídia gera esse evento quando faz uma transição para a próxima topologia na origem do sequenciador e os coletores de mídia concluíram a reprodução da topologia anterior. Esse evento contém um ponteiro para a próxima topologia.

 

Exemplo 1: Reprodução sem Saltar

Quando a fonte do sequenciador está envolvida, o número de eventos que você obtém da Sessão de Mídia pode ser confuso, especialmente porque os eventos associados a um segmento geralmente são intercalados com eventos para o próximo segmento.

No primeiro exemplo, o aplicativo enfileira três segmentos, S1, S2 e S3. O terceiro segmento tem a bandeira SequencerTopologyFlags_Last, para sinalizar que é o último segmento na sequência. O segmento a que corresponde cada acontecimento é indicado entre parênteses. As chamadas SetTopology do aplicativo também são listadas, para tornar a ordem das operações mais clara.

  • Chamadas de aplicativo IMFMediaSession::SetTopology (S1)
  • MESessionTopologySet (S1)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S1)
  • MENewPresentation (pré-rolo S2)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (início do S1)
  • MESessionTopologySet (S2)
  • MEEndOfPresentationSegment (fim de S1)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S1)
  • MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transição para S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (início do S2)
  • MENewPresentation (pré-rolo S3)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologySet (S3)
  • MEEndOfPresentationSegment (fim de S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_SINK_SWITCHED (transição para S3)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S3)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (início do S3)
  • MEEndOfPresentation (final do S3; último segmento)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED
  • MESessionEnded

Esta lista não inclui todos os eventos que possa receber. (Por exemplo, ele omite o evento MESessionCapabilitiesChanged, que é enviado sempre que os recursos da sessão são alterados. Um aplicativo normalmente recebe vários eventos MESessionCapabilitiesChanged ao longo de uma apresentação.) Os eventos listados aqui são aqueles que mostram a transição de um segmento para o próximo. Os eventos mais importantes são MENewPresentation, que sinaliza o aplicativo para pré-rolar a próxima topologia, e MEEndOfPresentationSegment, que sinaliza o fim de um segmento (exceto para o último segmento).

Como os eventos no Media Foundation são assíncronos e não são serializados com chamadas de método, a ordem exata pode variar. Por exemplo, você pode receber MF_TOPOSTATUS_STARTED_SOURCE para S1 antes que o aplicativo chame SetTopology para S2.

Além disso, você pode não ter todos os eventos listados aqui. Os MEEndOfPresentation e eventos MESessionEnded, por exemplo, não são enviados a menos que o último segmento tenha o sinalizador SequencerTopologyFlags_Last.

Finalmente, esta lista não indica a passagem do tempo. O tempo entre "início de S1" e "fim de S1" é toda a duração de S1, que pode ser de alguns segundos ou muitas horas, dependendo da fonte.

Exemplo 2: Reprodução com Saltar Segmento

Neste exemplo, o aplicativo enfileira os mesmos segmentos, mas pula para o segmento 3 enquanto o segmento 1 está sendo reproduzido. Neste caso, os seguintes eventos são enviados:

  • Chamadas de aplicativo IMFMediaSession::SetTopology (S1)
  • MESessionTopologySet (S1)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S1)
  • MENewPresentation (pré-rolo S2)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (início do S1)
  • MESessionTopologySet (S2)
  • Chamadas de aplicativo IMFMediaSession::Start (pular para o S3)
  • MENewPresentation (pré-rolo S3)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S3)
  • MESessionStarted
  • MEEndOfPresentationSegment (S1 cancelado)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S1)
  • MESessionTopologySet (S3)
  • MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transição para S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (S2)
  • MEEndOfPresentationSegment (S2 cancelado)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_SINK_SWITCHED (transição para S3)
  • MESessionTopologyStatus : TOPOSTATUS_READY (S3)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (S3)

Quando o aplicativo chama Iniciar para pular para o segmento 3, a fonte do sequenciador cancela o segmento 1, que ainda está em execução. O evento MEEndOfPresentationSegment para este segmento contém o atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED, indicando que o segmento terminou porque foi cancelado. Então, como o segmento 2 já está pré-rolado, esse segmento é iniciado, mas imediatamente cancelado. O evento MEEndOfPresentationSegment para o segmento 2 também contém o atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED. A sessão pode então mudar para o segmento 3 e reproduzi-la normalmente.

Sobre o de origem do Sequencer

de origem do sequenciador