다음을 통해 공유


동기 판독기를 사용하여 미디어 샘플을 검색하려면

[이 페이지와 연결된 기능인 Windows Media Format 11 SDK는 레거시 기능입니다. 원본 판독기 및 싱크 작성기에 의해 대체되었습니다. 원본 판독기 및 싱크 작성기는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 소스 판독기 및 싱크 작성기를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

동기 판독기에서 각 샘플을 한 번에 하나씩 요청해야 합니다. 이렇게 하면 수신하는 샘플과 수신 시기를 보다 자세히 제어할 수 있습니다.

IWMSyncReader::GetNextSample 메서드를 사용하여 샘플을 검색합니다. 매개 변수로 검색된 샘플에 대한 정보로 채워지는 변수에 주로 포인터를 전달해야 합니다. 유일한 입력 매개 변수는 wStreamNum입니다. 스트림 번호를 전달하면 GetNextSample 은 지정된 스트림 번호로 다음 샘플을 검색합니다. wStreamNum에 대해 0을 전달하면 파일에서 시간순으로 발생하는 다음 샘플이 검색됩니다.

기본적으로 동기 판독기는 출력의 모든 샘플을 시간순으로 파일에서 검색합니다. GetNextSample을 호출하고 가져올 샘플이 더 이상 없는 경우 실패한 오류 코드인 NS_E_NO_MORE_SAMPLES 반환합니다. 따라서 코딩할 때 메서드가 실패할 때까지 샘플을 반복할 수 있습니다.

참고

동기 판독기가 비디오 스트림에 대해 올바른 샘플 기간을 제공하도록 하려면 먼저 스트림 출력을 구성해야 합니다. IWMSyncReader::SetOutputSetting 메서드를 호출하여 g_wszVideoSampleDurations 설정을 TRUE로 설정합니다.

 

코드 예

다음 예제 코드에서는 GetNextSample을 사용하여 파일의 모든 샘플을 검색하는 방법을 보여 줍니다.

// Loop through all the samples in the file.
do
{
   // Get the next sample.
   hr = pSyncReader->GetNextSample(0,
                                   &pMyBuffer,
                                   &cnsSampleTime,
                                   &cnsSampleDuration,
                                   &dwFlags,
                                   &dwOutputNumber,
                                   NULL);

   if(SUCCEEDED(hr))
   {
      // TODO: Process the sample in whatever way is appropriate 
      // to your application. When finished, clean up.
      pMyBuffer->Release();
      pMyBuffer = NULL;
      cnsSampleTime     = 0;
      cnsSampleDuration = 0;
      dwFlags           = 0;
      dwOutputNumber    = 0;
   }
} 
while (SUCCEEDED(hr));

IWMSyncReader 인터페이스

동기 판독기를 사용하여 파일 읽기