我在我的项目中使用 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) 我从Grafika开始了一个项目并对其进行了修改。我有一个框架(与原始框架没有太大区别),它可以从 中捕获预览Camera并同时以不同的分辨率将其连续编码为视频。
MediaCodec(用于编码)配置为使用COLOR_FormatSurface,以便我们能够渲染到getInputSurface()使用 GLES查询的 Surface 。
媒体格式设置为 MIME 类型 video/avc
对于大多数手机,此设置非常有效。
但对于一些手机,编码视频的色度值略微倾斜,底部有一个绿色条。
目前编码器表面的分辨率为 640x360。选择渲染到表面的 EGLConfig 支持 32 位 RGBA 格式。
该预览是完美的所有手机。
所以我假设应用程序端或操作系统框架端的编码器参数有问题。
它发生在 Android 4.4 上。- 不确定,是否可以在 5.* 上重现。
] 2
如何解析/proc/cpuinfoAndroid平板电脑的虚拟文件以获取处理器核心和时钟速度的信息?我不需要上述文件提供的所有信息; 只是这两位.有人可以帮忙吗?