비디오 파일에서 목차 읽기
이 항목에서는 비디오 파일에 이미 포함된 목차를 읽는 방법을 보여 줍니다.
먼저 CoCreateInstance 를 호출하여 TOC 파서 개체를 만들고 ITocParser 인터페이스를 가져옵니다. 그런 다음 메서드를 호출하여 다음 인터페이스를 가져옵니다.
ITocEntry의 메서드를 사용하여 목차의 개별 항목을 검사합니다. 예를 들어 항목의 제목, 시작 시간 및 종료 시간을 검사할 수 있습니다.
다음 목록에서는 단계를 자세히 설명합니다.
- CoCreateInstance를 호출하여 TOC 파서 개체를 만들고 해당 개체에 대한 ITocParser 인터페이스를 가져옵니다.
- ITocParser::Init를 호출하여 TOC 파서 초기화하고 비디오 파일과 연결합니다.
- ITocParser::GetTocByIndex를 호출하여 IToc 인터페이스를 가져옵니다.
- IToc::GetEntryListByIndex를 호출하여 ITocEntryList 인터페이스를 가져옵니다.
- ITocEntryList::GetEntryByIndex를 호출하여 ITocEntry 인터페이스를 가져옵니다.
- TOC_ENTRY_DESCRIPTOR 구조를 할당합니다.
- ITocEntry::GetDescriptor를 호출하여 TOC_ENTRY_DESCRIPTOR 구조를 채웁다.
다음 코드는 이전 목록의 단계를 보여 줍니다.
#include <stdio.h>
#include <wmcodecdsp.h>
HRESULT ShowEntryInfo(ITocEntry* pEntry);
void main()
{
HRESULT hr = CoInitialize(NULL);
if(SUCCEEDED(hr))
{
ITocParser* pTocParser = NULL;
hr = CoCreateInstance(CLSID_CTocParser, NULL, CLSCTX_INPROC_SERVER,
IID_ITocParser, (VOID**)&pTocParser);
if(SUCCEEDED(hr))
{
hr = pTocParser->Init(L"\\\\?\\c:\\experiment\\seattle.wmv");
if(SUCCEEDED(hr))
{
IToc* pToc = NULL;
hr = pTocParser->GetTocByIndex(TOC_POS_TOPLEVELOBJECT, 0, &pToc);
if(SUCCEEDED(hr))
{
ITocEntryList* pEntryList = NULL;
hr = pToc->GetEntryListByIndex(0, &pEntryList);
if(SUCCEEDED(hr))
{
ITocEntry* pEntry = NULL;
hr = pEntryList->GetEntryByIndex(0, &pEntry);
if(SUCCEEDED(hr))
{
hr = ShowEntryInfo(pEntry);
pEntry->Release();
pEntry = NULL;
}
pEntryList->Release();
pEntryList = NULL;
}
pToc->Release();
pToc = NULL;
}
}
pTocParser->Release();
pTocParser = NULL;
}
CoUninitialize();
}
}
HRESULT ShowEntryInfo(ITocEntry* pEntry)
{
HRESULT hr = E_FAIL;
TOC_ENTRY_DESCRIPTOR entryDesc = {0};
hr = pEntry->GetDescriptor(&entryDesc);
if(SUCCEEDED(hr))
{
printf_s("qwStartTime: %x\n", entryDesc.qwStartTime);
printf_s("qwEndTime: %x\n", entryDesc.qwEndTime);
printf_s("qwStartStartPacketOffset: %x\n", entryDesc.qwStartPacketOffset);
printf_s("qwEndPacketOffset: %x\n", entryDesc.qwEndPacketOffset);
printf_s("qwRepresentativeFrameTime: %x\n", entryDesc.qwRepresentativeFrameTime);
}
return hr;
}
관련 항목