Android的getSupportedVideoSizes方法总是返回null

8

我需要在Android上使用MediaRecorder类并寻求帮助。

我试图使用getSupportedVideoSizes来获取支持的视频尺寸列表,但总是返回null。

在测试中,以下设备查询getSupportedVideoSizes时返回null

  • Galaxy Nexus (Android 4.2)
  • HTC One Mini (Android 4.4.2)
  • HTCEVOV4G (Android 4.0.3)

这是关于该主题的一些讨论 https://dev59.com/p1bUa4cB1Zd3GeqPDv2I 。 - harism
你好,感谢你的帮助,但不幸的是我已经看过那篇文章了。但是我该如何设置单独的预览和视频输出呢?这就是我无法理解的地方...因为他们都使用了getSupportedVideoSizes函数,但对我来说它一直返回null... - cataHHH
你看到YShinkarev在那儿留下的最后一条评论了吗?其中提到,在某些情况下,“getSupportedVideoSizes”会有意返回null。 - harism
那么你的意思是这取决于手机? - cataHHH
2
很不幸,如果我正确理解文档,这是一个与硬件相关的决定,是否默认返回null。 - harism
2个回答

37

Camera.getSupportedVideoSizes()方法的文档读作:

返回
如果相机具有单独的预览和视频输出,则返回Size对象列表;否则返回null。

这个描述并不是非常清晰。然而,它的意思是如果Camera.getSupportedVideoSizes()返回null,那么相机支持的预览尺寸和视频尺寸相同;在这种情况下,要获取支持的视频尺寸列表,可以使用Camera.getSupportedPreviewSizes()

示例代码:

public List<Size> getSupportedVideoSizes(Camera camera) {
    if (camera.getParameters().getSupportedVideoSizes() != null) {
        return camera.getParameters().getSupportedVideoSizes();
    } else {
        // Video sizes may be null, which indicates that all the supported 
        // preview sizes are supported for video recording.
        return camera.getParameters().getSupportedPreviewSizes();
    }
}

4
安卓文档中的描述实在是荒谬至极! - Daniel Smith
很好的答案和解释...这是一个容易被忽视的小问题,尤其是当你的开发设备返回一个getSupportedVideoSizes()列表时。事实证明,三星和其他一些公司返回null,因此我的应用程序只能猜测要使用的图片大小,这导致了不受所有设备支持的设置。现在,我使用getSupportedPreviewSizes()来处理null情况,一切都运作得很稳定。 - Wookie
荒谬的文档需要这种令人惊叹的挖掘。谢谢 +1 ;) - Numan Karaaslan

1
或者只需使用
mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

自动设置最佳分辨率。

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