MediaRecorder: start failed:

转https://blog.csdn.net/a287574014/article/details/79745925

 

 今天在优化相机这块的时候,看了下系统相机的源码,copy了部分用MediaRecorder来进行录制的代码出来,调用start的时候一直抛异常:

[java] view plain copy
 
  1. MediaRecorder: start failed: -22  

想了好久也不知道什么,浪费了很长时间之后去百度了一下MediaRecorder详细信息和用法,最后才发现问题出来了初始化MediaRecorder的时候的调用顺序上,MediaRecorder的API是有顺序的,不按顺序来就会抛异常,坑爹,特此记录一下。一般的API使用顺序为

[java] view plain copy
 
  1. try {  
  2. //要在实例化MediaRecorder之前就解锁好相机  
  3. mCamera.unlock();  
  4. mMediaRecorder = new MediaRecorder();  
  5. //将相机设置给MediaRecorder  
  6. mMediaRecorder.setCamera(mCamera);  
  7. // 设置录制视频源和音频源  
  8. mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);  
  9. mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);  
  10. // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4  
  11. mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  
  12. // 设置录制的视频编码和音频编码  
  13. mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);  
  14. mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);  
  15. // 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错  
  16. mMediaRecorder.setVideoSize(1920, 1080);  
  17. // 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错  
  18. mMediaRecorder.setVideoFrameRate(30);  
  19. mMediaRecorder.setVideoEncodingBitRate(1024*1024*20);  
  20. mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());  
  21. // 设置视频文件输出的路径  
  22. mMediaRecorder.setOutputFile( "/sdcard/lllllll.mp4");  
  23. //暂停住   在外面就可以调用start进行录制了  
  24. mMediaRecorder.prepare();  
  25. catch (IOException e) {  
  26.     throw new RuntimeException(e);  
  27. }  

    之前还遇到过MediaRecorder: start failed: -19的 这个错误是因为我们没在实例化MediaRecorder之前解锁相机导致

posted on 2018-05-14 21:34  信假名如  阅读(551)  评论(0编辑  收藏  举报

导航