You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中MediaCodec配置失败求助(错误码0xffffffea/BAD_VALUE)

Android MediaCodec AVC编码器配置失败(BAD_VALUE错误)

错误原因分析

报错0xffffffea/BAD_VALUE说明你配置的MediaFormat缺少编码器必需的核心参数,或者传入的参数不符合编码器要求。你的代码仅指定了视频MIME类型、宽高,未设置比特率、帧率、颜色格式等编码器强制要求的参数,同时还可能存在previewView宽高未初始化(值为0)的问题。

解决方案

1. 确保获取有效的视频分辨率

previewView未完成布局测量时,宽高可能为0,需先获取有效尺寸:

  • 可通过ViewTreeObserver监听布局完成事件,获取实际测量后的宽高
  • 或临时使用编码器支持的标准分辨率(如1280x720、1920x1080)

2. 完善MediaFormat的必需参数

AVC编码器要求MediaFormat必须包含以下核心参数:

  • 比特率(KEY_BIT_RATE):控制视频质量,根据分辨率调整,如1280x720建议设为2Mbps
  • 帧率(KEY_FRAME_RATE):通常设置为30fps
  • 关键帧间隔(KEY_I_FRAME_INTERVAL):一般设为帧率的2倍
  • 颜色格式(KEY_COLOR_FORMAT):根据输入方式选择,Surface输入需指定COLOR_FormatSurface

修正后的代码示例

// 处理previewView宽高未初始化的情况, fallback到标准分辨率
val targetWidth = if (previewView.width == 0) 1280 else previewView.width
val targetHeight = if (previewView.height == 0) 720 else previewView.height

// 确保分辨率为偶数(多数编码器不支持奇数尺寸)
val adjustedWidth = if (targetWidth % 2 != 0) targetWidth - 1 else targetWidth
val adjustedHeight = if (targetHeight % 2 != 0) targetHeight - 1 else targetHeight

val videoEncoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC)
val videoFormat = MediaFormat.createVideoFormat(
    MediaFormat.MIMETYPE_VIDEO_AVC,
    adjustedWidth,
    adjustedHeight
).apply {
    // 设置比特率(2Mbps)
    setInteger(MediaFormat.KEY_BIT_RATE, 2 * 1024 * 1024)
    // 设置帧率30fps
    setInteger(MediaFormat.KEY_FRAME_RATE, 30)
    // 关键帧间隔60帧(每2秒一个关键帧)
    setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
    // 指定Surface输入的颜色格式
    setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface)
}

videoEncoder.configure(
    videoFormat,
    null,
    null,
    MediaCodec.CONFIGURE_FLAG_ENCODE
)
videoEncoder.start()

额外注意事项

  • 如果使用ByteBuffer作为输入源,需查询编码器支持的颜色格式,不能直接使用COLOR_FormatSurface
  • 不同设备的编码器支持的参数范围可能不同,建议通过MediaCodecInfo查询当前设备编码器的具体能力
  • 分辨率必须为偶数,否则多数编码器会拒绝配置

内容的提问来源于stack exchange,提问作者Jalalkun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:48:31