ios中视频的最后一桢问题解决


Posted in Javascript onMay 14, 2019

问题描述

在ios系统下的safari、wechat、以及其他浏览器,在播放部分m3u8的时候,最后一桢的画面会被系统移出,也就是视觉效果在视频播放结束的时候会黑屏,并不是全部的视频都会这样,目前发现最后片段时时长小于.5的最后的画面会被系统移出,未找到相关的文档描述,目前针对该场景做了个polyfill

ios中视频的最后一桢问题解决

方案

将视频的最后一桢作为视频的背景图片,这样在视频播放结束画面被移走时就会展示背景图片,反之有视频画面的时候背景就会被覆盖。

具体实现

1、获取视频的最后一桢图片

a.技术能力:在前端中可以通过canvas对video进行绘图截取video的当前画面。
b.问题:但是无法做到截取video任一桢的功能,只能时视频播放哪里截取到哪里,相当于对视频进行截图。
c.探索:监听video的ended事件,但是当ended发生时,画面已经被系统移出了。
d.解决:监听video的timeupdate事件,当currentTime距duration小于1s的时候,开始截取当前的视频桢,这样在ended之前的画面就是视频的最后一桢。

2、将获取的视频最后一桢图片替换为video的背景图片

视频截取图片

function video2Base64 (video: HTMLVideoElement) {

 let dataURL = '',
  canvas = document.createElement("canvas");

  if (video.videoWidth !== 0) {
   canvas.width = video.videoWidth;
   canvas.height = video.videoHeight;

   (canvas.getContext("2d") as CanvasDrawImage).drawImage(video, 0, 0, canvas.width, canvas.height); //绘制canvas
   dataURL = canvas.toDataURL('image/jpeg'); //转换为base64
   // 将截取的视频图片设置为视频的背景
   video.setAttribute("style", `background-image: url(${dataURL}); background-size: contain; background-position: center;background-repeat: no-repeat;`);
  }
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
js中的cookie的读写操作示例详解
Apr 17 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
Mar 04 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
javascript计时器编写过程与实现方法
Feb 29 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
微信小程序 scroll-view组件实现列表页实例代码
Dec 14 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
Jan 26 Javascript
JavaScript基础心法 数据类型
Mar 05 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
Apr 26 Javascript
详解iview的checkbox多选框全选时校验问题
Jun 10 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
详解可以用在VS Code中的正则表达式小技巧
May 14 #Javascript
vue项目中引入vue-datepicker插件的详解
May 14 #Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 #jQuery
JavaScript中this的全面解析及常见实例
May 14 #Javascript
jquery 验证用户名是否重复代码实例
May 14 #jQuery
记录vue项目中遇到的一点小问题
May 14 #Javascript
javascript中如何判断类型汇总
May 14 #Javascript
You might like
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
详解Vuex管理登录状态
2017/11/13 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
JSONP解决JS跨域问题的实现
2020/05/25 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
python多进程实现进程间通信实例
2017/11/24 Python
python抓取文件夹的所有文件
2018/02/27 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
django实现类似触发器的功能
2019/11/15 Python
使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例
2016/03/22 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
2016/03/25 HTML / CSS
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
美国杰西潘尼官网:JCPenney
2019/06/12 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
优秀食品类广告词
2014/03/19 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
银行员工考核评语
2014/12/31 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Python 正则模块详情
2021/11/02 Python
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js
python数字图像处理实现图像的形变与缩放
2022/06/28 Python