如何在CameraX中捕获视频后获取saveUri?

问题描述 投票:0回答:1

我想从 CameraX 的 CaptureVideo 获取 uri

这是我捕捉视频的代码

private void takeVideo() {
    if (mso != null) {
        if (recording != null) {
            recording.close();
            recording = null;
            return;
        }
        recording = videoCapture.getOutput().prepareRecording(CameraActivity.this, mso)
                .start(ContextCompat.getMainExecutor(this), new Consumer<VideoRecordEvent>() {
                    @Override
                    public void accept(VideoRecordEvent videoRecordEvent) {
                        if (videoRecordEvent instanceof VideoRecordEvent.Start) {
                            setBackgroundBtn(R.drawable.recoding);
                            Toast.makeText(CameraActivity.this, "recoding start...", Toast.LENGTH_SHORT).show();
                        } else if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
                            setBackgroundBtn(R.drawable.round_bg);
                            Toast.makeText(CameraActivity.this, "Recoding stop ...", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
    }
}

uri 应该在事件发生的某个地方返回

VideoRecordEvent.Finalize
我调试了记录并在触发时显示 uri
VideoRecordEvent.Finalize
并且 uri 在
recoding.mRecorder.mOutputUri.uriString

但是我不知道如何获取这个值,因为没有获取该 uri 的函数。

java android androidx video-capture android-camerax
1个回答
0
投票

你可以做的是检查录制是否不为空,则表示视频录制成功开始。然后是记录对象中的

outputFileOptions
,它包含您要查找的
URI
。然后要获得
Uri
,您需要将
outputFileOptions
投射到
OutputFileUriOptions
并使用
URI
方法检索
getUri()
,然后如果您想要它作为
String
,则必须将
toString()
添加到它。

@Override
public void accept(VideoRecordEvent videoRecordEvent) {
    if (videoRecordEvent instanceof VideoRecordEvent.Start) {
        setBackgroundBtn(R.drawable.recoding);
        Toast.makeText(CameraActivity.this, "recording start...", Toast.LENGTH_SHORT).show();
    } else if (videoRecordEvent instanceof VideoRecordEvent.Finalize) {
        setBackgroundBtn(R.drawable.round_bg);
        Toast.makeText(CameraActivity.this, "Recording stop ...", Toast.LENGTH_SHORT).show();

        if (recording != null) {
            OutputFileOptions outputFileOptions = recording.getOutputFileOptions();
            if (outputFileOptions instanceof OutputFileOptions.OutputFileUriOptions) {
                Uri outputFileUri = ((OutputFileOptions.OutputFileUriOptions) outputFileOptions).getUri();
                String outputFileUriString = outputFileUri.toString();
                Log.d("CameraX", "Video output URI: " + outputFileUriString);
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.