- 说明:本文源于闲蛋,如需转载请带上链接或注明出处!
多媒体元数据兼容方案 - 支持获取图片、视频、音频文件的媒体信息、视频缩略图
简介
MediaMetadataRetrieverCompat 内部有两种实现(根据自身需求选择初始化方式)
FFmpegMediaMetadataRetriever
基于FFmpegMediaMetadataRetriever,对视频资源有增强,但库体积较大
MediaMetadataRetriever
基于原生API
示例apk
效果演示
快速开始
//核心库 必选 implementation 'com.dyhdyh.compat.mmrc:media-metadata-retriever-compat:1.0.9'
//当需要FFmpegMediaMetadataRetriever时必选 implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-java:1.0.14' implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-armeabi-v7a:1.0.14'
//可选平台 implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-armeabi:1.0.14' implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-arm64-v8a:1.0.14' implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-mips:1.0.14' implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-x86:1.0.14' implementation 'com.dyhdyh.remake:FFmpegMediaMetadataRetriever-x86_64:1.0.14'
|
初始化(三种模式)
//自动 - 推荐 MediaMetadataRetrieverCompat mmrc = MediaMetadataRetrieverCompat.create(); //FFmpeg //MediaMetadataRetrieverCompat mmrc = MediaMetadataRetrieverCompat.create(MediaMetadataRetrieverCompat.RETRIEVER_FFMPEG); //原生API //MediaMetadataRetrieverCompat mmrc = MediaMetadataRetrieverCompat.create(MediaMetadataRetrieverCompat.RETRIEVER_ANDROID);
|
设置输入源
//本地文件 mmrc.setDataSource(inputFile);
//网络资源(需要放在子线程,每次调用都会下载视频,请慎用,建议自行下载后设置File) mmrc.setDataSource(url, headers);
//Uri mmrc.setDataSource(context, uri);
|
String width = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_VIDEO_WIDTH); String height = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_VIDEO_HEIGHT); String rotation = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_VIDEO_ROTATION); String numTracks = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_NUM_TRACKS); String title = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_TITLE); String album = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_ALBUM); String albumArtist = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_ALBUMARTIST); String author = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_AUTHOR); String duration = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_DURATION); String framerate = mmrc.extractMetadata(MediaMetadataRetrieverCompat.METADATA_KEY_CAPTURE_FRAMERATE); ...
//带转换类型和默认值的 基本类型的默认值是-1 long value = extractMetadataLong(keyCode); Long value = extractMetadataLong(keyCode, defaultValue);
int value = extractMetadataInt(keyCode); Integer value = extractMetadataInteger(keyCode, defaultValue);
float value = extractMetadataFloat(keyCode); Float value = extractMetadataFloat(keyCode, defaultValue);
|
获取缩略图
耗时操作,请放在子线程,获取到的缩略图会根据资源信息自动旋转
//获取第一帧原尺寸图片 mmrc.getFrameAtTime();
//获取指定位置的原尺寸图片 注意这里传的timeUs是微秒 mmrc.getFrameAtTime(timeUs, option);
//获取指定位置指定宽高的缩略图 mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height);
|