我正在尝试使用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上执行,将创建非空输出文件。但是当我尝试观看视频时,它看起来像这样:
我的第一个想法是关于某种编码错误,所以我尝试了所有可能的OutputFormat / VideoEncoder组合,结果没有效果。
LogCat显示以下错误 CameraInput:不支持的参数(x-pvmf / media-input-node / cap-config-interface; valtype = key_specific_value)
但我无法弄清楚,我可能犯错了什么。我使用了camera.getParameters(),使用返回的参数设置预览大小,然后使用camera.setParameters()将其推回...
通过我能找到的每一段示例代码,但仍未找到解决方案。
有没有人有任何想法?
答案 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
,就会发生这种情况。