Freigeben über


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

  1. Abfragen des ASF-Dateisenkenobjekts, um einen Zeiger auf die Implementierung der IMFMetadataProvider-Schnittstelle abzurufen.

  2. 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.

  3. Rufen Sie IMFMetadata::GetAllPropertyNames auf, um die Liste der auf dem Medieninhalt festgelegten Dateicodierungseigenschaften abzurufen.

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

ASF Media Sinks

ASF-Komponenten der Pipelineschicht

ASF-Unterstützung in Media Foundation