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调用此方法之前准备():)