Android的MediaRecorder setVideoSize()出现问题

11

Android中的MediaRecorder是否能够捕获分辨率高于320*240的视频?

当我使用MediaRecorder::setVideoSize()设置视频大小时,捕获的视频都只有320*240的分辨率。更糟糕的是,更高分辨率的视频不能得到清晰的图像,它们会变成绿色。(编码器使用的是h263,格式为mpeg4

这里使用的Android版本为1.6

请问是否有人能帮我解决这个问题?

2个回答

9

我遇到了与此处描述的类似问题。事实证明,在调整视频大小之前,我需要稍微重构一下我的代码。

重要的是,在调用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);       

2
这给了我错误 E/MediaRecorder﹕ start failed: -19 - Jonas Borggren
它的工作非常好!非常感谢 +1! - Andrei Andrei Pedash

3

首先,您需要确定您的相机支持哪些功能。可以尝试如下:

            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不同,则可能会引起奇怪的行为。


我只希望他们能在API文档中写明(关于VideoSize和PreviewSize)。 - artsylar
setVideoSize() 不就是调用 setPreviewSize() 吗?也就是说,只要视频大小是支持的预览大小之一,最终它们的值仍然相同。 - artsylar
params是Camera.Parameters的一个实例(http://developer.android.com/reference/android/hardware/Camera.Parameters.html),通过调用camera.getParameters()方法来访问。 - d2vid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接