Android: 如何使用带有 ExoPlayer 的 MediaStore 打开视频文件?

Android: How to open a video file using MediaStore with ExoPlayer?

我正在尝试使用 MediaStore API 播放本地视频文件,但我所看到的只是我可以将其作为 OpenFileDiscriptor 对象或 InputStream 进行访问。 但是 ExoPlayer 不支持任何这些方法。 那么现在如何使用 MediaStore API 打开此文件并使用 Android 10+ 播放它?

另外,有谁也知道我如何使用 Native Libs 创建和保存视频?例如使用 MediaStore API.

的 FFmpeg

您从 MediaStore 获得了一个 Uri。

然后为其打开一个InputStream:

InputStream is = getContentResolver().openInputStream(uri);

然后给 Exoplayer 你的流。

哦抱歉...重读后我发现我看错了..抱歉.

但是……Exoplayer有哪些方法呢?

这是获取Content Uri

val contentUri: Uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI

获取Cursor

...

val cursor: Cursor? = contentResolver.query(contentUri, projection,
    selection,
    selectionArgs, sortOrder)
...

获取文件的id

...
val id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID))
...
val fileUri = ContentUris.withAppendedId(
                        MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        id
                    )

使用此 uri,创建 exoplayer MediaSource

val dataSourceFactory: DataSource.Factory = DefaultDataSourceFactory(
            context,
            "exoplayer-example"
        )
val mediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(fileUri)

参考this and this.

请 post 第二部分作为一个单独的问题,我没有使用任何带有 MediaStore API 的本机库。也许返回uri可以用。