MediaMetadataRetriver 的 setDataSource 总是失败

问题描述 投票:0回答:1
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"/>
android kotlin android-mediaplayer exoplayer exoplayer-media-item
1个回答
0
投票

URI:

android.resource:/data/user/0/ba.simovic.videoeditor/cache/editedVideo.mp4

不正确。

方案部分(“android.resource:”)适用于应用程序资源。 但其余的(“/data/...”)是内部存储中的文件路径。

尝试从您保存的文件创建 URI:

Uri.parse(File(context.cacheDir, fileName))
© www.soinside.com 2019 - 2024. All rights reserved.