第2章 测试环境搭建:设备选型、系统版本、接口版本与素材准备

编码参数调优必须在稳定、可控的测试环境中进行。本章定义 Android 测试设备的选型标准、系统版本要求、MediaCodec 接口版本选择以及标准测试视频素材的制备方法,确保后续章节的测量数据具有可比性与可复现性。

测试环境搭建流程 设备选型 系统版本 & API Level MediaCodec 接口版本 测试视频素材准备 编码参数调优测试 注意事项 · 各步骤需文档化 · 设备固件版本一致 · 避免后台进程干扰 关键依赖 · NDK ≥ 21 · SDK build-tools 30+ · 开启开发者选项

2.1 Android 设备选型

编码器的硬件支持、性能上限及兼容性问题高度依赖设备芯片组。为覆盖常见场景,建议按以下三层模型选择测试设备:

层级代表芯片编码器能力适用调优目标
旗舰Snapdragon 8 Gen 2/3, Dimensity 9200+, Apple A16AV1/H.265 4K@60fps, 8×8 分块, 10-bit HDR极限画质、低延迟、高分辨率场景
中端Snapdragon 7/6 系列, Exynos 1280, Dimensity 7xxxH.264/H.265 1080p@30fps, 部分支持 4K主流应用、功耗平衡、兼容性验证
入门MediaTek Helio G系列, Snapdragon 4 系列H.264 1080p@30fps, 仅支持基本 profile最低配置、基线测试、老旧设备兼容
设备选型验收阈值:至少 1 台旗舰 + 1 台中端 + 1 台入门设备。每台设备需同一制造商同固件批次,避免因厂商定制编解码器行为差异造成测量误判。

2.2 系统版本与 MediaCodec 接口版本

MediaCodec API 自 Android 4.1 (API 16) 引入,但关键特性随版本演进。测试环境必须明确 API Level 以锁定接口行为。

Android 版本API LevelMediaCodec 重要变化
4.1 – 4.316 – 18基础编解码框架,仅支持 OMX 组件
5.0 – 5.121 – 22新增异步模式、input/output surface 支持
7.0 – 7.124 – 25HEVC Main Profile 硬件加速稳定
8.0 – 8.126 – 27支持高清 HDR (10-bit) 编码
9.0 – 1028 – 29Codec2 框架开始替代 OMX,AV1 解码
11 – 1230 – 31Codec2 成为默认,AV1 编码实验支持
13+33+编码器低延迟模式、rate control 精细化参数
重要:同一 Android 版本在不同厂商 ROM 中可能提供不同的编解码器实现(如高通 vs 联发科 Codec2 插件),建议通过 MediaCodecList.getCodecInfos() 在运行时获取实际支持的 mime 类型与能力,而非依赖文档假设。

接口版本选择策略:针对性调优时,目标 API Level 应不低于 21(获得异步模式),建议以 API 29 或 31 为基线进行核心参数测试,同时向下兼容至 API 21 做回归验证。

2.3 测试视频素材准备

标准测试素材应覆盖不同复杂度与编码挑战,避免使用单一素材造成过拟合。按以下规格制作或选用:

  • 分辨率: 480p (720×480)、720p (1280×720)、1080p (1920×1080)、4K (3840×2160)
  • 帧率: 24、30、60 fps(各一份)
  • 色彩空间与量化: 8-bit YUV 4:2:0 (BT.709) 为主,10-bit HDR10 (BT.2020) 用于 HDR 测试
  • 内容类型: 静态背景 + 人物(低复杂度)、快速运动(足球/赛车)、高频纹理(草地/橱窗)、渐变色条(量化验证)
  • 时长: 每段 10~30 秒,保证足够的 GOP 周期与场景切换
  • 封装/容器: 原始 YUV 文件(未压缩)或 MP4 无压缩/轻微压缩母版(保持无损)
素材制备工具: 推荐 ffmpeg 生成 YUV 序列。例如生成 1080p 30fps 10 秒运动测试素材:
ffmpeg -f lavfi -i testsrc2=size=1920x1080:rate=30:duration=10 \
       -pix_fmt yuv420p -f rawvideo test_1080p.yuv
对复杂场景,可使用 ffmpeg 从 blu-ray 或高码率视频截取片段并转码为无损格式:
ffmpeg -i source.mp4 -ss 00:05:00 -t 10 \
       -c:v libx264 -preset ultrafast -crf 0 -pix_fmt yuv420p \
       test_clip.mp4

2.4 MediaCodec 基础配置示例

以下代码片段演示在实际测试中如何统一配置 MediaCodec 编码器,保证所有调优实验在相同基础参数上运行:

// 选取 H.264 编码器(首选择硬件加速)
MediaCodec codec = MediaCodec.createEncoderByType(MediaFormat.MIME_TYPE_AVC);
MediaFormat format = MediaFormat.createVideoFormat(
    MediaFormat.MIME_TYPE_AVC, width, height);

// 固定基础参数(调优时仅改动目标变量)
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
    MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, bitrate);
format.setInteger(MediaFormat.KEY_FRAME_RATE, frameRate);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, gopSize);
format.setInteger(MediaFormat.KEY_BITRATE_MODE,
    MediaCodecInfo.EncoderCapabilities.BITRATE_MODE_VBR);
format.setInteger(MediaFormat.KEY_COMPLEXITY,
    MediaCodecInfo.EncoderCapabilities.COMPLEXITY_HIGH);

codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
// 后续通过 surface 输入,异步模式回调输出
codec.setCallback(new MediaCodec.Callback() { ... });
codec.start();
日志输出要点:每次配置完成后应立即打印当前设备的编解码器名称、版本、支持的 profile/level、软件/硬件标记,以便后期交叉分析时排除实现差异。
MediaCodecInfo info = codec.getCodecInfo();
Log.i("TestEnv", "Codec: " + info.getName() +
      " | Hw: " + info.isHardwareAccelerated() +
      " | Version: " + info.getSupportedVersions());

2.5 测量步骤与环境验证

  1. 设备准备:恢复出厂设置,开启开发者模式,关闭后台省电优化,固定亮度/音量,连接恒温电源(避免降频)。
  2. 系统校验:在测试 app 中调用 Build.VERSION.SDK_INT 与 Build.MODEL 并写入日志。
  3. 编码器能力扫描:使用 MediaCodecList 扫描所有编码器,记录支持的 mime 类型、颜色格式、复杂度和比特率范围。
  4. 素材注入:将标准 YUV 文件转换为 Surface 输入或 ByteBuffer 输入,确保每次测试使用同一份素材文件(校验 MD5)。
  5. 基线编码:使用固定参数(如默认 profile/level、VBR 模式)编码一次,记录每一帧的输出大小、延迟、PSNR/SSIM(如可用)。
  6. 重复性验证:对同一参数组合重复运行 3 次,计算平均值和标准差以评估环境稳定性。

2.6 验收阈值与误差控制

环境搭建完成后必须通过以下验收标准,否则该测试环境视为无效:

指标验收阈值检测方法
设备温度变化编码持续 30 秒内温升 ≤ 5°Cadb 读取 /sys/class/thermal/thermal_zone*/temp
帧输出间隔抖动CV < 5%解析 MediaCodec.BufferInfo.presentationTimeUs 时间戳
编码器协议一致性连续 3 次编码输出比特率偏差 < 2%统计输出大小 / 时长
素材完整性输入素材 MD5 一致md5sum test.yuv
误差分析:若验收失败,优先检查设备散热(高温降频)、后台进程(如系统更新、消息推送)、或固件/驱动版本不一致。仅当所有验收阈值通过后,本章节搭建的测试环境方可被后续调优章节使用。