3

所以我有下面的代碼來做我的錄音和質量是絕對可怕的。我認爲我必須有一個設置錯誤,但我已經嘗試了兩種方式。通過「攝像機配置文件」方式然後選擇「手動」方式,可以看到攝像機代碼已被註釋掉。兩者都給出完全相同的結果。Android錄像機只錄制可怕的質量視頻

Camera _camera = Camera.Open (1); 
    _camera.Unlock(); 

    recorder = new MediaRecorder(); 

    recorder.SetCamera (_camera); 

    recorder.SetAudioSource (AudioSource.Mic);  
    recorder.SetVideoSource (VideoSource.Camera); 

    recorder.SetOutputFormat (OutputFormat.Default); 

    recorder.SetAudioEncoder (AudioEncoder.Default); 
    recorder.SetVideoEncoder (VideoEncoder.Default); 

    //CamcorderProfile p = CamcorderProfile.Get(0, CamcorderQuality.High); 
    //recorder.SetProfile(p); 

    recorder.SetOutputFile (path);  

    recorder.SetPreviewDisplay(video.Holder.Surface); 

    recorder.Prepare(); 
    recorder.Start(); 

這工作得很好,但這裏是問題。 This是我錄製時預覽窗口的圖片,this是我播放時的視頻圖片。你實際上不知道是因爲屏幕截圖如此糟糕,但沒有一種顏色是正確的(它幾乎沒有顏色),我認爲顏色通道肯定存在某種問題。例如,這裏是與genymotion「虛擬相機」的另一個比較。這是correct版本。這裏是weird播放版本。

+0

你試過[呢?](http://stackoverflow.com/questions/6058839/how-to-set-the-mediarecorder-to-the-best-video-quality-effect) – 2014-11-23 15:53:38

+0

試過了什麼?我嘗試了我發佈的代碼,結果是代碼下面的代碼。 – CMOS 2014-11-23 20:06:52

+1

@CalvinMoss,藍色文字是超鏈接。點擊它查看他指的是什麼。 – weston 2014-11-24 07:35:04

回答

2

This is a working example using the following configuration:

myCamera = getCameraInstance(); 
    mediaRecorder = new MediaRecorder(); 

    myCamera.unlock(); 
    mediaRecorder.setCamera(myCamera); 

    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

    mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 

    mediaRecorder.setOutputFile(getExternalStorageDirectory() + "myvideo.mp4"); 
    mediaRecorder.setMaxDuration(60000); // Set max duration 60 sec. 
    mediaRecorder.setMaxFileSize(5000000); // Set max file size 5M 

    mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface()); 

但是如果你使用Android 5,你應該使用新的相機API

4

此屬性有助於提高視頻質量:

mediaRecorder.setVideoEncodingBitRate(3000000); //you may try varying the argument value 

和ofcourse調用此方法之前準備():)