在视频开发中,我们常常看到这样的效果,拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面。

这个需求,如果是你,你会如何做?

通常一个需求,不仅要考虑实现,还有考虑一些是否有性能上影响。

下面我想到的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,这种方式比较高效。

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

需要注意的是,取帧是个耗时的操作,需要放到子线程中

FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
mmr.setDataSource(mUri);//获取第一帧原尺寸图片
mmrc.getFrameAtTime();//获取指定位置的原尺寸图片 注意这里传的timeUs是微秒
mmrc.getFrameAtTime(timeUs, option);//获取指定位置指定宽高的缩略图
mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height);//获取指定位置指定宽高并且旋转的缩略图
mmrc.getScaledFrameAtTime(timeUs, MediaMetadataRetrieverCompat.OPTION_CLOSEST, width, height, rotate);

Demo效果图:


欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长。

视频画中画效果,拖动进度条可以seek到相应视频帧显示相关推荐

  1. python 视频播放 拖动_视频画中画效果,拖动进度条可以seek到相应视频帧显示

    在视频开发中,我们常常看到这样的效果,拖动进度条时,或是在进度条上方或是在屏幕中间,显示拖动进度条位置时刻的某一帧画面. 这个需求,如果是你,你会如何做? 通常一个需求,不仅要考虑实现,还有考虑一些是 ...

  2. uniapp实现video视频禁止拖拽快进功能,禁止拖动进度条快进

    之前写了一篇文章 , 禁止快进的 , 但刚刚发现在uni-app中实现不了 , 所以又上网找别的方法,话不多说, 上代码 一 , template中 <video id="myVide ...

  3. 异常:谷歌浏览器video标签播放视频不能拖动进度条

    谷歌浏览器video标签播放视频不能拖动进度条 当前端video的src不是直接使用视频文件的地址,而是通过后台下载接口返回文件流时,后台返回流因为没为response的header设置一些参数,会在 ...

  4. 关于前端video标签视频无法拖动进度条快进问题(Django)

    因为后端返回的是视频的文件流,并不是视频文件地址.后端返回流的时候要为header设置一些参数,否则部分浏览器会出现问题(如Google Chrome...). django中常用返回文件流写法: c ...

  5. 【网页上视频无法拖动进度条,如何进行加速播放操作以及网页失焦后如何可继续播放】

    面对网页视频无法加速时如何进行加速播放 遇到一 zhengzhi 刷题任务时 ,发现无法拖动进度条,也没有加速播放并且鼠标一失焦就会自动暂停时,让我乖乖看完是不可能,因此找了一个解决方案快速完成该任务 ...

  6. html如何设置视频不能拖动,video标签播放视频不能拖动进度条(示例代码)

    因为你的video的src不是直接使用视频文件的地址,而是通过后台接口返回文件流,后台返回流的时候没为response的header设置一些参数,否则会在部分浏览器有问题 String rangeSt ...

  7. 微信小程序音频或视频拖动进度条时间不变解决方法

    问题描述: 微信小程序在较新版本的音频接口中推荐使用InnerAudioContext对象实现音频的播放.暂停.跳转等功能,通过监听接口回调实现. InnerAudioContext.onTimeUp ...

  8. 【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )

    文章目录 I . FFMPEG 播放进度控制 II . FFMPEG 播放视频 ( 效果展示 ) III . FFMPEG 获取视频时长 IV . FFMPEG 视频播放进度获取 V . FFMPEG ...

  9. vue-video-player 拖动进度条触发暂停移动端展示倍速菜单

    一.安装 npm install vue-video-player --save 二. 组件内引入 import { videoPlayer } from 'vue-video-player' imp ...

  10. JS video 禁止拖动进度条

    需要实现一个效果,视频加载的过程中禁止拖动进度条快进. 开始呢我想着把控件禁掉,自动播放解决. <video id="video" src="http://kuan ...

最新文章

  1. redhat7企业版linuxlinux基本操作
  2. supervisor 守护php,laravel队列之Supervisor守护进程(centos篇)
  3. Oracle XTTS跨平台数据库迁移(从Unix迁移数据库到Linux)_Oracle数据库迁移项
  4. 分页请求json数据_pyspider抓取虎嗅网文章数据
  5. SpringBatch接口BatchConfigurer详解
  6. Python Django开发案例:显示登录页面
  7. 简单介绍一下Java常用的五大框架!
  8. VTK:PolyData之WarpScalar
  9. 使用C#获取IP地址方法
  10. apache zookeeper java_zookeeper启动报错java.net.NoRouteToHostException
  11. 2021牛客暑期多校训练营1 G Game of Swapping Numbers 思维 + 巧妙的转换
  12. linux中shell自动对齐代码,linux – Shell编程 – 如何printf像表一样对齐我的输出?...
  13. 安卓--selector简单使用
  14. 十种UI设计常用字体特效,让你的设计高大上!【萧蕊冰】
  15. 银企直连ukey 集中管理方案
  16. 徐思201771010132《面向对象程序设计(java)》第一周学习总结
  17. Android studio 分渠道打包,引用不同的moudle
  18. 化工原理计算机辅助设计,化工原理课程设计总结与体会
  19. 「经济读物」小狗钱钱
  20. 陈艾盐:《春燕》百集访谈节目第六十三集

热门文章

  1. php字符串转openssl格式,将OpenSSL生成的RSA公钥转换为OpenSSH格式(PHP)
  2. java clob 操作_java操作clob字段
  3. 图像特征描述_如何判断ORB特征点的好坏(得分)_FAST_SCORE对比HARRIS_SCORE
  4. 人工智能+眼科疾病辅助诊断(相关信息搜集)
  5. AI发展“风口”在哪里?陪伴才是“蓝海”
  6. Focal Loss for Dense Object Detection解读
  7. cenos安装erlang
  8. H5与客户端交互的方式有哪些? 怎么做?
  9. C#6.0VISUALSTUDIO 2015 C#入门经典 第7版pdf
  10. mongodb基础操作