Ответ 1
Похоже, я нашел ответ на свой вопрос.
Я не читал документацию достаточно близко, QUALITY_HIGH не эквивалентен 1080p, это просто способ указать профиль самого высокого качества. поддержка устройств. Поэтому, по определению, CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_HIGH )
всегда истинно. Я должен был написать что-то вроде этого:
public enum mVideoQuality {
FullHD, HD, SD
}
mVideoQuality mMaxVideoQuality;
int mTargetVideoBitRate;
private void initVideoQuality {
if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_1080P ) ) {
mMaxVideoQuality = mVideoQuality.FullHD;
} else if ( CamcorderProfile.hasProfile( CamcorderProfile.QUALITY_720P ) ) {
mMaxVideoQuality = mVideoQuality.HD;
} else {
mMaxVideoQuality = mVideoQuality.SD;
}
CamcorderProfile cProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
mTargetVideoBitRate = cProfile.videoBitRate;
}
Большинство моих устройств по-прежнему сообщают о поддержке кодирования 1080p, что я скептически отношусь к этому, однако я запустил этот код на Sony Experia Tipo (мое тестовое устройство низкого уровня), и он сообщил о максимальном качестве кодирования 480p с videoBitRate от 720 Кбит/с.
Как я уже сказал, я не уверен, что каждому устройству можно доверять, но я видел ряд битрейтов видео от 720 Кбит/с до 17 Мбит/с и качества профиля от 480p до 1080p. Надеемся, что другие люди найдут эту информацию полезной.