Android MediaRecorder使用绿线生成损坏的视频

时间:2011-04-29 00:52:21

标签: java android video mediarecorder

我正在尝试使用Android中的MediaRecorder为我的应用添加视频录制功能,但生成的视频看起来已损坏绿线(音频很好)。以下代码是我用来初始化MediaRecorder对象的代码:

mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(Utility.CAPTURE_VIDEO_FILENAME);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mMediaRecorder.setMaxDuration(60000);
mMediaRecorder.setVideoFrameRate(20);
mMediaRecorder.setMaxFileSize(5000000);
mMediaRecorder.setVideoSize(352, 288);
mMediaRecorder.setPreviewDisplay(mPreview.mHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

我已经查看了herehere这些建议,但它们似乎对我的事业没有帮助。但我确实认为它可能与不正确的视频大小有关。所以我的问题是:在使用API​​级别7时,有没有什么好方法可以获得兼容的视频大小?据我所知,如果我在API级别8,我可以使用CamcorderProfile,但在7级中没有任何内容。

4 个答案:

答案 0 :(得分:1)

设备中的视频尺寸等于预览尺寸。您必须先检查您设置的视频大小是否可用。不同设备中的视频尺寸可能不同。因此,首先使用getSupportedPreviewSizes ()检查可用的预览尺寸,然后设置视频尺寸。如果视频尺寸不正确,绿线就会出现。

答案 1 :(得分:1)

检查代码中的setRecordingHint(true);

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)

此参数的设置会在少数设备的视频中导致此绿色毛刺。

答案 2 :(得分:0)

您可以更改这些选项,看看质量如何变化:

recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

以下代码会为您录制视频:

MediaRecorder刻录机;

private void initRecorder() {

    recorder = new MediaRecorder(); 
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

        if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
            recorder.setOrientationHint(90);//plays the video correctly
        }else{
            recorder.setOrientationHint(180);
        }


        recorder.setOutputFile("/sdcard/MediaAppVideos/"+randomNum+".mp4");

    }

private void prepareRecorder() {
        recorder.setPreviewDisplay(holder.getSurface());
        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        }
    }

public void surfaceDestroyed(SurfaceHolder holder) {
        try {
            if (recording) {
                recorder.stop();
                recording = false;
            }
            recorder.release();
            // finish();
        } catch (Exception e) {

        }

    }

答案 3 :(得分:0)

对我来说,绿色补丁仅在一台设备上以1920x1080分辨率发生。对于更高或更低的分辨率,可以录制视频。当我将预览尺寸设置为与视频尺寸相同时,我看不到任何绿色条纹