appium android 屏幕录制默认仅保存最后3分钟,即使设置 withtimelimit(duration.ofminutes(7)) 也无效,根本原因在于视频合并阶段依赖本地 ffmpeg 工具,缺失时将导致录制中断或截断。
appium android 屏幕录制默认仅保存最后3分钟,即使设置 withtimelimit(duration.ofminutes(7)) 也无效,根本原因在于视频合并阶段依赖本地 ffmpeg 工具,缺失时将导致录制中断或截断。
在 Appium 中调用 startRecordingScreen() 进行 Android 屏幕录制时,底层实际采用 ADB screenrecord 命令分段采集原始 .mp4 数据,并在 stopRecordingScreen() 调用时触发后台视频合并(如拼接帧、修复 moov 头、重编码等)。该合并步骤必须依赖系统已安装的 FFmpeg 可执行文件——Appium 会自动查找 ffmpeg 命令路径(如 /usr/local/bin/ffmpeg 或 Windows 下的 ffmpeg.exe),若未找到,则跳过合并逻辑,仅返回最后一次 ADB 录制的片段(通常为默认 3 分钟上限),造成“设置失效”的假象。
✅ 正确配置步骤如下:
-
安装 FFmpeg
- macOS(Homebrew):
brew install ffmpeg
- Ubuntu/Debian:
sudo apt update && sudo apt install ffmpeg
- Windows:下载 FFmpeg 官方静态构建版 → 解压 → 将 bin/ 目录加入系统 PATH 环境变量。
- macOS(Homebrew):
-
验证安装
终端执行:ffmpeg -version # 应输出版本信息,例如:ffmpeg version 6.1.1 ...
-
优化录制参数(推荐)
避免硬编码匿名内部类,改用 Builder 模式提升可读性与健壮性:AndroidStartScreenRecordingOptions options = new AndroidStartScreenRecordingOptions() .withTimeLimit(Duration.ofMinutes(7)) .withVideoSize("720x1280") .withBitRate(2_000_000) .withVideoFilter("scale='iw*min(720/iw,1280/ih)':force_original_aspect_ratio=decrease,pad=720:1280:(ow-iw)/2:(oh-ih)/2"); androidDriver.startRecordingScreen(options); // ... 执行测试操作 ... String base64Video = androidDriver.stopRecordingScreen();
⚠️ 注意事项:
- withVideoSize 须匹配设备实际支持的分辨率(可通过 adb shell wm size 查看),非法尺寸可能导致录制失败;
- withBitRate 建议控制在 1–4 Mbps 区间,过高易引发 OOM 或录制卡顿;
- 录制时长受设备存储空间与内存限制,7 分钟高清录制需预留 ≥500 MB 可用空间;
- Appium Server 日志中若出现 FFmpeg not found 或 Failed to merge video segments 提示,即为 FFmpeg 缺失明确信号。
总结:Appium 的 Android 屏幕录制“超时失效”问题本质是环境依赖缺失,而非 API 使用错误。确保 FFmpeg 可用是解锁任意时长录制的前提;结合合理参数配置与日志诊断,即可稳定获取完整测试过程视频证据。


















