在 Android ACodec.cppsetupAVCEncoderParameters
中,它从( / )读取profile
和读取,似乎来自in 。所以,我认为我们可以像下面这样手动设置/之前:level
msg
msg->findInt32("profile", &profile)
msg->findInt32("level", &level)
msg
format
MediaCodec.configure()
profile
level
MediaCodec.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 会查询当前设备支持的配置文件/级别并自动选择一个吗?如果设备支持多个配置文件/级别,将选择哪一个?较低级别的(例如基线)还是较高级别的(例如高级别)?