如何使用 Camerax 将视频的确切创建时间设置为文件名
How can I set the exact creation time of a video as a file name with Camerax
我目前正在开发带有 androidx 的录像机,因为我需要视频文件,其确切的创建时间为毫秒时间戳,作为另一个项目的标题。问题是我刚刚完成应用程序,但创建时间不准确,因为我在触发 onVideoSaved() 回调时命名文件,这发生在视频录制实际开始前约 1-2 秒。谁能告诉我如何在 VideoCapture 编写第一个视频样本时重命名文件?
很可能我只是愚蠢,因为我开始使用 android studio 开发应用程序只是为了这个“配套应用程序”到我的实际项目。对不起,如果是这样的话^^。
只需使用简单的日期格式来设置您想要的格式并通过以毫秒为单位传递当前时间来格式化它
val videoCapture = VideoCapture.Builder().build()
val outputDirectory = getOutputDirectory()
fun getOutputDirectory(): File {
val mediaDir = externalMediaDirs.firstOrNull()?.let {
File(it, resources.getString(R.string.app_name)).apply { mkdirs() } }
return if (mediaDir != null && mediaDir.exists())
mediaDir else filesDir
}
@SuppressLint("RestrictedApi")
private fun startRecording() {
val videoFile = File(
outputDirectory,
SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US
).format(System.currentTimeMillis()) + ".mp4")
val outputOptions = VideoCapture.OutputFileOptions.Builder(videoFile).build()
videoCapture?.startRecording(outputOptions, ContextCompat.getMainExecutor(this), object: VideoCapture.OnVideoSavedCallback {
override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
Log.e(TAG, "Video capture failed: $message")
}
override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) {
val savedUri = Uri.fromFile(videoFile)
val msg = "Video capture succeeded: $savedUri"
Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
Log.d(TAG, msg)
}
})
}
@SuppressLint("RestrictedApi")
private fun stopRecording() {
videoCapture?.stopRecording()
}
我目前正在开发带有 androidx 的录像机,因为我需要视频文件,其确切的创建时间为毫秒时间戳,作为另一个项目的标题。问题是我刚刚完成应用程序,但创建时间不准确,因为我在触发 onVideoSaved() 回调时命名文件,这发生在视频录制实际开始前约 1-2 秒。谁能告诉我如何在 VideoCapture 编写第一个视频样本时重命名文件?
很可能我只是愚蠢,因为我开始使用 android studio 开发应用程序只是为了这个“配套应用程序”到我的实际项目。对不起,如果是这样的话^^。
只需使用简单的日期格式来设置您想要的格式并通过以毫秒为单位传递当前时间来格式化它
val videoCapture = VideoCapture.Builder().build()
val outputDirectory = getOutputDirectory()
fun getOutputDirectory(): File {
val mediaDir = externalMediaDirs.firstOrNull()?.let {
File(it, resources.getString(R.string.app_name)).apply { mkdirs() } }
return if (mediaDir != null && mediaDir.exists())
mediaDir else filesDir
}
@SuppressLint("RestrictedApi")
private fun startRecording() {
val videoFile = File(
outputDirectory,
SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US
).format(System.currentTimeMillis()) + ".mp4")
val outputOptions = VideoCapture.OutputFileOptions.Builder(videoFile).build()
videoCapture?.startRecording(outputOptions, ContextCompat.getMainExecutor(this), object: VideoCapture.OnVideoSavedCallback {
override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
Log.e(TAG, "Video capture failed: $message")
}
override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) {
val savedUri = Uri.fromFile(videoFile)
val msg = "Video capture succeeded: $savedUri"
Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
Log.d(TAG, msg)
}
})
}
@SuppressLint("RestrictedApi")
private fun stopRecording() {
videoCapture?.stopRecording()
}