当前位置: 首页 > 知识库问答 >
问题:

MediaCodec编码数据太大

常波
2023-03-14

我使用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(Android5.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(Android5.0,API 21)编码数据大小仍然在90000以上。

共有1个答案

张鹏鹍
2023-03-14

确保以正确的单位(微秒)为输入帧传递适当的时间戳,否则编码器可能会为每帧分配太少/太多的位--详见https://stackoverflow.com/a/20663056/3115956。

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

 类似资料:
  • 我正在开发一个通过RTP接收H264编码数据的应用程序,但我无法让Android的MediaCodec输出任何内容。我正在按照https://stackoverflow.com/a/7668578/10788248对RTP数据包进行解包 在编码帧被重新组装后,我将它们输入到出列的输入缓冲区中。 当我对输入缓冲区进行排队时,我不会得到任何错误,但是解码器的回调从来不会调用onOutputBuffer

  • 我能解码一个mp4视频。如果我使用配置解码器,我可以在屏幕上看到视频。现在,我要编辑帧(添加一条黄线,甚至更好的是重叠一个微小的图像),并将视频编码为一个新的视频。不需要显示视频,我现在也不关心性能。(如果我在编辑时显示帧,如果编辑功能花费大量时间,我可能会有间隙),那么,你给我推荐什么呢?还是用GlSurface配置解码器,使用(GLES),或者用null配置解码器,以某种方式将转换为,修改它,

  • 我来自一个线程编码H.264从摄像头与Android媒体编解码器。我的设置很相似。然而,我尝试用javacv编写mux编码帧和并通过RTMP广播它们。 rtmpclient.java 我不是,无论如何,一个专家在H264或视频编码。我知道从MediaCodec出来的编码帧包含SPS NAL、PPS NAL和帧NAL单元。我还将MediaCodec输出写入了一个文件,并且能够回放它(我确实必须指定格

  • 大小范围在2.5MB-20MB之间。这个问题在较长的剪辑上变得更糟,例如7分钟的范围是9MB-120MB。 正常吗? 我试图捕捉同样的场景,但还是得到了不同的结果。

  • 我是EC加密的新手,对它有一些困难。我正在使用Java8和BouncyCatle提供程序。我现在的问题是:当我使用以下代码生成EC密钥对时: 并尝试获取公钥的字节数组以将其发送给另一个人,编码密钥长158字节,格式为X.509。但我期望X9.62格式和65到66字节之间的密钥大小。为什么公钥这么大?我如何用预期的密钥大小对其进行编码?(我期望密钥大小,因为我期望密钥长度为521位。)

  • 我正在尝试用Android6.0的MediaCodec将h264编码成实时低延迟的流。有大约6帧的延迟从编码器,我想知道如何减少 零件代码为: 编码器以320×480 60 fps的速度由屏幕表面馈入,通过dequeueOutputBuffer()输出流数据。大约有6个帧的数据没有被dequeueOutputBuffer()及时返回到编码器。换句话说,当馈送第n帧时,编码器输出第(N-6)帧的数据