看起来我已经找到了自己的问题的答案。
我没有仔细阅读documentation,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编码,这我是持怀疑态度的支持,但是我跑了索尼Experia还TIPO(我的低端测试设备验证码),它报告了480p的最大编码质量,720kb/s的videoBitRate。正如我所说的,我不确定是否每个设备都可以信任,但我已经看到720Kb/s到17Mb/s的视频比特率范围和480p-1080p的配置文件质量。希望其他人会发现这些信息是有用的。