gpt4 book ai didi

Android MediaCodec 视频颜色错误和播放速度过快

转载 作者:行者123 更新时间:2023-11-29 17:55:10 26 4
gpt4 key购买 nike

我正在使用 MediaCodec 使用 Camera 的 setPreviewCallback 对视频进行编码。(我按照这个例子 Encoding H.264 from camera with Android MediaCodec )。我对 MediaCodec 使用以下设置:

mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 1280, 720);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 8000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420SemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
mediaCodec.start();

我的相机设置是:

Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPictureSize(previewWidth, 1280);
parameters.setPreviewSize(previewWidth, 720);
parameters.setPreviewFrameRate(30);
parameters.setPreviewFpsRange(5000,30000);
mCamera.setParameters(parameters);

我有一个视频,但有两个问题:

  1. 它的颜色不对。
  2. 它的播放速度太快了。

这是一个示例视频

http://www.youtube.com/watch?v=I1Eg2bvrHLM&feature=youtu.be

你们有谁知道这两个问题的原因是什么?并且可能会告诉我一些解决这个问题的方法,因为我现在完全迷路/困惑了。感谢阅读,如有任何评论和意见,我们将不胜感激。

最佳答案

Camera 输出和 MediaCodec 输入使用的 YUV 格式交换了 U/V 平面。

如果您能够通过Surface 移动数据,您就可以避免这个问题;但是,您将失去检查 YUV 数据的能力。可以在 bigflake 上找到从相机录制到 .mp4 文件的示例。 .

关于颜色空间以及如何交换它们的一些细节在 this answer 中。 .

原始 H.264 基本流中没有时间戳信息。您需要通过解码器将时间戳传递给 MediaMuxer 或您用来创建最终输出的任何内容。如果您不这样做,播放器只会选择一个速率,或者尽可能快地播放帧。

关于Android MediaCodec 视频颜色错误和播放速度过快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19915962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com