gpt4 book ai didi

android - 如果我们不手动设置此值,将在 Android MediaCodec 中设置哪个 AVC 配置文件/级别?

转载 作者:行者123 更新时间:2023-11-29 01:13:32 27 4
gpt4 key购买 nike

在 Android ACodec.cpp 中 setupAVCEncoderParameters , 它显示为 profilelevel来自 msg ( msg->findInt32("profile", &profile)/msg->findInt32("level", &level) ), msg似乎来自 formatMediaCodec.configure() .所以,我想我们可以设置 profile/levelMediaCodec.configure() 之前手动如下所示:

format.setInteger(MediaCodec.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);
format.setInteger(MediaCodec.KEY_LEVEL, MediaCodecInfo.CodecProfileLevel.AVCLevel5);

当然,我同意这不是一个好主意,因为我们不知道我们的设备是否支持我们设置的配置文件/级别。而且我发现大多数示例代码根本没有设置这些值。

例如:

MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface); // API >= 18
format.setInteger(MediaFormat.KEY_BIT_RATE, calcBitRate());
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 10)

mMediaCodec = MediaCodec.createEncoderByType(MIME_TYPE);
mMediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

也许它们会自动设置? MediaCodec 会查询当前设备支持的配置文件/级别并自动选择一个吗?如果设备支持多个配置文件/级别,将选择哪一个?较低级别(基线,例如)还是较高级别(高,例如)?

最佳答案

在大多数情况下(据我所知),它将是基线,因为更高的配置文件(启用 B 帧)要求您作为调用者准备好正确处理它(一个简单/天真的应用程序可能有假设不支持 B 帧),并且具有 B 帧的编码器具有更高的延迟。

关于android - 如果我们不手动设置此值,将在 Android MediaCodec 中设置哪个 AVC 配置文件/级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41383824/

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