Android MediaCodec 配置错误,崩溃

Posted

技术标签:

【中文标题】Android MediaCodec 配置错误,崩溃【英文标题】:Android MediaCodec configure error, crash 【发布时间】:2017-02-08 02:33:27 【问题描述】:

我正在尝试使用 mediaCodec 从 openGl ES 表面创建 mp4 视频。我有一个 eglSurface,那个 eglSurface 的源表面是 MediaCodec 输入表面。

我可以为 eglSurface 设置不同的尺寸,当一个尺寸(宽度或高度)太大时:例如宽度 = 5000 和高度 = 512,MediaCodec 崩溃。

这是崩溃日志

android.media.MediaCodec$CodecException: Error 0xfffffc0e 
at android.media.MediaCodec.native_configure(Native Method) 
at android.media.MediaCodec.configure(MediaCodec.java:588)

....

在某些设备(Galaxy s7 edge)上,它不会崩溃,但生成后 videoView 不会播放视频。

对于小尺寸(例如屏幕尺寸),它在所有设备上都能正常工作

【问题讨论】:

【参考方案1】:

纹理的宽度太大。 AFAIK,最大纹理尺寸为 4096x4096。根据设备,它可能会低于此值。

检查这个答案: https://***.com/a/4528043/1353758

【讨论】:

谢谢。还有一个问题。 mediaCodec 是否支持奇数的宽高? 好像不支持。【参考方案2】:

似乎不支持奇数宽度或高度。为了避免在小米 Redme 7 设备上出现Error 0xfffffc0e,我不得不这样做:

DisplayMetrics metrics = getResources().getDisplayMetrics();
int width = (metrics.widthPixels / 2) * 2;   
int height = (metrics.heightPixels / 2) * 2;

【讨论】:

以上是关于Android MediaCodec 配置错误,崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Android MediaCodec 状态(States)转换分析

Android MediaCodec AAC 编码器

android MediaCodec 音频编解码的实现——转码

Android媒体解码MediaCodec MediaExtractor学习

Android MultiMedia框架——MediaCodec编码(上)

Android 多媒体——MediaCodec编码AAC