MediaCodec编码数据太大了

时间:2016-03-02 03:25:51

标签: android encoding mediacodec

我使用MediaCodec对相机数据进行编码,当我在名为Vivo X5 Pro(android 5.0,API 21)的设备上使用它时,MediaCodec编码的数据大小超过90000,通常在其他设备上大小约为15000但是,如果我改变媒体格式的参数,它也不起作用。 我还发现当我在Vivo X5 Pro(android 5.0,API 21)上使用方法MediaCodec.getOutputFormat()获取格式时,它有7个数据,比其他正常情况多一个,它命名为“buffer-size”,值为1048576,这会影响MediaCodec编码吗?如何使用Vivo X5 Pro(android 5.0,API 21)编码正常的数据大小?谢谢你的帮助!!!

    MediaCodec mEncoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
    MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 320, 568);
    format.setInteger(MediaFormat.KEY_BIT_RATE, 320 * 568 * 2);
    format.setInteger(MediaFormat.KEY_FRAME_RATE, 20);
    format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
    format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 320 * 568);
PS:但是我更改了params Vivo X5 Pro(android 5.0,API 21)编码数据大小仍然高于90000。

1 个答案:

答案 0 :(得分:1)

确保以正确的单位(微秒)为输入帧传递正确的时间戳,否则编码器可以为每帧分配太少/多位 - 请参阅https://stackoverflow.com/a/20663056/3115956以获得更长的解释。< / p>

您是否尝试降低/提高bitrate参数以查看它是否实际更改了输出大小?否则编码器可能会在不遵守此参数的意义上被破坏。 (另外,第一个输出数据包的大小可能不完全反映输出流的总平均比特率。所以即使第一帧可能有点太大,后者也可能弥补它。)< / p>