2017-09-19 14 views
0

Media Foundation에서 지정된 시간에 스레드를 시작하려고합니다.Media Foundation을 사용하여 주어진 시간에 스레드를 실행/시작하는 방법은 무엇입니까?

나는 실행하거나 시작됩니다 이러한 기능이없는 DirectShow의 IMediaFiltertStart에 의해 호출 함수는 레퍼런스 클럭 :

Interface::HRESULT Run(REFERENCE_TIME tStart); 

의 그러나 미디어 재단의 시간 값이되는 것을 알고 시간을 매개 변수로 갖는 스레드.

Media Foundation에서이를 수행 할 수있는 해결책이 있습니까?

+0

주어진 시간까지 차단 한 다음 호출해야하는 항목을 호출하면 어떨까요? –

+0

2 명의 플레이어가 동일한 비디오를 볼 때 완벽한 이미지 동기화를 보장하지 않기 때문입니다. – maz

+0

이 방법을 사용하면 모든 스레드의 조건 변수를 기다린 다음 올바른 시간에 모두 알려줍니다. –

답변

0

DirectShow 또는 Media Foundation에는 질문 설명과 일치하는 기능이 없습니다.

두 API에는 요청 즉시 활동을 시작하는 메소드가 있습니다.

DirectShow의 IMediaFilter.Run은 처음부터 스레드를 시작하지 않습니다. 응용 프로그램이 IMediaControl::Run 메소드를 호출 할 때

..., 필터 그래프 매니저는 호출 IMediaFilter::Run 각 필터에 : 그럼 방법은 trick이 아닌 목적으로 사용하는 것입니다. 그래프 대기 시간을 고려하여 tStart의 값을 약간 나중에 설정합니다.

IMediaFilter::Run을 호출하는 단어가 없으므로이 메서드는 내부적으로 호출되어야합니다.

Media Foundation의 내부 디자인이 다릅니다. 시작을 예약 할 수 없으며 내부 작업 스레드에도 영향을 미치지 않습니다. 미디어 세션 활동을 시작하고 가능한 빨리 시작한다고 가정합니다.