赞
踩
安卓手机APP开发__媒体开发部分__检索元数据
目录
媒体的元数据在播放期间能以多种方式来检索。最正常不过的方法
是监听Player.Listener这个监听器的方法onMediaMetadataChanged的事件,
这将提供一个可以使用的MediaMetadata对象,它有例如标题和相册艺术家等属性。
还有,调用播放器的getMediaMetadata方法可以返回相同的对象。
- override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) {
- mediaMetadata.title?.let(::handleTitle)
- }
如果你的APP需要读取特定的Metadata.Entry对象,那么,它应该监听
Player.Listener的onMetadata方法。还有如果需要的是静态数据,能
通过TrackSelections的getFormat方法。
如果不需要播放,使用MetadataRetriever 来得到元数据是更加高效的,
因为它避免了创建和准备一个播放器。
Kotlin
-
- val trackGroupsFuture = MetadataRetriever.retrieveMetadata(context, mediaItem)
- Futures.addCallback(
- trackGroupsFuture,
- object : FutureCallback<TrackGroupArray?> {
- override fun onSuccess(trackGroups: TrackGroupArray?) {
- if (trackGroups != null) handleMetadata(trackGroups)
- }
-
- override fun onFailure(t: Throwable) {
- handleFailure(t)
- }
- },
- executor
- )
抽取一个动作照片的元数据也是有可能的,包括图像和视频的长度。
例如,如下的格式被支持:
谷歌和三星的照相机APP记录了JPEG格式的动作照片。这个格式是
ExoPlayer可播放的,并且相关的元数据也是能被检索的。使用
MetadataRetriever就行了。
谷歌和三星的照相机APP记录了HEIC格式的动作照片。这个格式是
ExoPlayer暂时还不可播放的,但相关的元数据是能被检索的。使用
MetadataRetriever就行了。
对于动作照片,TrackGroupArray得到了MetadataRetriever包括了
TrackGroup,这个TrackGroup有一个单独的格式,格式里有
MotionPhotoMetadata的元数据。
Kotlin
- 0.until(trackGroups.length)
- .asSequence()
- .mapNotNull { trackGroups[it].getFormat(0).metadata }
- .filter { metadata -> metadata.length() == 1 }
- .map { metadata -> metadata[0] }
- .filterIsInstance<MotionPhotoMetadata>()
- .forEach(::handleMotionPhotoMetadata)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。