retriever.setDataSource(context, uri)
这行代码不断抛出异常:
无法访问 android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4
我会从原始文件夹中获取视频,我会对其进行编辑并将新视频保存到缓存中。
原始视频文件路径 android.resource:/2131492864 编辑后的视频 文件路径: android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4 文件转换完成 /data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4
然后我会设置数据源,它会抛出异常。
将数据源设置为uri android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4 失败无法访问 android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4
部分代码:
private fun getVideoFrame(context: Context?, uri: Uri?): Bitmap? {
var bitmap: Bitmap? = null
val retriever = MediaMetadataRetriever()
val currentPosMillis = exoPlayer.currentPosition.toDuration(DurationUnit.MILLISECONDS)
val currentPosMicroSec = currentPosMillis.inWholeMicroseconds
try {
retriever.setDataSource(context, uri)
bitmap = retriever.getFrameAtTime(currentPosMicroSec)
} catch (ex: RuntimeException) {
ex.printStackTrace()
} finally {
try {
retriever.release()
} catch (ex: RuntimeException) {
ex.printStackTrace()
}
}
return bitmap
}
在尝试将数据源设置为原始视频时,我也遇到了相同的异常,所以我确信它们存在。
val videoUri = Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE).path(R.raw.diamond.toString()).build()
Button(onClick = { image.value = getVideoFrame(LocalContext.current, videoUri2) })
使用此答案中的代码如何捕获视频帧Exoplayer android
我拥有以下权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
URI:
android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4
不正确。
方案部分(“android.resource:”)适用于应用程序资源。 但其余的(“/data/...”)是内部存储中的文件路径。
尝试从您保存的文件创建 URI:
Uri.parse(File(context.cacheDir, fileName))