Hinzufügen von Metadaten zum Dateisenken
Die ASF-Dateisenken ist eine Implementierung von IMFMediaSink von Media Foundation, die eine Anwendung zum Archivieren von ASF-Mediendaten in einer Datei verwenden kann. Informationen zum OBJEKTmodell von ASF Media Sinks und zur allgemeinen Verwendung finden Sie unter ASF Media Sinks.
Nach dem Erstellen des ASF-Dateisenken muss sie mit Informationen zu den Datenströmen und Codierungsinformationen in der Ausgabedatei konfiguriert werden. Diese Verfahren werden im Hinzufügen von Streaminformationen zum ASF-Dateisenken und Festlegen von Eigenschaften im Dateisenken beschrieben. Darüber hinaus können Sie Metadateninformationen hinzufügen, die Namen-/Wertpaare wie "Autor", Titel" enthalten. In diesem Thema wird der Prozess zum Hinzufügen von Metadateninformationen zum Dateisenken beschrieben, sodass es im endgültigen ASF-Headerobjekt angezeigt wird.
Sie können dem ASF-Dateisenken Metadateninformationen hinzufügen, bevor Sie die Codierungstopologie erstellen. Das ASF ContentInfo-Objekt für das Dateisenken verfolgt die Metadateneigenschaften und wird über die IMFMetadata-Schnittstelle für die Anwendung verfügbar gemacht. Einige dieser Eigenschaften, z. B. "IsVBR", die angibt, ob die Datei variable Bitrate (VBR)-Datenströme enthält, werden automatisch durch das Dateisenken festgelegt, indem die festgelegten Datenstromcodierungseigenschaften analysiert werden.
Eine vollständige Liste der Eigenschaften finden Sie im Thema "Attributliste" in der Format SDK-Dokumentation.
Verwenden der IMFMetadata-Schnittstelle im ASF-Dateisenken
Abfragen des ASF-Dateisenkenobjekts, um einen Zeiger auf die Implementierung der IMFMetadataProvider-Schnittstelle abzurufen.
Rufen Sie IMFMetadataProvider::GetMFMetadata auf, um einen IMFMetadata-Zeiger abzurufen.
Der Parameter pPresentationDescriptor wird ignoriert, und die Anwendung kann NULL übergeben. Wenn die Anwendung null als Datenstrombezeichner im dwStreamIdentifier-Parameter übergibt, ruft die Methode Metadaten ab, die für die gesamte ASF-Datei gelten. Andernfalls werden nur die Metadaten für den Datenstrom abgerufen.
Rufen Sie IMFMetadata::GetAllPropertyNames auf, um die Liste der auf dem Medieninhalt festgelegten Dateicodierungseigenschaften abzurufen.
Rufen Sie IMFMetadata::GetProperty auf, um die Eigenschaftswerte abzurufen.
Beispiel
Im folgenden Beispielcode wird gezeigt, wie Sie die Eigenschaftennamen und -werte aufzählen, die in der ASF-Datei festgelegt sind.
/////////////////////////////////////////////////////////////////////
// Name: ListASFProperties
//
// Enumerates the metadata properties of the ASF file.
//
// pContentInfo: Pointer to the ASF ContentInfo object.
/////////////////////////////////////////////////////////////////////
HRESULT ListASFProperties(IMFASFContentInfo *pContentInfo)
{
HRESULT hr = S_OK;
PROPVARIANT varNames;
PropVariantInit(&varNames);
PROPVARIANT varValue;
PropVariantInit(&varValue);
IMFMetadataProvider* pProvider = NULL;
IMFMetadata* pMetadata = NULL;
// Query the ContentInfo object for IMFMetadataProvider.
CHECK_HR(hr = pContentInfo->QueryInterface(IID_IMFMetadataProvider,
(void**)&pProvider));
// Get a pointer to IMFMetadata for file-wide metadata.
CHECK_HR(hr = pProvider->GetMFMetadata(NULL, 0, 0, &pMetadata));
// Get the property names that are stored in the metadata object.
CHECK_HR(hr = pMetadata->GetAllPropertyNames(&varNames));
// Loop through the properties and get their values.
if (varNames.vt == (VT_VECTOR | VT_LPWSTR))
{
ULONG cElements = varNames.calpwstr.cElems;
for (ULONG i = 0; i < cElements; i++)
{
const WCHAR* sName = varNames.calpwstr.pElems[i];
CHECK_HR(hr = pMetadata->GetProperty(sName, &varValue));
//Use the property values. Not shown.
PropVariantClear(&varValue);
}
}
done:
PropVariantClear(&varNames);
PropVariantClear(&varValue);
SAFE_RELEASE (pMetaData);
SAFE_RELEASE (pProvider);
return hr;
}
Zugehörige Themen