相关疑难解决方法(0)

MediaCodec: MediaFormat 设置 KEY_I_FRAME_INTERVAL 值被忽略

我在我的项目中使用 MediaCodec 来编码来自相机的视频。由于某些原因,我需要将 KEY_I_FRAME_INTERVAL 设置为 0,这意味着录制的 mp4 视频中的每一帧都将是关键帧(关键帧包含整个图像,而不仅仅是与前一帧的增量差异)。

我在这里遇到了问题:在 nexus 10、nexus 7、小米红米 2、华硕 zenphone 5、galaxy a5 上一切正常。但是 lenovo vibe s1 仅在关键帧间隔等于 1 秒的情况下进行录制。不管 mediaFormat 中设置了什么值,我在 mediaCodec.configure() 中使用的是什么。我试图设置 0、1、5、10,但视频中的关键帧总是每 30 帧。

任何想法如何解决这个问题?

有关更多信息,这是我的 mediaCodec 编码器的设置:

    videoCodec = MediaCodec.createEncoderByType(MIME_VIDEO_CODEC_H264);

    MediaFormat videoFormat = MediaFormat.createVideoFormat(MIME_VIDEO_CODEC_H264, 1280, 720);
    videoFormat.setInteger(MediaFormat.KEY_BIT_RATE, 3800000);
    videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
    videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
    videoFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 0);
    videoCodec.configure(videoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
    //using input surface to get input data from camera
    inputSurface = new CodecInputSurface(videoCodec.createInputSurface());
    videoCodec.start();
Run Code Online (Sandbox Code Playgroud)

mp4 android video-recording android-mediacodec

5
推荐指数
1
解决办法
4836
查看次数

MediaCodec 编码的视频底部有绿条,色度搞砸了

我从Grafika开始了一个项目并对其进行了修改。我有一个框架(与原始框架没有太大区别),它可以从 中捕获预览Camera并同时以不同的分辨率将其连续编码为视频。

MediaCodec(用于编码)配置为使用COLOR_FormatSurface,以便我们能够渲染到getInputSurface()使用 GLES查询的 Surface 。

媒体格式设置为 MIME 类型 video/avc

对于大多数手机,此设置非常有效。

但对于一些手机,编码视频的色度值略微倾斜,底部有一个绿色条。

目前编码器表面的分辨率为 640x360。选择渲染到表面的 EGLConfig 支持 32 位 RGBA 格式。

预览是完美的所有手机。

所以我假设应用程序端或操作系统框架端的编码器参数有问题。

它发生在 Android 4.4 上。- 不确定,是否可以在 5.* 上重现。

![绿条图像] 2

encoding android opengl-es grafika android-mediacodec

4
推荐指数
1
解决办法
1732
查看次数

如何从"/ proc/cpuinfo"文件中获取Android设备的具体信息?

如何解析/proc/cpuinfoAndroid平板电脑的虚拟文件以获取处理器核心和时钟速度的信息?我不需要上述文件提供的所有信息; 只是这两位.有人可以帮忙吗?

android linux-kernel

3
推荐指数
1
解决办法
6941
查看次数