Eventos de origem do sequenciador

Quando a Origem do Sequencer 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 são listados em Eventos de Sessão de Mídia. O aplicativo obtém esses eventos usando a interface IMFMediaEventGenerator da Sessão de Mídia.

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

Evento 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 estiver em execução, 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 a origem do sequencer.
MEEndOfPresentationSegment A origem 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 origem do sequenciador gerará o evento MEEndOfPresentation em vez disso.)
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 MF_TOPOSTATUS_SINK_SWITCHED de status. 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 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.

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 durante 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 ignorar segmento

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

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 a origem do sequenciador

Origem do sequenciador