Indexer-Erstellung und -Konfiguration

Der ASF-Indexer ist eine WMContainer-Layerkomponente, die zum Lesen oder Schreiben von Indexobjekten in einer ASF-Datei (Advanced Systems Format) verwendet wird. Dieses Thema enthält Informationen zum Erstellen des standardmäßigen Indexerobjekts, das von Media Foundation bereitgestellt wird.

Informationen zur Struktur einer ASF-Datei finden Sie unter ASF-Dateistruktur.

So erstellen und initialisieren Sie den ASF-Indexer

  1. Rufen Sie die MFCreateASFIndexer-Funktion auf, um einen IMFASFIndexer-Zeiger auf das Indexerobjekt zu empfangen.

  2. Rufen Sie IMFASFIndexer::SetFlags auf, um den Lese- oder Schreibmodus für indexer-Objekt anzugeben. Standardmäßig ist der Indexer für die Weiterleitungssuche konfiguriert.

    Zweck Flag
    Lesen (Vorwärtssuchen) Null (Standard)
    Lesen (Umgekehrte Suche) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK
    Schreiben MFASF_INDEXER_WRITE_NEW_INDEX

     

    Hinweis

    Die gleiche Instanz des Indexers kann nicht sowohl zum Lesen als auch zum Schreiben verwendet werden. Sie müssen den Indexer für einen oder einen anderen konfigurieren.

     

  3. Rufen Sie IMFASFIndexer::Initialize auf, um den Indexer zu initialisieren, indem Sie den IMFASFContentInfo-Zeiger des ContentInfo-Objekts angeben, der die zu schreibende oder gelesene Datei beschreibt. Das ContentInfo-Objekt enthält Informationen, die das ASF Header-Objekt darstellen. Das Indexerobjekt erfordert vor dem Generieren oder Lesen von Indexeinträgen einer ASF-Datei ein gültiges ContentInfo-Objekt.

Das folgende Codebeispiel zeigt, wie eine Anwendung das Indexerobjekt erstellen und initialisieren kann, um mit bestimmten ASF-Inhalten zu arbeiten. Das ContentInfo-Objekt stellt das ASF-Headerobjekt dar; der Inhalt wird als Bytedatenstrom übergeben.

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

ASF-Indexer

Verwenden des Indexers zum Suchen innerhalb einer ASF-Datei

Verwenden des Indexers zum Schreiben eines neuen Indexes