次の方法で共有


インデクサーの作成と構成

ASF インデクサー は、Advanced Systems Format (ASF) ファイルのインデックス オブジェクトの読み取りまたは書き込みに使用される WMContainer レイヤー コンポーネントです。 このトピックでは、Media Foundation によって提供される既定のインデクサー オブジェクトの作成について説明します。

ASF ファイルの構造については、「 ASF ファイルの構造」を参照してください。

ASF インデクサーを作成して初期化するには

  1. MFCreateASFIndexer 関数を呼び出して、インデクサー オブジェクトへの IMFASFIndexer ポインターを受け取ります。

  2. IMFASFIndexer::SetFlags を呼び出して、インデクサー オブジェクトの読み取りまたは書き込みモードを指定します。 既定では、インデクサーは前方シーク用に構成されています。

    用途 フラグ
    読み取り (前方シーク) ゼロ (既定値)
    読み取り (逆シーク) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK
    書き込み MFASF_INDEXER_WRITE_NEW_INDEX

     

    注意

    インデクサーの同じインスタンスを読み取りと書き込みの両方に使用することはできません。 どちらか一方のインデクサーを構成する必要があります。

     

  3. 書き込みまたは読み取りを行うファイルを記述する ContentInfo オブジェクトの IMFASFContentInfo ポインターを指定してインデクサーを初期化するには、IMFASFIndexer::Initialize を呼び出します。 ContentInfo オブジェクトには、 ASF ヘッダー オブジェクトを構成する情報が含まれています。 インデクサー オブジェクトには、ASF ファイルのインデックス エントリを生成または読み取る前に、有効な ContentInfo オブジェクトが必要です。

次のコード例は、アプリケーションが特定の ASF コンテンツを操作するためにインデクサー オブジェクトを作成および初期化する方法を示しています。 ContentInfo オブジェクトは ASF ヘッダー オブジェクトを表します。コンテンツはバイト ストリームとして渡されます。

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 インデクサー

インデクサーを使用して ASF ファイル内でシークする

インデクサーを使用して新しいインデックスを書き込む