동기 판독기를 사용하여 미디어 샘플을 검색하려면
[이 페이지와 연결된 기능인 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));
관련 항목