A partir de 27 de março de 2025, recomendamos usar android-latest-release
em vez de aosp-main
para criar e contribuir com o AOSP. Para mais informações, consulte Mudanças no AOSP.
Exportar estatísticas de codificação de vídeo
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
No Android 13 e versões mais recentes, os clientes de apps podem solicitar que o
codificador de vídeo exporte estatísticas para cada frame de vídeo codificado. Com
as estatísticas coletadas no codificador de vídeo, os apps podem otimizar tarefas relacionadas a codificação de vídeo,
como a codificação de várias transmissões e o pré-processamento de frames antes da
codificação.
Para exportar estatísticas de codificação de vídeo, os fornecedores de SoC precisam mudar o driver do codificador de vídeo
conforme descrito em Atualizações do driver do codificador de vídeo.
Dados de estatísticas de codificação de vídeo
No Android 13, o codificador de vídeo exporta dados de estatísticas
conforme mostrado na tabela a seguir.
Nome das estatísticas do codificador |
Descrição |
QP médio de bloco por frame
|
A média de todos os QPs de bloco no frame de vídeo que são codificados no fluxo de bits
|
Tipo de imagem
|
Digite I, P ou B
|
Os desenvolvedores podem extrair informações de estatísticas de cada frame usando a classe
MediaFormat
.
Atualizações do driver do codificador de vídeo
Para oferecer suporte à exportação de estatísticas de codificação de vídeo, os fornecedores de SoC precisam mudar o
driver do codificador de vídeo. As chaves a seguir foram adicionadas à base do codec 2.0 no
Android 13:
KEY_VIDEO_QP_AVERAGE
descreve o QP de bloco médio
por frame.
As regras a seguir se aplicam à implementação da chave KEY_VIDEO_QP_AVERAGE
:
O codificador SoC precisa arredondar a média dos QPs de bloco para o número inteiro
mais próximo antes de transmitir para o codec 2.0.
O valor médio é calculado apenas de um plano de luminância.
O codificador do SoC precisa retornar INT_MAX
se todos os blocos no frame
atual estiverem no modo ignorado. Essa condição ocorre quando nenhum coeficiente é
codificado e nenhuma informação QP significativa é codificada no frame.
KEY_PICTURE_TYPE
descreve o tipo de imagem do frame codificado como PICTURE_TYPE_I
,
PICTURE_TYPE_P
,
PICTURE_TYPE_B
ou PICTURE_TYPE_UNKNOWN
.
KEY_VIDEO_ENCODING_STATISTICS_LEVEL
descreve o nível de
informações de estatísticas de codificação emitidas pelo codificador de vídeo, conforme abaixo:
Consulte VideoEncodingStatisticsTest
para conferir uma implementação de referência.
Validação
Execute o teste CTS VideoEncodingStatisticsTest
para validar se a parte média de QP das estatísticas de codificação de vídeo
funciona corretamente: o CTS executa duas codificações do mesmo vídeo de entrada, uma com um
taxa de bits mais alta e outra com uma taxa de bits mais baixa. Em seguida, o CTS compara os dois
valores médios de QP exportados das duas codificações. Se o QP médio da codificação
com a taxa de bits mais baixa for maior que o QP médio da codificação com a
taxa de bits mais alta, o CTS será aprovado.
Para validar a desativação do recurso de exportação de estatísticas de codificação de vídeo quando
ativado, use a chave VIDEO_ENCODING_STATISTICS_LEVEL_NONE
da seguinte maneira:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 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);"]]