Android 4.1支持的MediaCodec分辨率

3

我正在尝试让Asus Transformer TF300T平板电脑上的Android 4.1新的低级媒体功能支持H.264编码。但是当我尝试提高编解码器的分辨率时,出现了一些奇怪的行为:

        MediaFormat mediaFormat = MediaFormat.
                                createVideoFormat("video/mp4v-es", 320, 240); // WORKS
//      MediaFormat mediaFormat = MediaFormat.
//                              createVideoFormat("video/mp4v-es", 640, 480); // DOESN'T WORK

        mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 125000);
        mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 25);
        mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Planar);
        mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
        mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
        mediaCodec.start();

在后一种情况下,当调用mediaCodec.getInputBuffers();时,我遇到了IllegalStateException异常。有没有人能够解释一下(或者更好的是:提供一个修复方法)?
提前感谢!
3个回答

3
  1. 尝试使用CamcorderProfile API,使用与之匹配的配置很可能会起作用。

  2. 显然,在您的情况下,有一些分辨率和其他参数的组合使其无法正常工作。我想知道这是否是帧速率的问题?25有点奇怪,尝试29.97或30,或者15。我还想知道这是否是比特率的问题?它对于分辨率来说太低了,请尝试500kbit/s。


你的第二个提示起了作用,谢谢!现在我遇到了一个颜色空间的问题,但在提问之前,我将检查一下CamcorderProfile API。非常感谢! - gleerman
我在这个主题上发布了另一个问题:https://dev59.com/LGYr5IYBdhLWcg3waJdT - gleerman

2

1

我在使用MediaRecorder时遇到了同样的问题。

你可以尝试使用CamcorderProfile,但根据我的经验,它不能保证稳定工作。此外,在Android 2.*中,您只能拥有两个CamcorderProfile配置文件。

这些设置是设备特定的,您可以通过实验方式获得适用于各种设备的最佳设置。

编辑:对于您的情况,您也可以使用H.263而不是H.264。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接