我已成功使用mediaRecorder
Android 上的课程录制视频。
但是,我现在需要做的是让它记录,直到我告诉它停止,但只记录最多 X 秒。
例如,如果我在 time=0(秒)开始录制,并且我将其设置为最多录制 10 秒,如果我在 time=20(秒)停止录制,录制的视频将是10..20 秒周期。
与我发现的唯一类似的是setMaxDuration,但在设置指定时间后会自动停止,所以在我的情况下,它只会记录前 10 秒。
我已成功使用mediaRecorder
Android 上的课程录制视频。
但是,我现在需要做的是让它记录,直到我告诉它停止,但只记录最多 X 秒。
例如,如果我在 time=0(秒)开始录制,并且我将其设置为最多录制 10 秒,如果我在 time=20(秒)停止录制,录制的视频将是10..20 秒周期。
与我发现的唯一类似的是setMaxDuration,但在设置指定时间后会自动停止,所以在我的情况下,它只会记录前 10 秒。
要让媒体记录器记录 X 秒,您必须将此代码简单地放入您的视频记录代码中
Intent captureVideoIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
captureVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
captureVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(captureVideoIntent, VIDEO_CAPTURED);
I'm not aware of any way to accomplish what you need using just the SDKs. You could have it record a video and then when you determine it cut the video down to the last 10 seconds.
I haven't used it, but this guy suggests his library in this answer
搜索它的正确关键字是“循环缓冲区”。您将看到一些方法,这些方法并不简单。有些使用 NDK 解决方案。
我的想法是:你知道你想记录 X 秒。然后记录到fileX_1,然后结束记录。自动启动并记录 fileX_2 直到结束。当它结束时,然后记录到 fileX_3 并删除 fileX_2 以节省空间。
所以最大存储和视频长度可以是 X * 2。最小可以是 X。
要使用循环录制,我认为它必须将其解码为帧,存储它,对其进行编码,使用大量的处理能力,结果是电池耗尽和设备发热!