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)
请 post 第二部分作为一个单独的问题,我没有使用任何带有 MediaStore
API 的本机库。也许返回uri
可以用。
我正在尝试使用 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)
请 post 第二部分作为一个单独的问题,我没有使用任何带有 MediaStore
API 的本机库。也许返回uri
可以用。