我想从 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 的函数。
你可以做的是检查录制是否不为空,则表示视频录制成功开始。然后是记录对象中的
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);
}
}
}
}