Android 4.1 MediaCodec支持的分辨率

时间:2012-11-27 10:17:15

标签: android video h.264 android-4.2-jelly-bean

我正在尝试将Android 4.1的新低级媒体功能用于华硕Transformer TF300T平板电脑上的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 个答案:

答案 0 :(得分:2)

  1. 尝试使用CamcorderProfile API。完全匹配从中检索到的配置之一的配置可能有效。

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

答案 1 :(得分:1)

请查看以下链接:

http://developer.android.com/guide/appendix/media-formats.html

查看“视频编码建议”部分。值在pixels中,因此请确保设备分辨率支持这些值。

答案 2 :(得分:1)

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

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

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

编辑:您也可以使用H.263代替H.264,对于您的情况它应该可以使用。