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 相关文章推荐
ext监听事件方法[初级篇]
Apr 27 Javascript
jquery select选中的一个小问题
Oct 11 Javascript
Jquery截取中文字符串的实现代码
Dec 22 Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 Javascript
json字符串之间的相互转换示例代码
Aug 21 Javascript
JavaScript闭包函数访问外部变量的方法
Aug 27 Javascript
基于ajax实现文件上传并显示进度条
Aug 03 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
vue不通过路由直接获取url中参数的方法示例
Aug 24 Javascript
webpack搭建vue 项目的步骤
Dec 27 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
原生js实现下拉框选择组件
Jan 20 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
一个显示天气预报的程序
2006/10/09 PHP
php csv操作类代码
2009/12/14 PHP
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
JS解析XML的实现代码
2009/11/12 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
深入理解python中sort()与sorted()的区别
2018/08/29 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
学习python的前途 python挣钱
2019/02/27 Python
python实现维吉尼亚加密法
2019/03/20 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
利用HTML5 Canvas API绘制矩形的超级攻略
2016/03/21 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
加拿大著名的奢侈品购物网站:SSENSE(支持中文)
2020/06/25 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
自我评价的正确写法
2013/09/19 职场文书
生产车间实习自我鉴定
2013/09/23 职场文书
管理科学大学生求职信
2013/11/13 职场文书
项目合作协议书
2014/04/16 职场文书
应届大专生求职信
2014/06/26 职场文书
超市收银员岗位职责
2015/04/07 职场文书
个人向公司借款协议书
2016/03/19 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Python基础之hashlib模块详解
2021/05/06 Python
MySQL 重写查询语句的三种策略
2021/05/10 MySQL