android:視頻錄制編寫代碼一直報非法狀態錯誤,很多時候定位在setVideoEncoder和setAudioEncoder


  當遇到這類問題,首先去看logcat,如果在里面任然找不到錯誤提示信息,可以先調試,如果調試oncreate后就報錯,則去試着去修改下MediaRecorder的參數設置,很多時候是由於不同的硬件的參數不同,下面有一個特別注意的地方,就是設置mediarecorder的音頻和視頻參數順序,像如下我之前做過的順序1不行,順序2可以(本人才疏學淺,不知道具體原因,有哪位大蝦知道,請留言指教)

 

順序一:

recorder = new MediaRecorder();
recorder.reset();

//設置錄制音頻參數
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//設置聲源
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//設置音頻編碼為amr_nb

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設置音頻輸出格式為3gp

File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");

 

//設置錄制視頻參數

recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//設置視頻源
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//錄制視頻編碼

recorder.setVideoSize(1280, 720);//設置錄制視頻尺寸

recorder.setVideoFrameRate(30);//每秒3幀
recorder.setOutputFile(file.getAbsolutePath());//設置視頻輸出文件路徑
recorder.setPreviewDisplay(sh.getSurface());//設置視頻錄制內容是從surfaceholder推送到surfaceview里面顯示

 

 

順序二:

recorder = new MediaRecorder();
recorder.reset();

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//設置聲源
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//設置視頻源
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//設置音頻輸出格式為3gp
recorder.setVideoSize(1280, 720);//設置錄制視頻尺寸
recorder.setVideoFrameRate(30);//每秒3幀
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//錄制視頻編碼
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//設置音頻編碼為amr_nb
File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");
recorder.setOutputFile(file.getAbsolutePath());//設置視頻輸出文件路徑
recorder.setPreviewDisplay(sh.getSurface());//設置視頻錄制內容是從surfaceholder推送到surfaceview里面顯示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM