À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Exporter les statistiques d'encodage vidéo
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
À partir d'Android 13, les clients d'application peuvent demander à l'encodeur vidéo d'exporter des statistiques d'encodage pour chaque frame vidéo encodé. Grâce aux statistiques obtenues de l'encodeur vidéo, les applications peuvent optimiser leurs tâches d'encodage vidéo, telles que l'encodage multipass et le prétraitement des images avant l'encodage.
Pour exporter des statistiques d'encodage vidéo, les fournisseurs de SoC doivent modifier le pilote de l'encodeur vidéo, comme décrit dans la section Mises à jour du pilote de l'encodeur vidéo.
Données statistiques sur l'encodage vidéo
Avec Android 13, l'encodeur vidéo exporte des données statistiques, comme indiqué dans le tableau suivant.
Nom des statistiques de l'encodeur |
Description |
QP de bloc moyen par frame
|
Moyenne de tous les QP de bloc dans le frame vidéo qui sont encodés dans le flux de bits
|
Type d'image
|
Type I, P ou B
|
Les développeurs peuvent récupérer des informations statistiques pour chaque frame à l'aide de la classe de développeur MediaFormat
.
Mises à jour du pilote de l'encodeur vidéo
Pour permettre l'exportation des statistiques d'encodage vidéo, les fournisseurs de SoC doivent modifier le pilote de l'encodeur vidéo. Les clés suivantes sont ajoutées dans la base Codec 2.0 d'Android 13:
KEY_VIDEO_QP_AVERAGE
décrit le QP de bloc moyen par frame.
Les règles suivantes s'appliquent à l'implémentation de la clé KEY_VIDEO_QP_AVERAGE
:
L'encodeur SoC doit arrondir la moyenne des QP de bloc à l'entier le plus proche avant d'émettre vers le codec 2.0.
La valeur moyenne n'est calculée qu'à partir d'un plan luma.
L'encodeur SoC doit renvoyer INT_MAX
si tous les blocs du frame actuel sont en mode ignoré. Cette condition se produit lorsqu'aucun coefficient n'est encodé et qu'aucune information QP significative n'est encodée dans le frame.
KEY_PICTURE_TYPE
décrit le type d'image du frame encodé comme PICTURE_TYPE_I
, PICTURE_TYPE_P
, PICTURE_TYPE_B
ou PICTURE_TYPE_UNKNOWN
.
KEY_VIDEO_ENCODING_STATISTICS_LEVEL
décrit le niveau d'informations statistiques d'encodage émises par l'encodeur vidéo, comme suit:
Pour obtenir une implémentation de référence, consultez VideoEncodingStatisticsTest
.
Validation
Exécutez le test CTS VideoEncodingStatisticsTest
pour vérifier que la partie QP moyenne des statistiques d'encodage vidéo fonctionne correctement: CTS exécute deux encodages de la même vidéo d'entrée, l'un avec un débit plus élevé et l'autre avec un débit plus faible. CTS compare ensuite les deux valeurs QP moyennes exportées des deux encodages. Si le QP moyen de l'encodage avec le débit inférieur est supérieur au QP moyen de l'encodage avec le débit supérieur, CTS passe.
Pour valider la désactivation de la fonctionnalité d'exportation des statistiques d'encodage vidéo lorsqu'elle est activée, utilisez la clé VIDEO_ENCODING_STATISTICS_LEVEL_NONE
comme suit:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Export video encoding statistics\n\nStarting with Android 13, app clients can request the\nvideo encoder to export encoding statistics for each encoded video frame. With\nthe statistics obtained from the video encoder, apps can optimize their video\nencoding tasks such as multipass encoding and frame preprocessing prior to\nencoding.\n\nTo export video encoding statistics, SoC vendors must change the video encoder\ndriver as described in [Updates to the video encoder driver](#updates-encoder).\n\nVideo encoding statistics data\n------------------------------\n\nWith Android 13, the video encoder exports statistics\ndata as shown in the following table.\n\n| Name of encoder statistics | Description |\n|----------------------------|-------------------------------------------------------------------------------------|\n| Average block QP per frame | The average of all block QPs in the video frame that are encoded into the bitstream |\n| Picture type | Type I or P or B |\n\nDevelopers can retrieve statistics information for each frame by using the\n[`MediaFormat`](https://developer.android.com/reference/android/media/MediaFormat)\ndeveloper class.\n\nUpdates to the video encoder driver\n-----------------------------------\n\nTo support the export of video encoding statistics, SoC vendors must change the\nvideo encoder driver. The following keys are added in the Codec 2.0 base in\nAndroid 13:\n\n- [`KEY_VIDEO_QP_AVERAGE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1154) describes the per-frame\n average block QP.\n\n The following rules apply to the implementation of the `KEY_VIDEO_QP_AVERAGE`\n key:\n - The SoC encoder must round the average of the block QPs to the nearest\n integer before emitting to Codec 2.0.\n\n - The average value is computed only from a luma plane.\n\n - The SoC encoder must return `INT_MAX` if all the blocks in the current\n frame are in the skipped mode. This condition occurs when no coefficients are\n encoded and no significant QP info is encoded in the frame.\n\n- [`KEY_PICTURE_TYPE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1163)\n describes the picture type of the encoded frame as [`PICTURE_TYPE_I`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_I),\n [`PICTURE_TYPE_P`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_P),\n [`PICTURE_TYPE_B`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_B),\n or [`PICTURE_TYPE_UNKNOWN`](https://developer.android.com/reference/android/media/MediaFormat#PICTURE_TYPE_UNKNOWN).\n\n- [`KEY_VIDEO_ENCODING_STATISTICS_LEVEL`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1122) describes the level of\n encoding statistics information emitted from video encoder, as follows:\n\n - When the encoder generates no information about encoding statistics,\n this key is set to [`VIDEO_ENCODING_STATISTICS_LEVEL_NONE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1129).\n\n - When the encoder generates `KEY_VIDEO_QP_AVERAGE` and `KEY_PICTURE_TYPE`\n for each frame, this key is set to [`VIDEO_ENCODING_STATISTICS_LEVEL_1`](https://cs.android.com/android/platform/superproject/+/android-latest-release:frameworks/base/media/java/android/media/MediaFormat.java;drc=5ad6db77423479d027abb791ad3c02da39513a2c;l=1136).\n\nSee [`VideoEncodingStatisticsTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/media/codec/src/android/media/codec/cts/VideoEncodingStatisticsTest.java;drc=77bafd18279c8d6dad49fd74dac2e369fdc6ba69;l=56)\nfor a reference implementation.\n\nValidation\n----------\n\nRun the [`VideoEncodingStatisticsTest`](https://cs.android.com/android/platform/superproject/+/android-latest-release:cts/tests/tests/media/codec/src/android/media/codec/cts/VideoEncodingStatisticsTest.java;drc=77bafd18279c8d6dad49fd74dac2e369fdc6ba69;l=56)\nCTS test to validate that the average QP part of the video encoding statistics\nworks correctly: CTS runs two encodings of the same input video, one with a\nhigher bitrate, and another with a lower bitrate. CTS then compares the two\nexported average QP values from the two encodings. If the average QP from the encoding\nwith the lower bitrate is higher than the average QP from the encoding with the\nhigher bitrate, CTS passes.\n\nTo validate turning off the exporting video encoding statistics feature when\nenabled, use the `VIDEO_ENCODING_STATISTICS_LEVEL_NONE` key as follows: \n\n format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);"]]