События источника Sequencer

Когда источник Sequencer воспроизводит последовательность файлов, сеанс мультимедиа обычно отправляет все те же события, которые отправляются во время обычного воспроизведения и которые перечислены в разделе События сеанса мультимедиа. Приложение получает эти события с помощью интерфейса IMFMediaEventGenerator сеанса мультимедиа.

Кроме того, существуют некоторые события, относящиеся к сегментам списка воспроизведения.

Событие Описание
MENewPresentation Сигнализирует приложению о предварительной подготовке следующей топологии.
Чтобы обеспечить простой переход между двумя последовательными презентациями, источник секвенсора заранее загружает следующую топологию. Пока активная топология по-прежнему воспроизводит, источник секвенсора отправляет это событие для следующей топологии, если в источнике есть следующая топология.
Эти данные события для этого события являются дескриптором представления для следующей топологии. Приложение отвечает за настройку соответствующей топологии в сеансе мультимедиа, как описано в разделе Использование источника Sequencer.
MEEndOfPresentationSegment Источник секвенсора вызывает это событие, когда сеанс мультимедиа завершил воспроизведение текущего сегмента, если за этим сегментом следует другой сегмент. (Если текущий сегмент является последним, источник секвенсора вызывает событие MEEndOfPresentation .)
Сеанс мультимедиа перенаправит это событие в приложение. Как правило, приложение получает MEEndOfPresentationSegment после того, как сеанс мультимедиа начал обработку следующего сегмента, но в то время как приемники мультимедиа по-прежнему доставляют образцы для предыдущего сегмента.
MESessionTopologyStatus с состоянием MF_TOPOSTATUS_SINK_SWITCHED. Сеанс мультимедиа вызывает это событие, когда выполняется переход к следующей топологии в источнике секвенсора и приемники мультимедиа завершили воспроизведение предыдущей топологии. Это событие содержит указатель на следующую топологию.

 

Пример 1. Воспроизведение без пропуска

При использовании источника секвенсора количество событий, полученных из сеанса мультимедиа, может быть запутанным, особенно потому, что события, связанные с одним сегментом, часто чередуются с событиями для следующего сегмента.

В первом примере приложение помещает в очередь три сегмента: S1, S2 и S3. Третий сегмент имеет флаг SequencerTopologyFlags_Last , чтобы сообщить, что он является последним сегментом в последовательности. Сегмент, которому соответствует каждое событие, задается в круглых скобках. Также перечислены вызовы SetTopology приложения, чтобы сделать порядок операций более четким.

Этот список не включает все события, которые вы можете получить. (Например, он пропускает событие MESessionCapabilitiesChanged , которое отправляется при каждом изменении возможностей сеанса. Приложение обычно получает несколько событий MESessionCapabilitiesChanged на протяжении всей презентации.) Здесь перечислены события, которые показывают переход от одного сегмента к другому. Наиболее важными событиями являются MENewPresentation, которая сигнализирует приложению о необходимости предварительной подготовки следующей топологии, и MEEndOfPresentationSegment, которая сигнализирует о конце сегмента (за исключением последнего сегмента).

Так как события в Media Foundation являются асинхронными и не сериализуются с помощью вызовов методов, точный порядок может отличаться. Например, вы можете получить MF_TOPOSTATUS_STARTED_SOURCE для S1, прежде чем приложение вызовет SetTopology для S2.

Кроме того, вы можете не получить все события, перечисленные здесь. Например, события MEEndOfPresentation и MESessionEnded не отправляются, если последний сегмент не имеет флаг SequencerTopologyFlags_Last .

Наконец, этот список не указывает на течение времени. Время от начала S1 до конца S1 — это вся длительность S1, которая может составлять несколько секунд или много часов в зависимости от источника.

Пример 2. Воспроизведение с пропуском сегмента

В этом примере приложение помещает в очередь те же сегменты, но переходит к сегменту 3, пока выполняется воспроизведение сегмента 1. В этом случае отправляются следующие события:

Когда приложение вызывает Start , чтобы перейти к сегменту 3, источник sequencer отменяет сегмент 1, который все еще воспроизводит. Событие MEEndOfPresentationSegment для этого сегмента содержит атрибут MF_EVENT_SOURCE_TOPOLOGY_CANCELED , указывающий, что сегмент закончился, так как он был отменен. Затем, так как сегмент 2 уже предварительно свернут, этот сегмент запускается, но затем немедленно отменяется. Событие MEEndOfPresentationSegment для сегмента 2 также содержит атрибут MF_EVENT_SOURCE_TOPOLOGY_CANCELED . Затем сеанс может переключиться на сегмент 3 и воспроизвести его в обычном режиме.

Сведения об источнике Sequencer

Источник Sequencer