[Windows Media Format 11 SDK 이 페이지와 연결된 기능은 레거시 기능입니다. 새로운 원본 판독기 및 싱크 작성기 가 기존 항목을 대체했습니다. 원본 판독기 및 싱크 기록기 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 원본 판독기 및 싱크 기록기 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
표식 ASF 파일 내의 명명된 지점입니다. 각 표식은 파일의 시작 부분부터 오프셋으로 측정된 이름과 연결된 시간으로 구성됩니다. 애플리케이션은 마커를 사용하여 콘텐츠 내의 다양한 지점에 이름을 할당하고, 해당 이름을 사용자에게 표시한 다음, 표식 위치를 검색할 수 있습니다. 애플리케이션은 기존 ASF 파일에서 마커를 추가하거나 제거할 수 있습니다.
IWMHeaderInfo 인터페이스에는 표식 작업을 위한 메서드가 포함되어 있습니다. 메타데이터 편집기 개체는 표식 추가 및 제거를 지원합니다. 기록기 및 판독기 개체는 표식을 검색할 수 있지만 표식을 추가하거나 제거할 수는 없습니다.
표식 추가
마커를 추가하려면 IWMHeaderInfo 인터페이스에 대한 메타데이터 편집기를 쿼리합니다. 그런 다음, 표식 이름을 와이드 문자열로 지정하고 시간을 100나노초 단위로 지정하여 IWMHeaderInfo::AddMarker 메서드를 호출합니다. 시간은 파일 기간을 초과하면 안됩니다. 두 표식은 같은 시간을 가질 수 있습니다.
다음 예제에서는 파일에 여러 표식을 추가합니다.
IWMMetadataEditor *pEdit = 0;
IWMHeaderInfo *pInfo = 0;
// Create the metadata editor object.
WMCreateEditor(&pEdit);
pEdit->Open(L"C:\\example.wmv");
pEdit->QueryInterface(IID_IWMHeaderInfo, (void**)&pInfo);
// Add the markers. Note that we add the last ones first. Do this when possible
// for improved performance when writing the markers to the file.
hr = pInfo->AddMarker(L"End", 520000000); // 52 sec.
hr = pInfo->AddMarker(L"Segue", 350000000); // 35 sec.
hr = pInfo->AddMarker(L"Intro", 15000000); // 1.5 sec.
// Commit changes and clean up.
pEdit->Flush();
pEdit->Close();
pInfo->Release();
pEdit->Release();
표식 제거
마커를 제거하려면 IWMHeaderInfo::RemoveMarker호출하여 제거할 표식의 인덱스 지정을 지정합니다. 표식은 시간 순서대로 자동으로 정렬되므로 인덱스 0은 항상 첫 번째 표식입니다. 주의하세요, RemoveMarker 를 호출하면 이후의 표식 인덱스 번호가 변경됩니다. pInfoIWMHeaderInfo 인터페이스에 대한 포인터인 다음 코드는 파일에서 모든 마커를 제거합니다.
WORD count = 0;
pInfo->GetMarkerCount(&count);
while (count--)
{
pInfo->RemoveMarker(0);
}
표식 가져오기
표식의 이름과 시간을 검색하려면 다음 단계를 수행합니다.
- IWMHeaderInfo::GetMarkerCount 메서드를 호출하여 파일에 포함된 표식 수를 확인합니다.
- 표식 이름을 포함하는 데 필요한 문자열의 크기를 검색합니다. 이렇게 하려면 IWMHeaderInfo::GetMarker 메서드를 호출합니다. 검색할 표식의 인덱스를 지정하고, 문자열 버퍼(pwszMarkerName 매개 변수)에는 NULL을 설정하십시오. 메서드는 pcchMarkerNameLen 매개 변수에서 종결 '\0' 문자를 포함하여 문자열의 길이를 반환합니다.
- 와이드 문자열을 이름을 받을 수 있도록 할당합니다.
- GetMarker 다시 호출하지만 이번에는 pwszMarkerName 매개 변수의 문자열 주소를 전달합니다. 이 메서드는 표식 이름을 문자열에 쓰고 pcnsMarkerTime 매개 변수의 표식 시간을 반환합니다.
다음 코드는 모든 표식을 순서대로 반복하고 이름과 시간을 검색합니다.
WORD cMarkers = 0;
HRESULT hr = pInfo->GetMarkerCount(&cMarkers);
WCHAR *wszName = 0;
WORD len = 0;
for (WORD iMarker = 0; iMarker < cMarkers; ++iMarker)
{
QWORD rtTime = 0;
WORD req_len = 0;
hr = pInfo->GetMarker(iMarker, 0, &req_len, &rtTime);
// Reallocate if necessary.
if (len < req_len)
{
delete[] wszName;
wszName = new WCHAR[req_len];
len = req_len;
}
hr = pInfo->GetMarker(iMarker, wszName, &req_len, &rtTime);
// Display the name...
}
delete[] wszName;
표식 찾기
표식 위치에서 재생을 시작하려면 판독기 개체의 IWMReaderAdvanced2::StartAtMarker 메서드를 호출하여 표식의 인덱스 지정을 지정합니다. 나머지 매개 변수는 IWMReader::Start 메서드의 매개 변수와 동일합니다. 다음 예제에서는 IWMReaderAdvanced2 인터페이스에 대한 판독기를 쿼리하고 첫 번째 표식을 찾습니다.
IWMReaderAdvanced2 *pReader2 = 0
WORD iMarkerIndex = 0;
hr = pReader->QueryInterface(IID_IWMReaderAdvanced2, (void**)&pReader2);
if (SUCCEEDED(hr))
{
hr = pPlayer2->StartAtMarker(iMarkerIndex, 0, 1.0, 0);
pPlayer2->Release();
}
관련 항목