Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:录制的视频似乎失真了*_Android_Video - Fatal编程技术网

Android 安卓:录制的视频似乎失真了*

Android 安卓:录制的视频似乎失真了*,android,video,Android,Video,我正在尝试使用MediaRecorder从摄像机录制视频。下面是一段代码片段 剪断。。 mr.setAudioSource(MediaRecorder.AudioSource.MIC); mr.setVideoSource(MediaRecorder.VideoSource.CAMERA); mr.setOutputFormat(MediaRecorder.OutputFormat.ThreeGPP); mr.setAudioEncoder(MediaRecorder.AudioEncoder

我正在尝试使用MediaRecorder从摄像机录制视频。下面是一段代码片段

剪断。。

mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mr.setOutputFormat(MediaRecorder.OutputFormat.ThreeGPP);
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mr.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
setVideoSize先生(200200);
setVideoFrameRate先生(15);
…啪

代码在里程碑/机器人上执行,将创建非空输出文件。但当我试图观看视频时,它看起来是这样的:

我的第一个想法是某种编码错误,所以我尝试了各种可能的OutputFormat/视频编码器组合,但对结果没有影响

LogCat显示以下错误 CameraInput:不支持的参数(x-pvmf/媒体输入节点/cap配置界面;valtype=键特定值)

但我不明白,我可能弄错了什么。我使用了camera.getParameters(),使用返回的参数设置预览大小,然后使用camera.setParameters()将它们推回

我完成了我能找到的每一段示例代码,但仍然没有找到解决方案

有人有什么想法吗?

嘿, 我知道你不久前发布了这篇文章,我怀疑你是否还在寻找答案,但我认为这可能会帮助其他人

我想你的问题是
setVideoSize先生(200200)

我怀疑手机摄像头是否支持1X1的拍摄分辨率。最好使用类似于
mr.setVideoSize(camcoder.get(camcoder.QUALITY\u LOW)、videoFrameWidth、camcoder.get(camcoder.QUALITY\u LOW)、videoFrameHeight的东西

这将确保相机支持分辨率。还要确保预览分辨率与相机分辨率匹配,否则可能会导致相同的问题。我知道当相机打开时,如果将预览设置为高质量,将相机设置为低质量,我会遇到这种情况

    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);

希望它能帮助您

您必须设置正确的setVideoSize(x,y)函数。
您必须调用提供大小选项的函数,并从该列表中进行选择,以避免录制的视频失真(我在Galaxy S3上看到过这一点),请确保将相机参数preview size和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);
Camera.Parameters=Camera.getParameters();
列表=参数。getSupportedPreviewSizes();
parameters.setPreviewSize(list.get(X).width,list.get(X).height);
//如果您设置了设备不支持的宽度和高度,您将得到异常
//MediaRecorder对象记录程序
mMediaRecoder.setVideoSize(list.get(X).宽度,list.get(X).高度);
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);