正在查看Google发布的相机2视频sample app,其中一种方法如下:
/**
* In this sample, we choose a video size with 3x4 aspect ratio. Also, we don't use sizes
* larger than 1080p, since MediaRecorder cannot handle such a high-resolution video.
*
* @param choices The list of available sizes
* @return The video size
*/
private static Size chooseVideoSize(Size[] choices) {
for (Size size : choices) {
if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) {
return size;
}
}
Log.e(TAG, "Couldn't find any suitable video size");
return choices[choices.length - 1];
}
我已经摆弄了我自己的camera2实现,并尝试用录音机录制4K视频,效果很好 - 录制的文件报告尺寸为3840×2160。
那么,样本中的注释是不正确的还是MediaRecorder无法在Lollipop上处理更大的分辨率但是能否在Marshmallow或其他方面进行处理?
答案 0 :(得分:4)
CamcorderProfile支持4K,作为'QUALITY_2160P',因此最佳做法是检查是否支持该配置文件。如果是,那么使用该大小的camera2输出到MediaRecorder预计会起作用。
但是,由于并非所有设备都支持4K,因此1080p是示例应用程序中使用的保守限制 - 应用程序的某些部分也早于对CamcorderProfile添加4K支持,因此评论有点过时。
答案 1 :(得分:2)
此方法中的选择数组来自CameraCharacteristics / StreamConfigurationMap getOutputSize - 我认为这是从相机硬件配置文件中收集的?
是的,但此相机配置文件不一定符合MediaRecorder功能,例如this
您可以更好地信任摄像机配置文件,
mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
但不是没有glitches,并且无法保证在特定设备上MediaRecorder无法处理更多内容。
无论如何,CamcorderProfile具有高达1080p的“官方”配置文件,因此它是示例代码的合理选择,它不会声称能够为最广泛的设备提供最佳结果。< / p>