Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Xuất số liệu thống kê về quá trình mã hoá video
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Kể từ Android 13, ứng dụng khách có thể yêu cầu trình mã hoá video xuất số liệu thống kê về quá trình mã hoá cho từng khung video đã mã hoá. Với số liệu thống kê thu được từ bộ mã hoá video, các ứng dụng có thể tối ưu hoá các tác vụ mã hoá video của mình, chẳng hạn như mã hoá nhiều lần và xử lý trước khung hình trước khi mã hoá.
Để xuất số liệu thống kê về quá trình mã hoá video, nhà cung cấp SoC phải thay đổi trình điều khiển bộ mã hoá video như mô tả trong phần Nội dung cập nhật cho trình điều khiển bộ mã hoá video.
Dữ liệu thống kê về quá trình mã hoá video
Với Android 13, bộ mã hoá video sẽ xuất dữ liệu thống kê như trong bảng sau.
Tên của số liệu thống kê về bộ mã hoá |
Mô tả |
QP khối trung bình trên mỗi khung hình
|
Giá trị trung bình của tất cả các QP khối trong khung hình video được mã hoá thành luồng bit
|
Loại hình ảnh
|
Loại I hoặc P hoặc B
|
Nhà phát triển có thể truy xuất thông tin thống kê cho từng khung hình bằng cách sử dụng lớp nhà phát triển MediaFormat
.
Nội dung cập nhật đối với trình điều khiển bộ mã hoá video
Để hỗ trợ xuất số liệu thống kê về quá trình mã hoá video, nhà cung cấp SoC phải thay đổi trình điều khiển bộ mã hoá video. Các khoá sau đây được thêm vào cơ sở Codec 2.0 trong Android 13:
KEY_VIDEO_QP_AVERAGE
mô tả QP khối trung bình trên mỗi khung.
Các quy tắc sau đây áp dụng cho việc triển khai khoá KEY_VIDEO_QP_AVERAGE
:
Bộ mã hoá SoC phải làm tròn trung bình của các QP khối đến số nguyên gần nhất trước khi phát sang Codec 2.0.
Giá trị trung bình chỉ được tính toán từ một mặt phẳng luma.
Bộ mã hoá SoC phải trả về INT_MAX
nếu tất cả các khối trong khung hình hiện tại đều ở chế độ bỏ qua. Điều kiện này xảy ra khi không có hệ số nào được mã hoá và không có thông tin QP quan trọng nào được mã hoá trong khung.
KEY_PICTURE_TYPE
mô tả loại hình ảnh của khung được mã hoá là PICTURE_TYPE_I
, PICTURE_TYPE_P
, PICTURE_TYPE_B
hoặc PICTURE_TYPE_UNKNOWN
.
KEY_VIDEO_ENCODING_STATISTICS_LEVEL
mô tả mức độ thông tin thống kê về quá trình mã hoá phát ra từ bộ mã hoá video, như sau:
Hãy xem VideoEncodingStatisticsTest
để biết cách triển khai tham chiếu.
Xác nhận kết quả
Chạy quy trình kiểm thử CTS VideoEncodingStatisticsTest
để xác thực rằng phần QP trung bình của số liệu thống kê về quá trình mã hoá video hoạt động chính xác: CTS chạy hai quá trình mã hoá của cùng một video đầu vào, một video có tốc độ bit cao hơn và một video có tốc độ bit thấp hơn. Sau đó, CTS so sánh hai giá trị QP trung bình đã xuất từ hai quá trình mã hoá. Nếu QP trung bình từ quá trình mã hoá có tốc độ bit thấp hơn cao hơn QP trung bình từ quá trình mã hoá có tốc độ bit cao hơn, thì CTS sẽ vượt qua.
Để xác thực việc tắt tính năng xuất số liệu thống kê về việc mã hoá video khi bật, hãy sử dụng khoá VIDEO_ENCODING_STATISTICS_LEVEL_NONE
như sau:
format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 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);"]]