【问题标题】:Recording 4K with MediaRecorder使用 MediaRecorder 录制 4K
【发布时间】:2016-02-12 18:21:12
【问题描述】:

正在查看谷歌发布的camera2视频sample app,其中一种方法如下:

/**
 * In this sample, we choose a video size with 3x4 aspect ratio. Also, we don't use sizes
 * larger than 1080p, since MediaRecorder cannot handle such a high-resolution video.
 *
 * @param choices The list of available sizes
 * @return The video size
 */
private static Size chooseVideoSize(Size[] choices) {
    for (Size size : choices) {
        if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) {
            return size;
        }
    }
    Log.e(TAG, "Couldn't find any suitable video size");
    return choices[choices.length - 1];
}

我摆弄了自己的 camera2 实现,并尝试使用媒体记录器录制 4K 视频,效果很好 - 录制的文件报告的尺寸为 3840 × 2160。

那么,示例中的注释是否不正确,或者 MediaRecorder 无法在 Lollipop 上处理更大的分辨率,但可以在 Marshmallow 或其他东西上处理?

【问题讨论】:

  • 媒体录制的功能会因设备而异,甚至会因操作系统而异。
  • 所以你是在暗示作者说所有设备都可以处理 choices 数组来自CameraCharacteristics / StreamConfigurationMap getOutputSize - 我认为它是从相机硬件配置文件中收集的?令人困惑..
  • 我的意思是,Android 上的相机内容通常令人困惑。 :-)

标签: android android-camera android-mediarecorder


【解决方案1】:

CamcorderProfile 确实支持 4K,如“QUALITY_2160P”,因此最佳做法是检查该配置文件是否受支持。如果是,则使用该大小将 camera2 输出到 MediaRecorder 预计会起作用。

但是,由于并非所有设备都支持 4K,因此 1080p 是示例应用程序中使用的保守限制 - 该应用程序的部分内容还早于向 CamcorderProfile 添加 4K 支持,因此该评论有点过时了。

【讨论】:

    【解决方案2】:

    此方法中的选择数组来自 CameraCharacteristics / StreamConfigurationMap getOutputSize - 我认为它是从相机硬件配置文件中收集的?

    正确,但此相机配置文件不一定符合 MediaRecorder 功能,例如this.

    您可以更好地信任摄像机配置文件,

    mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
    

    但不是没有glitches,也不能保证在特定设备上 MediaRecorder 不能处理更多。

    无论如何,CamcorderProfile 具有最高 1080p 的“官方”配置文件,因此它是示例代码的合理选择,它并没有声称可以为最广泛的设备提供最佳结果。

    【讨论】:

    • 对,但此相机配置文件不一定符合 MediaRecorder - 您确定这仍然与 camera2 相关吗?这都是真的,我经历了与棒棒糖前摄像头实施相关的痛苦。我希望他们修复它/简化了 camera2 和 StreamConfigurationMap 是 camera2 类
    • Camera 仍然与 MediaRecorder 分开,即使它是 camera2。我相信 Camcorder 与 MediaRecorder 的耦合更紧密,但即使这样也不能保证。实际上,我的个人经验表明,camera2 实现通常仍然不如旧 API 健壮。
    • CamcorderProfile.QUALITY_HIGH 不适用于 Sony L1
    • @vuhung3990 太糟糕了。此设备是否为 CamcorderProfile.hasProfile(0, CamcorderProfile.QUALITY_HIGH) 返回 true
    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多