Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In Windows Vista macht Microsoft Media Foundation Metadaten über die IMFMetadata Schnittstelle verfügbar.
Lesen von Metadaten
Führen Sie die folgenden Schritte aus, um Metadaten aus einer Medienquelle zu lesen:
- Rufen Sie einen Zeiger auf die IMFMediaSource Schnittstelle der Medienquelle ab. Sie können die IMFSourceResolver Schnittstelle verwenden, um einen IMFMediaSource Zeiger abzurufen.
- Rufen Sie IMFMediaSource::CreatePresentationDescriptor auf, um den Präsentationsdeskriptor der Medienquelle abzurufen.
- Rufen Sie MFGetService- auf der Medienquelle auf, um einen Zeiger auf die IMFMetadataProvider Schnittstelle abzurufen. Geben Sie im guidService Parameter von MFGetServiceden Wert MF_METADATA_PROVIDER_SERVICEan. Wenn die Quelle die IMFMetadataProvider Schnittstelle nicht unterstützt, gibt MFGetService-MF_E_UNSUPPORTED_SERVICEzurück.
- Rufen Sie IMFMetadataProvider::GetMFMetadata auf, und übergeben Sie einen Zeiger an den Präsentationsdeskriptor. Diese Methode gibt einen Zeiger auf die IMFMetadata Schnittstelle zurück.
- Zum Abrufen von Metadaten auf Streamebene rufen Sie zuerst IMFStreamDescriptor::GetStreamIdentifier auf, um den Datenstrombezeichner abzurufen. Übergeben Sie dann den Datenstrombezeichner im dwStreamIdentifier Parameter von GetMFMetadata.
- Um Metadaten auf Präsentationsebene abzurufen, legen Sie dwStreamIdentifier auf Null fest.
- [Optional] Rufen Sie IMFMetadata::GetAllLanguages auf, um eine Liste der Sprachen abzurufen, in denen Metadaten verfügbar sind. Sprachen werden mithilfe von RFC 1766-kompatiblen Sprachtags identifiziert.
- [Optional] Rufen Sie IMFMetadata::SetLanguage auf, um die Sprache auszuwählen.
- [Optional] Rufen Sie IMFMetadata::GetAllPropertyNames auf, um eine Liste der Namen aller Metadateneigenschaften für diesen Datenstrom oder diese Präsentation abzurufen.
- Rufen Sie IMFMetadata::GetProperty- auf, um einen bestimmten Metadateneigenschaftswert abzurufen und den Namen der Eigenschaft zu übergeben.
Der folgende Code zeigt die Schritte 2 bis 4:
HRESULT GetMetadata(
IMFMediaSource *pSource, IMFMetadata **ppMetadata, DWORD dwStream = 0)
{
IMFPresentationDescriptor *pPD = NULL;
IMFMetadataProvider *pProvider = NULL;
HRESULT hr = pSource->CreatePresentationDescriptor(&pPD);
if (FAILED(hr))
{
goto done;
}
hr = MFGetService(
pSource, MF_METADATA_PROVIDER_SERVICE, IID_PPV_ARGS(&pProvider));
if (FAILED(hr))
{
goto done;
}
hr = pProvider->GetMFMetadata(pPD, dwStream, 0, ppMetadata);
done:
SafeRelease(&pPD);
SafeRelease(&pProvider);
return hr;
}
Der folgende Code zeigt die Schritte 7 bis 8. Angenommen, DisplayProperty
ist eine Funktion, die einen PROPVARIANT Wert anzeigt.
HRESULT DisplayMetadata(IMFMetadata *pMetadata)
{
PROPVARIANT varNames;
HRESULT hr = pMetadata->GetAllPropertyNames(&varNames);
if (FAILED(hr))
{
return hr;
}
for (ULONG i = 0; i < varNames.calpwstr.cElems; i++)
{
wprintf(L"%s\n", varNames.calpwstr.pElems[i]);
PROPVARIANT varValue;
hr = pMetadata->GetProperty( varNames.calpwstr.pElems[i], &varValue );
if (SUCCEEDED(hr))
{
DisplayProperty(varValue);
PropVariantClear(&varValue);
}
}
PropVariantClear(&varNames);
return hr;
}
Verwandte Themen