1. 程式人生 > >Android MediaRecorder錄製模糊的解決辦法

Android MediaRecorder錄製模糊的解決辦法

依照網上的demo,自寫的應用錄製15秒的視訊只有200K左右的大小,開啟一看就很模糊。影響了視訊的後續處理(我們需要對視訊後期提取顏色或動作變化的波形)。需要提高視訊的錄製質量。

解決辦法: 網上流傳比較廣的一種辦法是

法一:設定CamcorderProfile

//程式碼源自網路

 /***********原來的寫法************/       
        mMediaRecorder=new MediaRecorder();  
        //設定視訊源  
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.
DEFAULT); //設定音訊源 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); //設定檔案輸出格式 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //設定視訊編碼方式 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); /* * 設定視訊編碼幀率 mMediaRecorder.setVideoEncodingBitRate(5*1920*1080); */
//設定音訊編碼方式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //設定視訊高和寬,注意文件的說明: Must be called after setVideoSource(). //設定錄製的視訊幀率,注意文件的說明: mMediaRecorder.setVideoFrameRate(30); //設定輸出路徑 mMediaRecorder.
setOutputFile("/sdcard/Document/data/"+ currentTemp + "/" + currentXml + "/"+System.currentTimeMillis()+".mp4"); //設定預覽畫面 mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); mSurfaceHolder.setFixedSize(640,480);//最高只能設定640x480 mMediaRecorder.setVideoSize(640,480);//最高只能設定640x480 //設定視訊的最大持續時間 mMediaRecorder.setMaxDuration(30000); /***********調整後的寫法************/ //next codes is right for 2.3 and 4.0 mMediaRecorder=new MediaRecorder(); //設定視訊源 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); //設定音訊源 mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); //相機引數配置類 //直接採用QUALITY_HIGH,這樣可以提高視訊的錄製質量,但是不能設定編碼格式和幀率等引數。 CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); mMediaRecorder.setProfile(cProfile); //設定錄製的視訊幀率,注意文件的說明: mMediaRecorder.setVideoFrameRate(30); //設定輸出路徑 mMediaRecorder.setOutputFile("/sdcard/Document/data/"+ currentTemp + "/" + currentXml + "/"+System.currentTimeMillis()+".mp4"); //設定預覽畫面 mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); /************************/

法二:位元率

看一下是否設定了視訊的位元率編碼,可以適當調高位元率的值,有奇效。(在師兄的機智的幫助下,找到了這個法子,我實在是離不開師兄了) 在這裡插入圖片描述 程式碼在上面的註釋中,沒有的話試試加一行這個程式碼看看,或者是將5改成8改成10。

我一開始沒有設定位元率,加上後已經滿足計算需求,改成8效果更好了一些,並未嘗試10。

注:

如果是像我一樣一開始只有小几百K的話,那大概就是沒有設定位元率,這時候系統呼叫了最低的配置來降低消耗,加上那一行程式碼,有奇效。