, 그것은 msg
(msg->findInt32("profile", &profile)
/msg->findInt32("level", &level)
)에서 profile
및 level
를 읽고는 msg
는 MediaCodec.configure()
에 format
에서 오는 것으로 보인다.이 값을 수동으로 설정하지 않으면 Android MediaCodec에서 설정할 AVC 프로필/레벨은 무엇입니까? 안드로이드 ACodec.cpp <code>setupAVCEncoderParameters</code>에서
format.setInteger(MediaCodec.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);
format.setInteger(MediaCodec.KEY_LEVEL, MediaCodecInfo.CodecProfileLevel.AVCLevel5);
우리의 장치 지원 프로파일/레벨 우리가 설정 한 경우 우리가 konw하지 않기 때문에, 나는 그것이 좋은 생각이 아니다 동의 : 그래서, 우리가 아래와 같이 MediaCodec.configure()
전에 수동 profile
/level
을 설정할 수 있다고 생각 . 또한 대부분의 예제 코드가 이러한 값을 전혀 설정하지 않았다는 것을 알았습니다. 예를 들어
:
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은 현재 프로파일/레벨의 현재 장치를 지원하고 자동으로 선택합니까? 장치가 둘 이상의 프로필/레벨을 지원하는 경우 어떤 프로필/레벨이 선택됩니까? 하위 레벨 1 (기준선 등) 또는 상위 레벨 1 (높음, 예)?