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 音频编解码的实现——转码
Android媒体解码MediaCodec MediaExtractor学习