工作中遇到,需要获取一个本地mp4文件任意时间点的图片。刚开我始是使用 Android 提供的 MediaMetadataRetriever 来实现,不过鼓捣一阵发现,其实系统的这个类并不能满足我的需求,因为
MediaMetadataRetriever 只能获取 你指定时间的附近的关键帧(Key frame)
一开始的代码如下
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(renderOutputFilePath);
mmr.getFrameAtTime(1*1000*1000,OPTION_CLOSEST_SYNC );//获取1秒附近的关键帧
即使我把 getFrameAtTime 的第二个参数指定为 OPTION_CLOSEST 其实也获取不到精确位置的图片。
最后还是在stackoverflow找到了封装了ffmpeg的库可以满足我的需要,并且所提供的API 和 Android 的 MediaMetadataRetriever是一样的,github地址为: https://github.com/wseemann/FFmpegMediaMetadataRetriever。 需要注意的是,这个库导进去还是比较大的,我仅仅导入了 armeabi-v7a 架构的库,也使得我的库增加了 将近5MB。如果后续有更好的方式,会在这边更新。