Condividi tramite


Aggiunta di metadati al sink di file

Il sink di file ASF è un'implementazione di FMMediaSink fornita da Media Foundation che un'applicazione può usare per archiviare i dati multimediali ASF in un file. Per informazioni sul modello a oggetti di ASF Media Sinks e sull'utilizzo generale, vedere Sink multimediali ASF.

Dopo aver creato il sink di file ASF, deve essere configurato con informazioni sui flussi e le informazioni di codifica nel file di output. Queste procedure sono descritte in Aggiunta di informazioni di flusso al sink file ASF e alle proprietà dell'impostazione nel sink di file. È inoltre possibile aggiungere informazioni sui metadati includono coppie nome/valore, ad esempio "Autore", Titolo. Questo argomento descrive il processo di aggiunta di informazioni sui metadati al sink di file in modo che venga visualizzato nell'oggetto intestazione ASF finale.

È possibile aggiungere informazioni sui metadati al sink di file ASF prima di compilare la topologia di codifica. L'oggetto ASF ContentInfo per il sink di file tiene traccia delle proprietà dei metadati e viene esposto all'applicazione tramite l'interfaccia FMMetadata . Alcune di queste proprietà, ad esempio "IsVBR" che indica se il file contiene flussi VBR (Variable Bit Rate), vengono impostati automaticamente dal sink di file analizzando le proprietà di codifica del flusso impostate.

Per un elenco completo delle proprietà, vedere l'argomento "Elenco attributi" nella documentazione di Format SDK.

Uso dell'interfaccia FMMetadata nel sink di file ASF

  1. Eseguire una query sull'oggetto sink del file ASF per ottenere un puntatore all'implementazione dell'interfaccia FMMetadataProvider .

  2. Chiamare FMMetadataProvider::GetMFMetadata per ottenere un puntatore FMMetadata .

    Il parametro pPresentationDescriptor viene ignorato e l'applicazione può passare NULL. Se l'applicazione passa zero come identificatore di flusso nel parametro dwStreamIdentifier , il metodo recupera i metadati applicabili all'intero file ASF. In caso contrario, vengono recuperati solo i metadati per il flusso.

  3. Chiamare IMFMetadata::GetAllPropertyNames per recuperare l'elenco delle proprietà di codifica file impostate sul contenuto multimediale.

  4. Chiamare IMFMetadata::GetProperty per ottenere i valori delle proprietà.

Esempio

Il codice di esempio seguente illustra come enumerare i nomi delle proprietà e i valori impostati nel file ASF.

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

Sink multimediali ASF

Componenti del livello di pipeline ASF

Supporto asF in Media Foundation