Erstellen eines ASF-Profils
In diesem Thema wird beschrieben, wie Sie ein ASF-Profil in Microsoft Media Foundation erstellen.
- Erstellen eines neuen Profils
- Abrufen des Profils aus dem ASF ContentInfo-Objekt
- Abrufen des Profils aus einem Präsentationsdeskriptor
- Zugehörige Themen
Erstellen eines neuen Profils
Um ein leeres ASF-Profil zu erstellen, rufen Sie die MFCreateASFProfile-Funktion auf. Diese Funktion gibt einen Zeiger auf die IMFASFProfile-Schnittstelle zurück. Die Anwendung kann diese Schnittstelle verwenden, um dem Profil Streams hinzuzufügen und die einzelnen Streams zu konfigurieren. Weitere Informationen finden Sie unter Erstellen und Konfigurieren von ASF-Streams.
Optional kann die Anwendung zwei oder mehr Streams Objekte zum gegenseitigen Ausschluss hinzufügen. Weitere Informationen finden Sie unter Verwenden des gegenseitigen Ausschlusses für ASF-Streams.
Abrufen des Profils aus dem ASF ContentInfo-Objekt
Eine Anwendung kann das ASF-Profil einer vorhandenen ASF-Datei aus dem ASF ContentInfo-Objekt abrufen. Das Profil ist bereits konfiguriert und enthält Einstellungen für alle Streams in der Datei.
Initialisieren Sie das ContentInfo-Objekt, indem Sie das ASF-Headerobjekt der Datei analysieren. Dies erfolgt über die IMFASFContentInfo::P arseHeader-Methode . Nachdem alle Headerobjekte gelesen und die ASF-Bibliothek aufgefüllt wurde, wird das Profil für diese Datei generiert. Die Anwendung kann einen Zeiger auf dieses initialisierte Profil abrufen, indem SIE IMFASFContentInfo::GetProfile aufruft.
Abrufen des Profils aus einem Präsentationsdeskriptor
Sie können das Profilobjekt einer vorhandenen ASF-Datei aus dem Präsentationsdeskriptor für die Datei oder aus dem ASF ContentInfo-Objekt abrufen. In diesem Fall ist das Profil bereits konfiguriert und enthält Einstellungen für alle Datenströme in der Datei. Dies kann nützlich sein, wenn Sie ein vorhandenes ASF-Profil ändern möchten. Beispielsweise können Sie eine Windows Media Video-Datei mit einer niedrigeren Bitrate neu codieren.
Um das Profil aus dem Präsentationsdeskriptor abzurufen, rufen Sie MFCreateASFProfileFromPresentationDescriptor auf. Diese Funktion analysiert den Präsentationsdeskriptor und füllt ein ASF-Profil mit Informationen zur Mediendatei auf. Die Funktion gibt einen Zeiger auf die IMFASFProfile-Schnittstelle zurück. Sie können dann diese Schnittstelle verwenden, um das Profil zu ändern.
Um den Präsentationsdeskriptor abzurufen, rufen Sie eine der folgenden Methoden auf:
- Rufen Sie in der ASF-Medienquelle IMFMediaSource::CreatePresentationDescriptor auf.
- Rufen Sie im ASF ContentInfo-ObjektIMFASFContentInfo::GeneratePresentationDescriptor auf. Stellen Sie vor dem Aufrufen dieser Methode sicher, dass das ContentInfo-Objekt zum Lesen initialisiert ist. Weitere Informationen finden Sie unter Initialisieren des ContentInfo-Objekts aus einer vorhandenen ASF-Datei unter Lesen des ASF-Headerobjekts einer vorhandenen Datei. Wenn Sie jedoch bereits über ein initialisiertes ContentInfo-Objekt verfügen, können Sie das Profil direkt daraus abrufen. Dies wird weiter unten in diesem Thema in "Abrufen des Profils aus dem ContentInfo-Objekt" beschrieben.
Das folgende Beispiel zeigt, wie Sie ein Profil aus einem Präsentationsdeskriptor erstellen. Die Funktion erstellt eine Medienquelle für die Datei, ruft den Präsentationsdeskriptor aus der Medienquelle ab und erstellt ein Profil. In diesem Beispiel wird davon ausgegangen, dass pszFileName die URL einer ASF-Datei angibt.
HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
*ppProfile = NULL;
IMFSourceResolver* pResolver = NULL;
IUnknown* pSourceUnk = NULL;
IMFMediaSource* pSource = NULL;
IMFPresentationDescriptor* pPD = NULL;
// Create the source resolver.
HRESULT hr = MFCreateSourceResolver(&pResolver);
// Use the source resolver to create the media source.
if (SUCCEEDED(hr))
{
MF_OBJECT_TYPE ObjectType;
hr = pResolver->CreateObjectFromURL(
pszFileName,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSourceUnk
);
}
// Get the IMFMediaSource interface from the media source.
if (SUCCEEDED(hr))
{
hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
}
// Get the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = pSource->CreatePresentationDescriptor(&pPD);
}
// Get the profile from the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
}
SafeRelease(&pResolver);
SafeRelease(&pSourceUnk);
SafeRelease(&pSource);
SafeRelease(&pPD);
return hr;
}
In diesem Beispiel wird SafeRelease verwendet, um Schnittstellenzeiger freizugeben.
Zugehörige Themen