前言

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

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

下面我想到的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. 2024: Android刷新媒体库的方法(0条评论)
  2. 2024: AudioTrack简单使用(1条评论)
  3. 2023: Android截图命令介绍(0条评论)
  4. 2021: Android应用启动时出现白屏或者黑屏问题的简介(0条评论)
  5. 2018: Looper中ThreadLocal的简介(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

[摘]Handler内存泄露原理及解决方法

SHUI知道本想总结,也懒了,看网上也有很多人总结,也就摘抄于此,以供自己查阅。前言因为Android采取了单线程UI模型,开发者无法在子线程中更新UI,为此Android为我们提供了Handler这个工具,可以开发者切换到主线程更新UI。示例首先看一段示例代码public class...

拜伦:当初我们俩分别

想从前我们俩分手, 默默无言地流着泪, 预感到多年的隔离, 我们忍不住心碎; 你的脸冰凉、发白, 你的吻更似冷冰, 呵,那一刻正预兆了 我今日的悲痛。 清早凝结着寒露, 冷彻了我的额角, 那种感觉仿佛是 对我此刻的警告。 你的誓言全破碎了, 你的行为如此轻浮: 人家提起你的名字, 我听了也感...

音视频学习:AudioRecord的简单使用

前言相关文章摘抄过,但由于不是自己写的或者敲过代码,后面就忘了。本站主要简单的介绍AudioRecord的使用。好记性不如烂笔头正文Android录音的流程:构造一个AudioRecord对象,其中需要的最小录音缓存buffer大小可以通过getMinBufferSize方法得到。...

Android ListView 滚动条的简单记录

前言用了多次还是容易忘记,因此这里记录一下,方便自己查阅。好记性不如烂笔头主要是摘抄的。正文android:scrollbars是否显示滚动条,它的取值可以是vertical,horizontal或none。android:scrollbarThumbVertical控制垂直滚动条...

Android汉字转拼音以及按照[字母][数字][特殊字符]排序

前言多媒体开发时需要对音频文件进行排序,由于媒体文件的命名多样,需要对文件名字进行统一的转换,然后进行排序。排序规则:【字母】-【数字】-【特殊字符】PS: 也存在外国文字(比如韩语,俄语,日语),为了省事,这个默认当成特殊字符隐藏内容!付费阅读后才能查看!¥3 ¥6多个隐藏块只需支付一次...

windows下FFmpeg使用以及ffmpeg抽取视频的关键帧

FFmpeg 简介FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice ...