Android:录制的视频似乎*扭曲*

时间:2010-08-27 10:40:43

标签: android video

我正在尝试使用MediaRecorder从相机录制视频。这是一段代码片段

剪断..


  mr.setAudioSource( MediaRecorder.AudioSource.MIC );
  mr.setVideoSource( MediaRecorder.VideoSource.CAMERA);
  mr.setOutputFormat( MediaRecorder.OutputFormat.THREE_GPP );
  mr.setAudioEncoder( MediaRecorder.AudioEncoder.AMR_NB );
  mr.setVideoEncoder( MediaRecorder.VideoEncoder.MPEG_4_SP );
  mr.setVideoSize( 200, 200 );
  mr.setVideoFrameRate( 15 );
..snap

代码在MileStone / Droid上执行,将创建非空输出文件。但是当我尝试观看视频时,它看起来像这样:

alt text

我的第一个想法是关于某种编码错误,所以我尝试了所有可能的OutputFormat / VideoEncoder组合,结果没有效果。

LogCat显示以下错误    CameraInput:不支持的参数(x-pvmf / media-input-node / cap-config-interface; valtype = key_specific_value)

但我无法弄清楚,我可能犯错了什么。我使用了camera.getParameters(),使用返回的参数设置预览大小,然后使用camera.setParameters()将其推回...

通过我能找到的每一段示例代码,但仍未找到解决方案。

有没有人有任何想法?

4 个答案:

答案 0 :(得分:2)

您必须设置正确的setVideoSize(x,y)函数。 你必须调用给你大小选项的功能,并从该列表中选择

答案 1 :(得分:1)

相机打开时,

    Camera.Parameters p = mCamera.getParameters();
    p.setPreviewSize(mSur.getWidth(), mSur.getHeight());
    mCamera.setParameters(p);

当你准备记录

            mCamera.unlock();
    if (mRecorder == null) {
        mRecorder = new MediaRecorder();
    } else {
        mRecorder.reset();  
    }
    mNextRecordFileName = getOneFileName();
    mRecorder.setCamera(mCamera);
    mRecorder.setVideoSource(mVideoSource);   
    mRecorder.setAudioSource(mAudioSource);  
    mRecorder.setPreviewDisplay(mSur.getHolder().getSurface());
    mRecorder.setOutputFormat(mVideoFormat);    

    //设置在setEncoder之前才有效,如果不设置,htc会崩溃掉
    mRecorder.setVideoSize(this.mSur.getWidth(), mSur.getHeight());
    Log.i(TAG, this.mSur.getHolder().getSurfaceFrame().height()+"gao");
    Log.i(TAG, this.mSur.getHolder().getSurfaceFrame().width()+"kuan");
    Log.i(TAG, "宽"+this.mSur.getWidth()+"高"+mSur.getHeight());

    mRecorder.setVideoEncoder(mVideoEncoder);   
    mRecorder.setAudioEncoder(mAudioEncoder);
    mRecorder.setOutputFile(mNextRecordFileName);

希望它可以帮到你

答案 2 :(得分:1)

为避免录制视频失真(我在Galaxy S3上看过),请确保将相机参数预览尺寸和mediarecorder videosize设置为相同的高度和宽度。

获得支持的相机预览尺寸:

Camera.Parameters parameters = camera.getParameters();

List<Camera.Size> list = parameters.getSupportedPreviewSizes();

parameters.setPreviewSize(list.get(X).width, list.get(X).height); 
// If you set Width and Height not supported by device you will get exception


// MediaRecorder object mMediaRecoder

mMediaRecoder.setVideoSize(list.get(X).width, list.get(X).height);

答案 3 :(得分:0)

嘿 我知道你刚刚发布了这个帖子,我怀疑你还在寻找答案,但我认为这可能有助于其他人。

我认为您的问题是mr.setVideoSize( 200, 200 );

我怀疑手机摄像头支持1X1捕获分辨率。最好使用mr.setVideoSize(Camcorder.get(Camcorder.QUALITY_LOW).videoFrameWidth,Camcorder.get(Camcorder.QUALITY_LOW).videoFrameHeight);

之类的东西

这将确保相机支持分辨率。还要确保您的预览分辨率与您的相机分辨率相匹配,否则可能会导致同样的问题。我知道如果我将预览设置为QUALITY_HIGH而我的相机设置为QUALITY_LOW

,就会发生这种情况。