2012-11-27 101 views
1

我正试图让Android 4.1的新底层媒​​体功能在华硕变压器TF300T平板电脑上为H.264编码工作。我遇到一些奇怪的行为,当我尝试增加编解码器的分辨率:Android 4.1 MediaCodec支持分辨率

 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异常。任何人有任何解释(甚至更好:修复)?

在此先感谢!

回答

2
  1. 尝试使用CamcorderProfile API。完全匹配其中一个配置的配置可能会起作用。

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

+0

你的第二个提示做到了这一招,谢谢!我现在有一个色彩空间问题,但在提出任何问题之前,我将检查CamcorderProfile API。非常感谢! – gleerman

+0

我发布了关于这个主题的另一个问题:http://stackoverflow.com/questions/13703596/mediacodec-and-camera-colorspaces-dont-match – gleerman

1

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

您可以尝试使用CamcorderProfile,但从我的经验来看,它并不能保证稳定的工作。 也在Android 2. *您只能有两个配置文件CamcorderProfile。

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

编辑:也可以使用H.263而不是H.264,为你的情况它应该工作。