Partager via


Ajout de métadonnées au récepteur de fichiers

Le récepteur de fichiers ASF est une implémentation de IMFMediaSink fournie par Media Foundation qu’une application peut utiliser pour archiver les données multimédias ASF dans un fichier. Pour plus d’informations sur le modèle objet des récepteurs multimédias ASF et l’utilisation générale, consultez Récepteurs multimédias ASF.

Après avoir créé le récepteur de fichiers ASF, il doit être configuré avec des informations sur les flux et les informations d’encodage dans le fichier de sortie. Ces procédures sont décrites dans Ajout d’informations de flux au récepteur de fichiers ASF et à la définition des propriétés dans le récepteur de fichiers. En outre, vous pouvez également ajouter des informations de métadonnées incluant des paires nom/valeur telles que « Author », Title ». Cette rubrique décrit le processus d’ajout d’informations de métadonnées au récepteur de fichiers afin qu’il apparaisse dans l’objet d’en-tête ASF final.

Vous pouvez ajouter des informations de métadonnées au récepteur de fichiers ASF avant de générer la topologie d’encodage. L’objet ContentInfo ASF pour le récepteur de fichiers effectue le suivi des propriétés de métadonnées et est exposé à l’application via l’interface IMFMetadata . Certaines de ces propriétés, telles que « IsVBR », qui indique si le fichier contient des flux de débit variable (VBR), sont définies automatiquement par le récepteur de fichiers en analysant les propriétés d’encodage de flux définies.

Pour obtenir la liste complète des propriétés, consultez la rubrique « Liste d’attributs » dans la documentation du Kit de développement logiciel (SDK) Format.

Utilisation de l’interface IMFMetadata sur le récepteur de fichiers ASF

  1. Interrogez l’objet récepteur de fichiers ASF pour obtenir un pointeur vers son implémentation de l’interface IMFMetadataProvider .

  2. Appelez IMFMetadataProvider::GetMFMetadata pour obtenir un pointeur IMFMetadata .

    Le paramètre pPresentationDescriptor est ignoré et l’application peut passer NULL. Si l’application passe zéro comme identificateur de flux dans le paramètre dwStreamIdentifier , la méthode récupère les métadonnées qui s’appliquent à l’ensemble du fichier ASF. Sinon, seules les métadonnées du flux sont récupérées.

  3. Appelez IMFMetadata::GetAllPropertyNames pour récupérer la liste des propriétés d’encodage de fichier définies sur le contenu multimédia.

  4. Appelez IMFMetadata::GetProperty pour obtenir les valeurs de propriété.

Exemple

L’exemple de code suivant montre comment énumérer les noms et valeurs de propriétés définis sur le fichier 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;
}

Récepteurs multimédias ASF

Composants ASF de couche de pipeline

Prise en charge d’ASF dans Media Foundation