轉自https://blog.csdn.net/w815878564/article/details/49247411
今天測試MediaRecorder錄制功能的時候出現一個蛋疼的BUG,按照官方提供的示例寫好之后,start居然報錯,打印日志一看說:start failed。
代碼如下:
?
[java]?view plaincopy
mCamera?=?Camera.open(0);??surfaceView?=?new?SurfaceView(this);??setContentView(surfaceView);??mSurfaceHolder?=?surfaceView.getHolder();??mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);??mRecorder?=?new?MediaRecorder();??mRecorder.setCamera(mCamera);??mRecorder.setAudioSource(AudioSource.DEFAULT);??mRecorder.setVideoSource(VideoSource.DEFAULT);??mRecorder.setOutputFormat(OutputFormat.MPEG_4);??mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);??mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);??mRecorder.setVideoSize(320,?240);??mRecorder.setVideoFrameRate(20);??mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());??File?file?=?new?File(Environment.getExternalStorageDirectory()??????????.getAbsolutePath()?+?"/test.mp4");??if?(file.exists())??{??????file.delete();??}??try??{??????file.createNewFile();??}?catch?(IOException?e1)??{??????e1.printStackTrace();??}????mRecorder.setOutputFile(file.getAbsolutePath());??mSurfaceHolder.addCallback(new?Callback()??{????????@Override??????public?void?surfaceDestroyed(SurfaceHolder?holder)??????{????????}????????@Override??????public?void?surfaceCreated(SurfaceHolder?holder)??????{??????????try??????????{??????????????mRecorder.prepare();??????????????mRecorder.start();??????????}?catch?(Exception?e)??????????{??????????????Writer?writer?=?new?StringWriter();??????????????PrintWriter?printWriter?=?new?PrintWriter(writer);??????????????e.printStackTrace(printWriter);??????????????Throwable?cause?=?e.getCause();??????????????while?(cause?!=?null)??????????????{??????????????????cause.printStackTrace(printWriter);??????????????????cause?=?cause.getCause();??????????????}??????????????String?str?=?writer.toString();??????????????System.out.println(str);??????????}??????}????????@Override??????public?void?surfaceChanged(SurfaceHolder?holder,?int?format,??????????????int?width,?int?height)??????{????????}??});?? 一般情況下呢,出現這個原因是由于系統不支持你所設置的分辨率碼率這些參數,因此首先需要檢查系統是否支持你所設置的參數,參數可以通過Camera的Parameter來進行判斷,調用如下:
?
[java]?view plaincopy
mCamera.getParameters().getSupportedVideoSizes()?? ?
但是有時候即使設置了正確的參數仍舊會出現這個錯誤,這時候可能你就需要再start之前調用一下下面這個方法了:
?
[java]?view plaincopy
mCamera.unlock();?? 這個方法從方法名來看 是解鎖Camera ?估計是怕使用設備沖突了把 ,具體原因以后有空再去看看Camera相關API說明。因此對于這種情況 我覺得最好的做法是在獲取到Camera對象之后 進行一下如下操作:
?
?
[java]?view plaincopy
mCamera.stopPreview();??mCamera.setPreviewCallback(null);??mCamera.setPreviewCallbackWithBuffer(null);??mCamera.release();??mCamera?=?null;??mCamera?=?Camera.open(0);??mCamera.lock();??mCamera.unlock();??
轉載于:https://www.cnblogs.com/yangjies145/p/9038279.html
總結
以上是生活随笔為你收集整理的Android MediaRecorder录制视频提示start failed的解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。