Android mediarecorder只录制可怕质量的视频

时间:2014-11-21 06:22:02

标签: android android-mediaplayer video-capture video-processing mediarecorder

所以我有以下代码来进行录制,质量非常糟糕。我想我必须设置错误,但我已经尝试过两种方式。 " CamcorderProfile"然后"手册"方式,你可以看到摄像机代码被注释掉了。两者都给出了完全相同的结果。

    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播放版本。

2 个答案:

答案 0 :(得分:5)

此属性有助于提高视频质量:

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

andcourse在prepare()之前调用此方法:)

答案 1 :(得分:3)

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