Utilisation de l’API Transcode
Cette rubrique a décrit comment utiliser l’API de transcode pour encoder un fichier multimédia.
- Vue d'ensemble
- Création d’une source multimédia
- Création d’un profil de transcode
- Création d’une topologie de transcode
- Exécution de la session d’encodage
- Rubriques connexes
Vue d’ensemble
Avant d’utiliser l’API de transcode, l’application doit disposer des informations suivantes :
- Chemin d’accès ou URL d’un fichier multimédia existant qui sera réencodé.
- Le nom du fichier de sortie.
- Type de conteneur pour le fichier de sortie, tel que MP4 ou AsF (Advanced Streaming Format).
- Le format d'encodage. Ces informations incluent les types de médias qui décrivent les flux audio et vidéo encodés.
Pour utiliser l’API de transcode, une application effectue les étapes suivantes.
- Créez une source multimédia pour lire le fichier source.
- Créez un profil de transcode. Ajoutez des attributs qui décrivent le flux audio, le flux vidéo et le conteneur de fichiers.
- Utilisez le profil de transcode pour créer une topologie d’encodage. (Pour plus d’informations sur les topologies, consultez À propos des topologies.)
- Définissez la topologie sur la session multimédia.
- Démarrez la session multimédia et attendez l’événement MESessionEnded .
Le reste de cette rubrique décrit ces étapes plus en détail.
Création d’une source multimédia
Une source multimédia est un objet qui lit et analyse le fichier source. Pour créer une source multimédia, utilisez le programme de résolution de source. Vous trouverez un exemple de code dans la rubrique Utilisation du programme de résolution de source.
Création d’un profil de transcode
Un profil de transcode décrit le format et les paramètres utilisés pour encoder le fichier de sortie. Le profil de transcode contient trois ensembles d’attributs :
- Attributs audio : décrivez le format audio cible et les paramètres de l’encodeur audio.
- Attributs vidéo : décrire le format vidéo cible et les paramètres de l’encodeur vidéo.
- Attributs de conteneur : définissez le type de conteneur de fichiers, ainsi que certains paramètres d’encodage globaux.
Pour créer un profil de transcode, appelez la fonction MFCreateTranscodeProfile . Cette fonction retourne un pointeur vers l’interface IMFTranscodeProfile . L’objet de profil initial est vide ; il ne contient aucun attribut. L’étape suivante consiste à ajouter les attributs qui définissent le profil.
Attributs audio
Pour ajouter des attributs pour le flux audio, appelez IMFTranscodeProfile::SetAudioAttributes. Ces attributs spécifient la façon dont le flux audio est encodé. Si le fichier de sortie ne contient pas de flux audio, omettez ces attributs.
Les attributs audio se répartissent en deux catégories :
- Attributs qui spécifient le format du flux encodé
- Attributs qui spécifient d’autres paramètres d’encodage.
Les attributs de format sont simplement des attributs de type média, comme décrit dans la section Types de médias audio. L’ensemble exact des attributs de format dépend de l’encodeur. (Consultez Formats multimédias pris en charge dans Media Foundation.) Voici une liste d’attributs de format audio classiques :
Attribut format | Description |
---|---|
MF_MT_SUBTYPE | Sous-type. Consultez GUID de sous-type audio. |
MF_MT_AUDIO_NUM_CHANNELS | Nombre de canaux audio. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Nombre d’échantillons audio par seconde. |
MF_MT_AUDIO_BLOCK_ALIGNMENT | Alignement des blocs. |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Nombre moyen d’octets par seconde (débit binaire codé). |
Les paramètres d’encodage suivants sont définis.
Paramètre d’encodage | Description |
---|---|
MF_TRANSCODE_DONOT_INSERT_ENCODER | Empêche l’API de transcoder l’insertion d’un encodeur pour le flux audio. |
MF_TRANSCODE_ENCODINGPROFILE | Spécifie le modèle de conformité de l’appareil. (S’applique uniquement aux fichiers ASF.) |
MF_TRANSCODE_QUALITYVSSPEED | Spécifie le compromis entre la qualité d’encodage et la vitesse. |
Vous devez définir les attributs de format. Les paramètres d’encodage sont facultatifs.
Une façon de trouver un format compatible avec l’encodeur consiste à appeler la fonction MFTranscodeGetAudioOutputAvailableTypes . L’encodeur souhaité est spécifié par le sous-type. La fonction retourne une collection de types de médias pour cet encodeur. Vous pouvez sélectionner un type dans la liste et copier les attributs dans le profil. Pour obtenir un exemple de code qui utilise cette approche, consultez Tutoriel : Encodage d’un fichier WMA.
Attributs vidéo
Pour ajouter des attributs pour le flux vidéo, appelez IMFTranscodeProfile::SetVideoAttributes. Ces attributs spécifient la façon dont le flux vidéo est encodé. Si le fichier de sortie ne contient pas de flux vidéo, omettez ces attributs.
Comme avec les attributs audio, les attributs vidéo se répartissent en deux catégories :
- Attributs qui spécifient le format du flux encodé
- Attributs qui spécifient d’autres paramètres d’encodage.
Les attributs de format sont des attributs de type média, comme décrit dans la section Types de médias vidéo. Voici une liste d’attributs de format vidéo classiques :
Attribut format | Description |
---|---|
MF_MT_SUBTYPE | Sous-type. Consultez GUID de sous-type de vidéo. |
MF_MT_FRAME_RATE | Fréquence d’images. |
MF_MT_FRAME_SIZE | Taille du cadre. |
MF_MT_AVG_BITRATE | Débit binaire moyen. |
MF_MT_PIXEL_ASPECT_RATIO | Rapport d’aspect en pixels. |
Les paramètres d’encodage suivants sont définis.
Paramètre d’encodage | Description |
---|---|
MF_TRANSCODE_DONOT_INSERT_ENCODER | Empêche l’API de transcode d’insérer un encodeur pour le flux vidéo. |
MF_TRANSCODE_ENCODINGPROFILE | Spécifie le modèle de conformité de l’appareil. (S’applique uniquement aux fichiers ASF.) |
MF_TRANSCODE_QUALITYVSSPEED | Spécifie le compromis entre la qualité d’encodage et la vitesse. |
Vous devez définir les attributs de format. Les paramètres d’encodage sont facultatifs.
Attributs de conteneur
Les attributs de conteneur définissent les caractéristiques au niveau du fichier de sortie. Pour définir des attributs de conteneur, appelez IMFTranscodeProfile::SetContainerAttributes. Les attributs suivants sont définis.
Attribut | Description |
---|---|
MF_TRANSCODE_ADJUST_PROFILE | Définit les paramètres de flux à utiliser pour la topologie de transcode. Vous pouvez définir les indicateurs pour utiliser les paramètres de la source d’entrée ou utiliser des attributs de flux de données personnalisés. |
MF_TRANSCODE_CONTAINERTYPE | Spécifie le format de fichier du fichier de sortie, tel que MP4 ou ASF. Sur la base de cette valeur, le récepteur multimédia approprié est ajouté à la topologie. |
MF_TRANSCODE_SKIP_METADATA_TRANSFER | Spécifie si les métadonnées de la source sont copiées dans le fichier de sortie. |
MF_TRANSCODE_TOPOLOGYMODE | Spécifie si les codecs basés sur le matériel peuvent être utilisés pendant le transcodage. |
MFT_FIELDOFUSE_UNLOCK_Attribute | Déverrouille un codec qui a des restrictions de champ d’utilisation. Pour plus d’informations, consultez Restrictions de champ d’utilisation. |
L’attribut MF_TRANSCODE_CONTAINERTYPE est requis. Les autres attributs de conteneur sont facultatifs.
Création d’une topologie de transcode
La topologie de transcode est une topologie partielle qui contient la source multimédia, les codecs appropriés et le récepteur multimédia. Pour créer la topologie de transcode, appelez la fonction MFCreateTranscodeTopology . Cette fonction prend les paramètres suivants en entrée :
- Pointeur vers l’interface IMFMediaSource de la source multimédia.
- Le nom du fichier de sortie.
- Pointeur vers l’interface IMFTranscodeProfile du profil de transcode.
La fonction retourne un pointeur vers l’interface IMFTopology .
Exécution de la session d’encodage
Après avoir créé la topologie, vous êtes prêt à encoder le fichier. Vous pouvez ignorer le profil à ce stade.
- Appelez MFCreateMediaSession pour créer la session multimédia.
- Appelez IMFMediaSession::SetTopology pour définir la topologie sur la session multimédia.
- Appelez IMFMediaSession::Start pour démarrer la session d’encodage.
- Attendez l’événement MESessionEnded .
- Appelez IMFMediaSession::Fermer pour fermer la session multimédia.
- Attendez l’événement MESessionClosed .
- Appelez IMFMediaSource::Shutdown.
- Appelez IMFMediaSession::Shutdown.
La majeure partie du temps consacré à l’encodage se produit entre les étapes 3 et 4.
Rubriques connexes