Compartir a través de


Agregar metadatos al receptor de archivos

El receptor de archivos ASF es una implementación de IMFMediaSink proporcionada por Media Foundation que una aplicación puede usar para archivar los datos multimedia de ASF en un archivo. Para obtener información sobre el modelo de objetos de los receptores multimedia de ASF y el uso general, vea Receptores multimedia de ASF.

Después de crear el receptor de archivos ASF, debe configurarse con información sobre las secuencias y la información de codificación en el archivo de salida. Estos procedimientos se describen en Agregar información de flujo al receptor de archivos ASF y establecer propiedades en el receptor de archivos. Además, también puede agregar información de metadatos que incluya pares de nombre y valor, como "Autor", Título". En este tema se describe el proceso de agregar información de metadatos al receptor de archivos para que aparezca en el objeto de encabezado ASF final.

Puede agregar información de metadatos al receptor de archivos ASF antes de compilar la topología de codificación. El objeto ContentInfo de ASF para el receptor de archivos realiza un seguimiento de las propiedades de metadatos y se expone a la aplicación a través de la interfaz IMFMetadata . Algunas de estas propiedades, como "IsVBR" que indica si el archivo contiene secuencias de velocidad de bits variable (VBR), se establecen automáticamente mediante el receptor de archivos mediante el análisis de las propiedades de codificación de secuencia que se establecen.

Para obtener una lista completa de las propiedades, consulte el tema "Lista de atributos" en la documentación del SDK de formato.

Usar la interfaz IMFMetadata en el receptor de archivos ASF

  1. Consulte el objeto receptor de archivos ASF para obtener un puntero a su implementación de la interfaz IMFMetadataProvider .

  2. Llame a IMFMetadataProvider::GetMFMetadata para obtener un puntero IMFMetadata .

    El parámetro pPresentationDescriptor se omite y la aplicación puede pasar NULL. Si la aplicación pasa cero como identificador de secuencia en el parámetro dwStreamIdentifier , el método recupera los metadatos que se aplican a todo el archivo ASF. De lo contrario, solo se recuperan los metadatos de la secuencia.

  3. Llame a IMFMetadata::GetAllPropertyNames para recuperar la lista de propiedades de codificación de archivos establecidas en el contenido multimedia.

  4. Llame a IMFMetadata::GetProperty para obtener los valores de propiedad.

Ejemplo

En el código de ejemplo siguiente se muestra cómo enumerar los nombres de propiedad y los valores establecidos en el archivo 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;
}

Receptores de medios asf

Componentes de ASF de la capa de canalización

Compatibilidad con ASF en Media Foundation