Android studio Camera 2 全屏保存视频

Android studio Camera 2 save video in full screen

我正在使用 Camera2 API 录制视频,我使用 this 项目作为参考,我设法将我的 TextTure 视图更改为全屏但我正在保存的视频仍然没有全屏,如何将保存的视频也更改为全屏?

您可以看到我播放视频时视频尺寸与预览相同,请帮助我如何以与预览相同的视角保存视频?

试试这个方法:

private static Size fullScreenVideoSize(Size[] choices) {
    for (Size size : choices) {
        if (size.getWidth() == size.getHeight() * 4 / 3 && size.getWidth() <= 1080) {
            return size;
        }
    }
    return choices[choices.length - 1];
}

你可以实现它:

mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class));
mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, mVideoSize);

int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
    mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight());
} else {
    mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth());
}

好的,所以我设法解决了问题,视频不是全屏的,因为视频的纵横比与屏幕的纵横比不一样,所以我们要做的就是修复纵横比视频的比例使其与屏幕的比例匹配,我们可以按照下面的代码来做到这一点...

首先,我们需要FFmpeg,我正在使用this

那么我们可以简单地使用这个命令

val displaySize = Point().apply {
    windowManager.defaultDisplay.getSize(this)
}

val screenR = displaySize.y.toFloat() / displaySize.x

val testCrop = FFmpeg.execute("-i $videoPath -y -filter:v crop=ih/$screenR:ih ${OutputPath}")

when (testCrop) {
     RETURN_CODE_SUCCESS -> {
         //successful
     }

     RETURN_CODE_CANCEL -> {
        //canceled
     }

     else -> {
        // failed
     }

videoPath

是你要编辑的视频的路径(我们要制作成全屏的视频)

outputPath

是我们要保存视频的位置,请记住我们还应该包括文件名,例如

/storage/emulated/0/Android/data/myAppName/files/result.mp4

另外,请记住 'result.mp4' 不应该存在,因为 FFmpeg 会为我们创建该文件,如果有一个具有该名称的文件,那么我们将得到一个错误,或者我们应该授予 FFmpeg 权限覆盖该文件。

最后是

crop=ih/$screenR:ih

用于将视频的宽度更改为与屏幕匹配的比例(在我的情况下,我总是希望我的视频是垂直的,所以我只更改视频的高度)但请注意我我不是 100% 确定裁剪宽度是否总是正确的...