Android ACodec.cppでは、 と( / )からsetupAVCEncoderParameters
読み取らprofile
れ、が から来ているように見えます。したがって、以下のように/を手動で設定できると思います。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 は、現在のデバイスがサポートしているプロファイル/レベルを照会し、自動的に選択しますか? デバイスが複数のプロファイル/レベルをサポートしている場合、どれが選択されますか? 低レベルのもの(ベースラインなど)または高レベルのもの(高など)?