MediaRecorder: start failed:

轉https://blog.csdn.net/a287574014/article/details/79745925java

 

 今天在優化相機這塊的時候,看了下系統相機的源碼,copy了部分用MediaRecorder來進行錄製的代碼出來,調用start的時候一直拋異常:ide

[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以前解鎖相機致使編碼

相關文章
相關標籤/搜索