登录

去注册 忘记密码?

登录

注册

去登录

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

注册

解锁回答区域

  • 扫码关注公众号
  • 发送“我爱安卓

若你登陆,将永久解锁;
若未登录,仅本机解锁。

解锁回答区域

获取注册验证码

  • 扫码关注公众号
  • 发送“我爱安卓
  • 即可获取验证码

MediaMetadataRetrieverCompat - 多媒体元数据兼容方案

dengyuhan   2018-11-29 21:15   收藏

MediaMetadataRetrieverCompat

多媒体元数据兼容方案 - 支持获取图片、视频、音频文件的媒体信息、视频缩略图

简介

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);

获取Metadata信息

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);

项目地址:https://github.com/dengyuhan/MediaMetadataRetrieverCompat