ASF ヘッダー オブジェクトからの情報の取得

ASF ヘッダー情報は、メディア ファイルの ASF ヘッダー オブジェクトに格納されます。 Media Foundation には、Header オブジェクトを操作するための ASF ContentInfo オブジェクトが用意されています。 アプリケーションが既存のファイルのヘッダー情報を読み取るには、設定された ContentInfo オブジェクトが必要です。 これは、 IMFASFContentInfo::P arseHeader を呼び出すことによって実現されます。 解析が正常に完了すると、Media Foundation によって内部的に管理されるファイルの ASF ライブラリに、さまざまなヘッダー オブジェクトのヘッダー情報が設定されます。 これらのプロパティの一部は、プレゼンテーション記述子、ストリーム記述子、プロファイル、およびメタデータ プロパティの属性を使用して取得できるアプリケーションに公開されます。

属性の完全な一覧については、「 ASF ヘッダー オブジェクトの Media Foundation 属性」を参照してください。

プレゼンテーション記述子からのヘッダー情報の取得

プレゼンテーション記述子オブジェクトには、特定のメディア ソース (この場合は ASF メディア ソース) の説明が含まれます。 ParseHeader 呼び出しが正常に完了すると、ヘッダー オブジェクトのファイル レベルの情報がプレゼンテーション記述子の属性として格納されます。 プレゼンテーション記述子を作成するには、 IMFASFContentInfo::GeneratePresentationDescriptor を呼び出します。 このメソッドは、ContentInfo オブジェクトに関連付けられている ASF ファイルのこれらの属性を含む、設定されたプレゼンテーション記述子オブジェクトへのポインターを返します。 特定の属性の値を取得するには、プレゼンテーション記述子で IMFAttributes::Getxxx メソッドを呼び出し、 MF_PD_ASF_xxx 属性を指定します。

次のコード例では、ContentInfo オブジェクトで指定された ASF ファイルの再生時間を取得します。

HRESULT GetPlayDuration(
    IMFASFContentInfo *pContentInfo,  // An initialized ContentInfo object. 
    UINT64 *pcbPlayDuration           // Receives the play duration.
    )
{
    IMFPresentationDescriptor* pPD = NULL;

    HRESULT hr = pContentInfo->GeneratePresentationDescriptor(&pPD);
    if (SUCCEEDED(hr))
    {
        hr = pPD->GetUINT64(MF_PD_ASF_FILEPROPERTIES_PLAY_DURATION, pcbPlayDuration);
        pPD->Release();
    }
    return hr;
}

一般的なプレゼンテーション記述子の詳細については、「 プレゼンテーション記述子」を参照してください。

プレゼンテーション記述子属性の完全なセットについては、「 プレゼンテーション記述子属性」を参照してください。

ストリーム記述子からのヘッダー情報の取得

ストリーム記述子オブジェクトは 、IMFStreamDescriptor インターフェイスを公開し、ファイル内のストリームの特性を記述します。 ASF コンテンツのプレゼンテーション記述子には、Header オブジェクトにリストされているストリームを表す 1 つ以上のストリーム記述子が含まれています。 IMFASFContentInfo::GeneratePresentationDescriptor の呼び出しが正常に完了すると、基になるストリーム記述子には、さまざまなヘッダー オブジェクトからのストリーム レベルの情報が設定されます。 ASF ストリームのストリーム記述子を取得するには、ContentInfo オブジェクトから生成されたプレゼンテーション記述子で IMFPresentationDescriptor::GetStreamDescriptorByIndex を呼び出します。

一部のストリーム プロパティは、ストリーム記述子の属性として設定されます。 ストリーム記述子で IMFAttributes::Getxxx メソッドを呼び出し、 MF_SD_ASF_xxx 属性を指定します。

ストリーム記述子属性の完全なセットについては、「ストリーム記述子属性」に記載されている「ASF 固有 のストリーム記述子」属性を参照してください。

Profile オブジェクトからのヘッダー情報の取得

ASF プロファイル オブジェクトは、ストリーム記述子に加えて、ストリームのプロパティも記述します。 既存の ASF ファイルのプロファイルを取得するには、 IMFASFContentInfo::GetProfile を呼び出します。 このメソッドによって返される ASF プロファイル オブジェクトには、 MF_PD_ASF_xxx 属性は含まれません。 これらの属性は、 MFCreateASFProfileFromPresentationDescriptor を呼び出してプレゼンテーション記述子からプロファイル オブジェクトを生成した後にのみ、アプリケーションで使用できます。 プロファイルを使用して、相互除外オブジェクトとストリーム優先度設定オブジェクトへのポインターを取得できます。

プロファイル オブジェクトの詳細については、「 ASF プロファイル 」を参照してください。

ヘッダー オブジェクトからのメタデータの取得

ASF ファイルには、ファイル エンコード中に設定される複数のメタデータ プロパティを含めることができます。 アプリケーションでは、ContentInfo オブジェクトを使用してこれらのプロパティを列挙できます。 可変ビット レート (VBR) 情報など、これらのプロパティの一部は、プレゼンテーション記述子、ストリーム記述子、メディア ファイルのメディアの種類に関する属性を使用してアプリケーションで使用できます。 これらの属性は、 ParseHeader 呼び出しによる初期化中に ContentInfo オブジェクトに設定されます。

ASF ContentInfo オブジェクト