Abrufen von Informationen aus ASF-Headerobjekten

ASF-Headerinformationen werden in den ASF-Headerobjekten einer Mediendatei gespeichert. Media Foundation stellt das ASF ContentInfo-Objekt bereit, um mit dem Header-Objekt zu arbeiten. Ein aufgefülltes ContentInfo-Objekt ist erforderlich, damit die Anwendung Headerinformationen einer vorhandenen Datei lesen kann. Dies wird durch Aufrufen von IMFASFContentInfo::P arseHeader erreicht. Wenn die Analyse erfolgreich abgeschlossen wurde, wird die ASF-Bibliothek für die Datei, die intern von Media Foundation verwaltet wird, mit Headerinformationen aus verschiedenen Headerobjekten aufgefüllt. Einige dieser Eigenschaften werden für die Anwendung verfügbar gemacht, die sie über Attribute für den Präsentationsdeskriptor, den Streamdeskriptor, das Profil und die Metadateneigenschaften abrufen kann.

Die vollständige Liste der Attribute finden Sie unter Media Foundation-Attribute für ASF-Headerobjekte.

Abrufen von Headerinformationen aus einem Präsentationsdeskriptor

Ein Präsentationsdeskriptorobjekt enthält die Beschreibung einer bestimmten Medienquelle, in diesem Fall der ASF-Medienquelle. Wenn der ParseHeader-Aufruf erfolgreich abgeschlossen wurde, werden Informationen aus dem Header-Objekt auf Dateiebene als Attribute im Präsentationsdeskriptor gespeichert. Um den Präsentationsdeskriptor zu erstellen, rufen Sie IMFASFContentInfo::GeneratePresentationDescriptor auf. Diese Methode gibt einen Zeiger auf ein aufgefülltes Präsentationsdeskriptorobjekt zurück, das diese Attribute für die ASF-Datei enthält, die dem ContentInfo-Objekt zugeordnet ist. Um Werte für bestimmte Attribute abzurufen, rufen Sie IMFAttributes::Getxxx-Methoden für den Präsentationsdeskriptor auf, und geben Sie das attribut MF_PD_ASF_xxx an.

Der folgende Beispielcode ruft die Wiedergabedauer einer ASF-Datei ab, die durch ein ContentInfo-Objekt angegeben wird.

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

Weitere Informationen zu Präsentationsdeskriptoren im Allgemeinen finden Sie unter Präsentationsdeskriptoren.

Den vollständigen Satz von Präsentationsdeskriptorattributen finden Sie unter Presentation Descriptor Attributes.

Abrufen von Headerinformationen aus einem Streamdeskriptor

Ein Streamdeskriptorobjekt macht die IMFStreamDescriptor-Schnittstelle verfügbar und beschreibt die Merkmale der Streams in der Datei. Der Präsentationsdeskriptor für den ASF-Inhalt enthält mindestens einen Streamdeskriptor, der die im Header-Objekt aufgeführten Streams darstellt. Nachdem der Aufruf von IMFASFContentInfo::GeneratePresentationDescriptor erfolgreich abgeschlossen wurde, werden die zugrunde liegenden Streamdeskriptoren mit Informationen auf Streamebene aus den verschiedenen Headerobjekten aufgefüllt. Um einen Streamdeskriptor für einen ASF-Stream abzurufen, rufen Sie IMFPresentationDescriptor::GetStreamDescriptorByIndex für den Präsentationsdeskriptor auf, der aus dem ContentInfo-Objekt generiert wird.

Einige der Streameigenschaften werden als Attribute für Streamdeskriptoren festgelegt. Rufen Sie IMFAttributes::Getxxx-Methoden für einen Streamdeskriptor auf, und geben Sie das attribut MF_SD_ASF_xxx an.

Den vollständigen Satz von Streamdeskriptorattributen finden Sie unter "ASF-Spezifische Streamdeskriptor"-Attribute, die in Stream-Deskriptorattributen aufgeführt sind.

Abrufen von Headerinformationen aus dem Profilobjekt

Neben Streamdeskriptoren beschreibt das ASF-Profilobjekt auch die Streameigenschaften. Um das Profil einer vorhandenen ASF-Datei abzurufen, rufen Sie IMFASFContentInfo::GetProfile auf. Das von dieser Methode zurückgegebene ASF-Profilobjekt enthält keines der MF_PD_ASF_xxx-Attribute . Diese Attribute sind erst für die Anwendung verfügbar, nachdem sie MFCreateASFProfileFromPresentationDescriptor aufgerufen hat, um das Profilobjekt aus einem Präsentationsdeskriptor zu generieren. Sie können das Profil verwenden, um Zeiger auf die Objekte zur gegenseitigen Ausschluss- und Streampriorisierung abzurufen.

Informationen zum Profilobjekt finden Sie unter ASF-Profil .

Abrufen von Metadaten aus Headerobjekten

Eine ASF-Datei kann mehrere Metadateneigenschaften enthalten, die während der Dateicodierung festgelegt werden. Eine Anwendung kann diese Eigenschaften mit dem ContentInfo-Objekt auflisten. Einige dieser Eigenschaften, z. B. VBR-Informationen (Variable Bit Rate), stehen der Anwendung über Attribute für präsentationsdeskriptor, Streamdeskriptoren und Medientypen für die Mediendatei zur Verfügung. Diese Attribute werden während der Initialisierung über den ParseHeader-Aufruf für das ContentInfo-Objekt festgelegt.

ASF ContentInfo-Objekt