广告也精彩
目录

前言

项目中需求:拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面

下面是参考文章一中提到(摘抄于)

下面我想到的4个方案:

1、在拖动过程中,可以通过TextureView来显示预览图,拖动进度条到某个position后,通过textureView.getBitmap()拿到对应的截图,用于展示。

2、通过MediaMetadataRetriever 只能获取你指定时间的附近的关键帧(Key frame
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(renderOutputFilePath);
mmr.getFrameAtTime(1x1000x1000,OPTION_CLOSEST_SYNC );//获取1秒附近的关键帧,注意,只是附近,获取不到精确位置的图片。但是用于预览也够了

3、通过GLSurfaceView,拖到到某个事件点后,来onDrawFrame,这种方式比较高效。

4FFmpeg实现,获取某个位置的picturegithub上有封装好的实现此功能的库,类似和MediaMetadataRetriever一样的用法,可以更精准,高效。
链接:https://github.com/wseemann/FFmpegMediaMetadataRetriever,原理就是取某个timebase的关键帧。然后回调出去展示。

下面记录一下自己会用FFmpegMediaMetadataRetriever的简单记录。

好记性不如烂笔头

正文

上面大佬说了四种方式,第一种和第三种

导入配置

implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-arm64-v8a:1.0.14'

部分代码

    private Bitmap getVideoFrame(int duration) {
        try {
            Bitmap bitmap = mFFmpegMediaMetadataRetriever.getFrameAtTime(((long) duration * 1000 * 1000), FFmpegMediaMetadataRetriever.OPTION_NEXT_SYNC);
            if (null != bitmap) {
                return ThumbnailUtils.extractThumbnail(bitmap, 625, 272, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

参考文章

  1. 视频画中画效果,拖动进度条可以seek到相应视频帧显示
  2. 获取视频帧图片,FFmpegMediaMetadataRetriever修改,优化,提高加载速度
  3. Android获取视频的第一帧缩略图(本地视频、网络视频)
  4. [源码探究]ThumbnailUtils.createVideoThumbnail 获取到的帧不是视频第一个关键帧
  5. Android获取视频的关键帧和非关键帧,提取视频封面
  6. Android使用FFmpegMediaMetadataRetriever获取视频缩略图

 历史上的今天

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。