Sequencer 원본 이벤트

Sequencer 원본이 파일 시퀀스를 재생하는 경우 미디어 세션은 일반적으로 일반 재생 중에 전송되고 미디어 세션 이벤트에 나열된 동일한 이벤트를 모두 보냅니다. 애플리케이션은 미디어 세션의 IMFMediaEventGenerator 인터페이스를 사용하여 이러한 이벤트를 가져옵니다.

또한 재생 목록 세그먼트와 관련된 일부 이벤트가 있습니다.

이벤트 Description
MENewPresentation 애플리케이션에 다음 토폴로지를 미리 등록하도록 신호를 보냅니다.
두 개의 연속 프레젠테이션 간에 원활한 전환을 제공하기 위해 시퀀서 원본은 다음 토폴로지를 미리 로드합니다. 활성 토폴로지를 계속 재생하는 동안 시퀀서 원본은 원본에서 사용할 수 있는 후속 토폴로지만 있으면 다음 토폴로지에 대해 이 이벤트를 보냅니다.
이 이벤트에 대한 이 이벤트 데이터는 다음 토폴로지의 프레젠테이션 설명자입니다. 애플리케이션은 Sequencer 원본 사용에 설명된 대로 미디어 세션에서 해당 토폴로지를 설정해야 합니다.
MEEndOfPresentationSegment 시퀀서 소스는 미디어 세션이 현재 세그먼트 재생을 완료했을 때 해당 세그먼트 뒤에 다른 세그먼트가 오는 경우 이 이벤트를 발생합니다. (현재 세그먼트가 마지막 세그먼트인 경우 시퀀서 원본은 대신 MEEndOfPresentation 이벤트를 발생합니다.)
미디어 세션은 이 이벤트를 애플리케이션에 전달합니다. 일반적으로 애플리케이션은 미디어 세션이 다음 세그먼트 처리를 시작한 후에도 MEEndOfPresentationSegment 를 수신하지만 미디어 싱크는 여전히 이전 세그먼트에 대한 샘플을 제공합니다.
MESessionTopologyStatus, 상태 MF_TOPOSTATUS_SINK_SWITCHED. 미디어 세션은 시퀀서 원본의 다음 토폴로지로 전환하고 미디어 싱크가 이전 토폴로지 재생을 완료할 때 이 이벤트를 발생합니다. 이 이벤트에는 다음 토폴로지에 대한 포인터가 포함됩니다.

 

예제 1: 건너뛰지 않고 재생

시퀀서 원본이 관련된 경우 미디어 세션에서 가져오는 이벤트 수는 혼동될 수 있습니다. 특히 한 세그먼트와 연결된 이벤트는 종종 다음 세그먼트에 대한 이벤트와 인터리빙되기 때문입니다.

첫 번째 예제에서 애플리케이션은 S1, S2 및 S3의 세 세그먼트를 큐에 대기합니다. 세 번째 세그먼트에는 시퀀스의 마지막 세그먼트임을 알리는 SequencerTopologyFlags_Last 플래그가 있습니다. 각 이벤트가 해당하는 세그먼트는 괄호로 제공됩니다. 애플리케이션의 SetTopology 호출도 나열되어 작업 순서를 더 명확하게 합니다.

이 목록에는 받을 수 있는 모든 이벤트가 포함되지 않습니다. 예를 들어 세션 기능이 변경되면 전송되는 MESessionCapabilitiesChanged 이벤트를 생략합니다. 애플리케이션은 일반적으로 프레젠테이션 전체에서 여러 MESessionCapabilitiesChanged 이벤트를 받습니다.) 여기에 나열된 이벤트는 한 세그먼트에서 다음 세그먼트로의 전환을 보여 주는 이벤트입니다. 가장 중요한 이벤트는 애플리케이션이 다음 토폴로지를 미리 등록하도록 알리는 MENewPresentation과 세그먼트의 끝을 알리는 MEEndOfPresentationSegment입니다(마지막 세그먼트 제외).

Media Foundation의 이벤트는 비동기적이며 메서드 호출로 직렬화되지 않으므로 정확한 순서가 다를 수 있습니다. 예를 들어 애플리케이션이 S2용 SetTopology를 호출하기 전에 S1에 대한 MF_TOPOSTATUS_STARTED_SOURCE 받을 수 있습니다.

또한 여기에 나열된 모든 이벤트가 표시되지 않을 수도 있습니다. 예를 들어 MEEndOfPresentationMESessionEnded 이벤트는 마지막 세그먼트에 SequencerTopologyFlags_Last 플래그가 없는 한 전송되지 않습니다.

마지막으로, 이 목록은 시간의 흐름을 나타내지 않습니다. "S1 시작"에서 "S1의 끝"으로의 시간은 원본에 따라 몇 초 또는 여러 시간이 될 수 있는 S1의 전체 기간입니다.

예제 2: 세그먼트 건너뛰기로 재생

이 예제에서 애플리케이션은 동일한 세그먼트를 큐에 대기하지만 세그먼트 1이 재생되는 동안 세그먼트 3으로 건너뜁니다. 이 경우 다음 이벤트가 전송됩니다.

애플리케이션에서 Start 를 호출하여 세그먼트 3으로 건너뛰면 시퀀서 소스는 여전히 재생 중인 세그먼트 1을 취소합니다. 이 세그먼트에 대한 MEEndOfPresentationSegment 이벤트에는 세그먼트가 취소되어 종료되었음을 나타내는 MF_EVENT_SOURCE_TOPOLOGY_CANCELED 특성이 포함됩니다. 그런 다음 세그먼트 2가 이미 미리 압연되었으므로 해당 세그먼트가 시작되었지만 즉시 취소됩니다. 세그먼트 2에 대한 MEEndOfPresentationSegment 이벤트에는 MF_EVENT_SOURCE_TOPOLOGY_CANCELED 특성도 포함됩니다. 그런 다음 세션은 세그먼트 3으로 전환하여 정상적으로 재생할 수 있습니다.

Sequencer 원본 정보

Sequencer 원본