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

  1. Chame a função MFCreateASFIndexer para receber um ponteiro IMFASFIndexer para o objeto indexador.

  2. 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.

     

  3. 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;
}

Indexador ASF

Usando o indexador para buscar dentro de um arquivo ASF

Usando o indexador para gravar um novo índice