看来我已经找到了我自己的问题的答案.
我没有仔细阅读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编码,我对此持怀疑态度,但是我在Sony Experia Tipo(我的低端测试设备)上运行了这个代码,并且报告了480p的videoBitRate的最大编码质量为480p /秒.
正如我所说,我不知道每个设备是否可以信任,但是我已经看到一系列视频比特率从720Kb / s到17Mb / s,配置文件质量从480p-1080p.希望其他人会发现这些信息是有用的.