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

使用MediaCodec编码时,屏幕的三分之二为绿色

齐志勇
2023-03-14

我正在做一个需要在Android上使用OpenGL处理视频的项目。我决定使用MediaCodec,在ExtractDecodeCodeMuxtest的帮助下,我成功地让它工作。结果非常好,我让它接收视频,提取轨迹,解码视频轨迹,用OpenGL编辑,并编码成视频文件。

问题是,结果视频可以在Android上很好地播放,但在iOS上,三分之二的屏幕是绿色的。

我试着用这里,这里,这里的建议来解决问题,实验编码器的不同格式,但问题仍然是一样的。

有人能告诉我导致这个问题的原因和解决方法吗?

这是在iOS上播放的视频

这是编码器的配置

MediaCodec mediaCodec = MediaCodec.createEncoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", 540, 960);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 2000000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 30);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, CodecCapabilities.COLOR_FormatSurface);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 1);
mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

更新我想知道我是否在视频方向上有任何错误,因为输出视频的工作部分与所需的输出分辨率具有相同的比率,但在水平方向上。输入是垂直记录的,所需的输出也是如此。这是解码器配置的代码:

inputFormat.setInteger(MediaFormat.KEY_WIDTH, 540);
inputFormat.setInteger(MediaFormat.KEY_HEIGHT, 960);
inputFormat.setInteger("rotation-degrees", 90);

String mime = inputFormat.getString(MediaFormat.KEY_MIME);
MediaCodec decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(inputFormat, surface, null, 0);

12月25日更新:我在配置编码器和解码器时尝试了不同的分辨率和方向,以检查视频的方向是否存在问题,但输出视频刚刚旋转,绿色问题仍然存在。我还尝试了编码器的“video/mp4v es”,结果视频可以在Mac上观看,但iPhone甚至无法播放。

共有2个答案

段干安和
2023-03-14

我现在知道答案了:这与fps范围有关。我更改了相机参数和媒体编解码器上的fps速率,突然它起作用了!

朱炜
2023-03-14

我刚刚解决了。原因是MediaMuxer,它将h264原始流封装在某种iOS无法理解的容器中。因此,我没有使用MediaMuxer,而是将原始h264流从编码器写入一个文件,并使用mp4parser将其多路复用到一个mp4文件中。

 类似资料:
  • 我正在尝试使用使用编解码器对一些音频流进行编码。为此,我使用了google cts ExtractEncodeMust的这个实现。 对于某些aac文件,它会在编码某些帧后抛出。更准确地说,它会在第1030行抛出异常,。 我正在配置如下: 我完全不知道如何解决这个问题。任何形式的帮助都将不胜感激。 带有一些日志的堆栈跟踪: 设备:小米POCO x3 操作系统:Android10 导致溢出的示例文件信

  • 我的任务是在webview中记录用户活动,换句话说,我需要在用户在webview中导航时创建一个mp4视频文件。非常具有挑战性:)我在Android 4.3中引入的字体MediaCodec:被扩展为包括一种通过Surface(通过createInputSurface方法)提供输入的方法。这允许输入来自相机预览或OpenGL ES渲染。我甚至找到了一个例子,你可以记录一个用opengl编写的游戏:h

  • 问题很简单,但我没有任何线索来解决它: 我编写一行代码来在我的Nexus 4(Android 4.4.2)上创建AAC编码器 保存在“codec”中的返回值不为空,但我在Logcat中收到一条红色错误消息: 我还尝试了另一条线: 并得到相同的错误结果。 在使用MediaCodec之前,我是否错过了任何初始化步骤?我在官方文档中没有找到有关此的任何信息。 有人遇到过这个问题吗? 实际上,我正在尝试将

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

  • 我正在使用MediaCodec将PCM数据转换为AAC,并使用MediaMuxer将此aac数据存储到m4a文件中。没有视频。 该文件会生成,甚至会播放。但是没有声音。如果我将aac文件导入Audacity,它不会显示任何数据。音频的长度甚至是预期的时间。我知道数据正在被编码,尽管我不确定这些数据是否被正确编码。 对pcm数据进行编码: 我已经浏览了大量示例,我所做的一切似乎都是正确的。如果我在o

  • js h5 video 实现相机,但是出现屏幕为绿色?是什么原因?华为p50手机出现的问题。 目前找不到出现这个机型上的问题原因,小米手机、ios是正常的 代码补充