Sur cette page

Configuration avancée de FFmpeg

Cette page liste les fonctionnalités configurables du backend FFmpeg. Toutes les fonctionnalités font partie de l'API privée et peuvent être modifiées ou supprimées dans le futur sans confirmation. Soyez conscient que les variables d'environnement sont par défaut héritées par les processus enfants et peuvent avoir des conséquences inattendues.

Activer la journalisation à partir de FFmpeg et du backend média Qt FFmpeg

Vous pouvez configurer la journalisation avancée de FFmpeg via des variables d'environnement.

  • QT_FFMPEG_DEBUG=1 active la journalisation supplémentaire de la bibliothèque FFmpeg et peut vous aider à comprendre les problèmes qui impliquent la bibliothèque FFmpeg.
  • QT_LOGGING_RULES="*.ffmpeg.*=true" active les journaux des développeurs Qt dans le plugin FFmpeg. Les catégories de journalisation dans le plugin FFmpeg sont généralement appelées "qt.multimedia.ffmpeg.XXX". Pour activer les journaux des développeurs de tous les sites Qt Multimedia, définissez QT_LOGGING_RULES="*.multimedia.*=true"
  • Si vous définissez à la fois QT_FFMPEG_DEBUG et QT_LOGGING_RULES, tous les codecs FFmpeg disponibles seront affichés la première fois que la fonctionnalité d'encodage ou de décodage est utilisée à partir de QMediaPlayer, QAudioDecoder, ou QMediaRecorder. Cette information peut vous aider à comprendre les situations où Qt Multimedia ne trouve pas de décodeur ou d'encodeur FFmpeg approprié. Nous recommandons d'attacher le dump du codec aux rapports de bogues de Qt si vous rencontrez des problèmes spécifiques au codec.

Activer les codecs expérimentaux de FFmpeg

FFmpeg expose quelques codecs, comme Opus ou Vorbis, en tant que codecs expérimentaux. Les codecs expérimentaux ne suivent pas strictement les standards et peuvent être instables. Ils sont désactivés par défaut. Pour les activer, définissez la variable d'environnement QT_ENABLE_EXPERIMENTAL_CODECS=1.

Configuration des protocoles réseau autorisés

Pour des raisons de sécurité, la bibliothèque FFmpeg restreint l'utilisation des protocoles imbriqués, c'est-à-dire des protocoles utilisés par d'autres protocoles ; voir la documentation sur les protocoles FFmpeg. Vous pouvez explicitement surcharger les protocoles autorisés via la variable d'environnement QT_FFMPEG_PROTOCOL_WHITELIST, par exemple :

export QT_FFMPEG_PROTOCOL_WHITELIST=file,crypto,rtp,udp

Avertissement : Notez que les protocoles imbriqués peuvent introduire des vulnérabilités de sécurité lorsqu'ils sont utilisés avec des données non fiables. N'autorisez que les protocoles qui correspondent à vos exigences en matière de sécurité et d'activité.

Configurer l'accélération matérielle dans les backends

  • Accélération matérielle explicite du décodage et de l'encodage dans les backends.

    Le plugin FFmpeg choisit le backend d'accélération matérielle pour le décodage et l'encodage en fonction de la disponibilité, de la stabilité, de l'efficacité et des détails de l'implémentation. Si le backend matériel sélectionné ne fonctionne pas comme prévu, vous pouvez essayer de définir une liste de priorités personnalisée ou de désactiver tous les backends matériels via les variables d'environnement QT_FFMPEG_DECODING_HW_DEVICE_TYPES et QT_FFMPEG_ENCODING_HW_DEVICE_TYPES. Les backends matériels disponibles sont les suivants :

    • cuda
    • drm
    • dxva2
    • d3d11va
    • d3d12va,
    • opencl
    • qsv
    • vaapi
    • vdpau
    • videotoolbox
    • mediacodec
    • vulkan

    Cependant, la disponibilité des backends matériels dépend du système d'exploitation, des pilotes installés, de la version de FFmpeg et de la configuration. Il est important de garder à l'esprit que certains types de périphériques n'ont pas été testés avec Qt Multimedia par les responsables de Qt Test, et peuvent ne pas fonctionner comme prévu. Au moment de la rédaction de ce document, ces backends incluent :

    • drm
    • opencl
    • qsv
    • vdpau
    • vulkan

    Exemples :

    # Set vdpau or cuda encoding hardware backends
    export QT_FFMPEG_ENCODING_HW_DEVICE_TYPES=vdpau,cuda
    
    # Set only d3d12va decoding hardware backend
    export QT_FFMPEG_DECODING_HW_DEVICE_TYPES=d3d12va
    
    # Disable decoding hw backends (set an empty list)
    export QT_FFMPEG_DECODING_HW_DEVICE_TYPES=,
  • Conversion des textures matérielles.

    L'utilisation de la conversion basée sur le GPU pour les images vidéo décodées et rendues peut réduire de manière significative l'utilisation du CPU. Nous nous efforçons d'utiliser cette fonctionnalité avec le plus grand nombre possible de backends matériels. Si vous remarquez des problèmes de rendu, envisagez de tester le rendu sans la conversion de texture GPU afin d'en identifier la cause. Vous pouvez désactiver la conversion de texture GPU en utilisant la variable d'environnement QT_DISABLE_HW_TEXTURES_CONVERSION: QT_DISABLE_HW_TEXTURES_CONVERSION=1. Avec le backend matériel VAAPI, la conversion de texture matérielle est désactivée par défaut. Définissez QT_XCB_GL_INTEGRATION=xcb_egl pour l'activer.

  • Autoriser la non-concordance des profils de codec.

    Si le profil du codec ne correspond pas aux capacités signalées du matériel, vous pouvez ignorer la non-concordance et autoriser le décodage matériel via QT_FFMPEG_HW_ALLOW_PROFILE_MISMATCH=1. La définition de cette option peut être utile, par exemple, lorsque vous utilisez le décodage matériel accéléré pour le profil de base H.264 avec le backend matériel VAAPI, car la plupart de ces flux satisfont aux contraintes du décodeur matériel H.264 existant.

    Attention : Si le flux n'est pas pris en charge, le décodage matériel imposé peut entraîner une sortie vidéo totalement incorrecte.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.