【问题标题】:MediaCodec encode data too bigMediaCodec 编码数据太大
【发布时间】:2017-03-06 18:04:48
【问题描述】:

我使用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:但是我更改参数 Vivo X5 Pro(android 5.0, API 21) 编码数据大小仍然高于 90000。

【问题讨论】:

    标签: android encoding android-mediacodec


    【解决方案1】:

    确保您以正确的单位(微秒)为输入帧传递正确的时间戳,否则编码器可能会为每帧分配太少/太多的位 - 请参阅 https://stackoverflow.com/a/20663056/3115956 以获得更详细的说明。

    您是否尝试过降低/提高比特率参数以查看它是否真的改变了输出大小?否则,编码器可能会因为不尊重此参数而损坏。 (此外,第一个输出数据包的大小可能无法完全反映输出流的总平均比特率。因此,即使第一帧可能有点太大,后面的也可以弥补。)

    【讨论】:

    • 我的情况似乎相反。我的情况太大了,他的太小了。我曾经更改过参数,但它在 Vivo X5 Pro 中不起作用(尺寸不小) ,但它适用于其他设备。T_T
    • 只是第一个缓冲区的大小太大了,还是都太大了?如果您更改比特率,后面的缓冲区是否也会保持相同的大小,还是会发生变化(而第一个缓冲区仍然很大)?
    • 太大了,如果我改变比特率,大小没有变化
    猜你喜欢
    • 2019-06-21
    • 2021-06-06
    • 2020-05-27
    • 2013-02-22
    • 2017-04-12
    • 2016-03-27
    • 2013-06-18
    • 2016-09-06
    • 2015-04-30
    相关资源
    最近更新 更多