无法使用 setProfile() 设置 MediaRecorder 配置文件它返回空指针异常
Posted
技术标签:
【中文标题】无法使用 setProfile() 设置 MediaRecorder 配置文件它返回空指针异常【英文标题】:cannot set the MediaRecorder profile using setProfile() it returns a null pointer exception 【发布时间】:2015-02-21 09:08:51 【问题描述】:每当我尝试将我的 MediaRecorder 对象的配置文件设置为 camcorderProfile 时,它都会给我一个 NullPointerException,这意味着我的 camcorderProfile 以某种方式为空,但我已经设置了它。这是我准备运行记录器和相机的整个函数。
private void prepareRecorder()
recorder = new MediaRecorder();
recorder.setPreviewDisplay(holder.getSurface());
camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
if (usecamera)
camera.unlock();
recorder.setCamera(camera);
recorder.setAudiosource(MediaRecorder.AudioSource.CAMCORDER);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(camcorderProfile);
String fileName = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
if(camcorderProfile.fileFormat == MediaRecorder.OutputFormat.THREE_GPP)
fileExtension = ".3gp";
if(camcorderProfile.fileFormat == MediaRecorder.OutputFormat.MPEG_4)
fileExtension = ".mp4";
try
FileBuffer = File.createTempFile(fileName, fileExtension, Environment.getExternalStorageDirectory());
recorder.setOutputFile(FileBuffer.getAbsolutePath());
catch(IOException e)
e.printStackTrace();
recorder.setMaxDuration(30000); // 30 seconds
try
recorder.prepare();
catch (IllegalStateException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
【问题讨论】:
【参考方案1】:如果相机不支持请求的质量,CamcorderProfile
可以为空。在您的情况下,它的后置摄像头,因为您在查询配置文件时没有传递摄像头 ID。
所以最好使用 API 检查是否支持:
public static boolean hasProfile (int quality)
【讨论】:
非常感谢!我刚刚通过 setprofile() 我的 cameraInfo.face 并将质量设置为高。下次我可能应该阅读更多的 api。以上是关于无法使用 setProfile() 设置 MediaRecorder 配置文件它返回空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
leetcode496 - Next Greater Element I - easy && leetcode503 - Next Greater Element II - medi