Compartilhar via


Eventos de origem do sequencer

Quando o de origem do Sequencer executa 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 são listados em eventos de sessão de mídia . O aplicativo obtém esses eventos usando a interfaceIMFMediaEventGeneratorda Sessão de Mídia.

Além disso, há alguns eventos específicos para segmentos de playlist.

Acontecimento Descrição
MENewPresentation Sinaliza o aplicativo para pré-registrar a próxima topologia.
Para fornecer uma transição perfeita entre duas apresentações consecutivas, a origem do sequenciador carrega a próxima topologia com antecedência. Enquanto a topologia ativa ainda está sendo reproduzida, a origem do sequenciador envia esse evento para a próxima topologia, desde que haja uma topologia subsequente disponível na origem.
Esses dados de evento para esse 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 ode Origem do Sequencer.
MEEndOfPresentationSegment A origem do sequenciador gerará 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 origem do sequenciador gerará o evento MEEndOfPresentation.)
A Sessão de Mídia encaminha esse evento para o aplicativo. Normalmente, o aplicativo recebe MEEndOfPresentationSegment após a Sessão de Mídia começar a processar o próximo segmento, mas enquanto os coletores de mídia ainda estão fornecendo os exemplos 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 foram concluídos reproduzindo a topologia anterior. Esse evento contém um ponteiro para a próxima topologia.

 

Exemplo 1: Reprodução sem ignorar

Quando a origem do sequenciador está envolvida, o número de eventos obtidos 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 o sinalizador SequencerTopologyFlags_Last, para sinalizar que é o último segmento na sequência. O segmento ao qual cada evento corresponde é dado entre parênteses. As chamadas SetTopology do aplicativo também estã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é-registro S2)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (início do S1)
  • MESessionTopologySet (S2)
  • MEEndOfPresentationSegment (final 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é-registro S3)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologySet (S3)
  • MEEndOfPresentationSegment (final 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

Essa lista não inclui todos os eventos que você pode 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 os que mostram a transição de um segmento para o outro. Os eventos mais importantes são MENewPresentation, que sinaliza o aplicativo para pré-registrar 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, talvez você não obtenha todos os eventos listados aqui. Os eventos MEEndOfPresentation e MESessionEnded, por exemplo, não são enviados, a menos que o último segmento tenha o sinalizador SequencerTopologyFlags_Last.

Por fim, essa lista não indica a passagem do tempo. O tempo de "início do S1" ao "fim do S1" é toda a duração de S1, que pode ser de alguns segundos ou muitas horas, dependendo da origem.

Exemplo 2: reprodução com o segmento ignorando

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

  • Chamadas de aplicativo IMFMediaSession::SetTopology (S1)
  • MESessionTopologySet (S1)
  • MESessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
  • MENewPresentation (pré-registro S2)
  • Chamadas de aplicativo IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (início do S1)
  • MESessionTopologySet (S2)
  • Chamadas de aplicativo IMFMediaSession::Start (pule para S3)
  • MENewPresentation (pré-registro 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 origem do sequenciador cancela o segmento 1, que ainda está sendo reproduzido. O evento MEEndOfPresentationSegment para esse segmento contém o atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED, indicando que o segmento terminou porque foi cancelado. Em seguida, como o segmento 2 já está pré-rolado, esse segmento é iniciado, mas cancelado imediatamente. O evento MEEndOfPresentationSegment para o segmento 2 também contém o atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED. Em seguida, a sessão pode alternar para o segmento 3 e reproduzi-la normalmente.

sobre o de origem do sequencer

de origem do sequenciador de