Condividi tramite


Creazione e configurazione dell'indicizzatore

L'indicizzatore ASF è un componente del livello WMContainer usato per leggere o scrivere oggetti indice in un file ASF (Advanced Systems Format). In questo argomento vengono fornite informazioni sulla creazione dell'oggetto indicizzatore predefinito fornito da Media Foundation.

Per informazioni sulla struttura di un file ASF, vedere struttura di file ASF.

Per creare e inizializzare l'indicizzatore ASF

  1. Chiamare la funzioneMFCreateASFIndexer per ricevere un puntatoreIMFASFIndexerall'oggetto indicizzatore.

  2. Chiamare IMFASFIndexer::SetFlags per specificare la modalità di lettura o scrittura per l'oggetto indicizzatore. Per impostazione predefinita, l'indicizzatore è configurato per la ricerca in avanti.

    Usare Bandiera
    Lettura (ricerca in avanti) Zero (impostazione predefinita)
    Lettura (ricerca inversa) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK
    Scrittura MFASF_INDEXER_WRITE_NEW_INDEX

     

    Nota

    Non è possibile utilizzare la stessa istanza dell'indicizzatore sia per la lettura che per la scrittura. È necessario configurare l'indicizzatore per uno o l'altro.

     

  3. Chiamare IMFASFIndexer::Initialize per inizializzare l'indicizzatore specificando il puntatore IMFASFContentInfo dell'oggetto ContentInfo che descrive il file da scrivere o leggere. L'oggetto ContentInfo contiene informazioni che costituiscono l'oggetto intestazione ASF . L'oggetto indicizzatore richiede un oggetto ContentInfo valido prima di generare o leggere voci di indice di un file ASF.

Nell'esempio di codice seguente viene illustrato come un'applicazione può creare e inizializzare l'oggetto indicizzatore per lavorare con contenuto ASF specifico. L'oggetto ContentInfo rappresenta l'oggetto intestazione ASF; il contenuto viene passato come flusso di byte.

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

indicizzatore ASF

Uso dell'indicizzatore per la ricerca all'interno di un file ASF

uso dell'indicizzatore per scrivere un nuovo di indice