Criação e configuração do indexador
O indexador ASF é um componente de camada WMContainer que é usado para ler ou gravar objetos de índice em um arquivo ASF (Advanced Systems Format). Este tópico fornece informações sobre como criar o objeto indexador padrão fornecido pela Media Foundation.
Para obter informações sobre a estrutura de um arquivo ASF, consulte a Estrutura de Arquivos ASF.
Para criar e inicializar o indexador ASF
Chame a função MFCreateASFIndexer para receber um ponteiro IMFASFIndexer para o objeto indexador.
Chame IMFASFIndexer::SetFlags para especificar o modo de leitura ou gravação para o objeto indexador. Por padrão, o indexador é configurado para busca de encaminhamento.
Use Sinalizador Leitura (busca de encaminhamento) Zero (padrão) Leitura (busca inversa) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK Gravando MFASF_INDEXER_WRITE_NEW_INDEX Observação
A mesma instância do indexador não pode ser usada para leitura e gravação. Você deve configurar o indexador para um ou outro.
Chame IMFASFIndexer::Initialize para inicializar o indexador especificando o ponteiro IMFASFContentInfo do objeto ContentInfo que descreve o arquivo a ser gravado ou lido. O objeto ContentInfo contém informações que constituem o objeto cabeçalho ASF. O objeto indexador requer um objeto ContentInfo válido antes de gerar ou ler entradas de índice de um arquivo ASF.
O exemplo de código a seguir mostra como um aplicativo pode criar e inicializar o objeto indexador para trabalhar com conteúdo ASF específico. O objeto ContentInfo representa o objeto cabeçalho ASF; o conteúdo é passado como um fluxo de bytes.
HRESULT CreateASFIndexer(
IMFASFContentInfo* pContentInfo,
DWORD dwFlags,
IMFASFIndexer** ppIndexer
)
{
*ppIndexer = NULL;
IMFASFIndexer *pIndexer = NULL;
HRESULT hr = MFCreateASFIndexer(&pIndexer);
if (FAILED(hr))
{
goto done;
}
hr = pIndexer->SetFlags(dwFlags);
if (FAILED(hr))
{
goto done;
}
hr = pIndexer->Initialize(pContentInfo);
if (FAILED(hr))
{
goto done;
}
// Return the object to the caller.
*ppIndexer = pIndexer;
(*ppIndexer)->AddRef();
done:
// Clean up.
SafeRelease(&pIndexer);
return hr;
}
Tópicos relacionados