Android中的MediaRecorder
是否能够捕获分辨率高于320*240
的视频?
当我使用MediaRecorder::setVideoSize()
设置视频大小时,捕获的视频都只有320*240
的分辨率。更糟糕的是,更高分辨率的视频不能得到清晰的图像,它们会变成绿色。(编码器使用的是h263
,格式为mpeg4
)
这里使用的Android版本为1.6
。
请问是否有人能帮我解决这个问题?
Android中的MediaRecorder
是否能够捕获分辨率高于320*240
的视频?
当我使用MediaRecorder::setVideoSize()
设置视频大小时,捕获的视频都只有320*240
的分辨率。更糟糕的是,更高分辨率的视频不能得到清晰的图像,它们会变成绿色。(编码器使用的是h263
,格式为mpeg4
)
这里使用的Android版本为1.6
。
请问是否有人能帮我解决这个问题?
我遇到了与此处描述的类似问题。事实证明,在调整视频大小之前,我需要稍微重构一下我的代码。
重要的是,在调用setVideoEncoder()之前要调用setVideoSize()。我在文档中找不到这个说明,但是它解决了我设置特定视频分辨率的问题。 另外请注意,在调用setVideoSize()之前应该先调用setOutputFormat()。
顺便说一句,对于setVideoFrameRate()也是如此。如果在调用setVideoEncoder()之前未调用它,则不会产生任何影响。
这在Android 2.3.3上进行了测试。
以下是示例代码:
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoSize(640,480);
recorder.setVideoFrameRate(30);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
首先,您需要确定您的相机支持哪些功能。可以尝试如下:
List<String> anti = params.getSupportedAntibanding();
List<String> color = params.getSupportedColorEffects();
List<String> focus = params.getSupportedFocusModes();
List<String> flash = params.getSupportedFlashModes();
List<Size> previewSize = params.getSupportedPreviewSizes();
List<Size> sizes = params.getSupportedPictureSizes();
List<Integer> frameRates = params.getSupportedPreviewFrameRates();
List<Integer> pictureFormats = params.getSupportedPictureFormats();
List<String> scene = params.getSupportedSceneModes();
List<String> white = params.getSupportedWhiteBalance();
这将告诉您相机支持的所有参数。其次,请确保正确初始化您的MediaRecorder,请参阅Google文档以了解设置MediaRecorder所需设置的顺序。此外,如果您的Camera.setPreviewSize和MediaRecorder.setVideoSize不同,则可能会引起奇怪的行为。
E/MediaRecorder﹕ start failed: -19
。 - Jonas Borggren