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计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
Oct 15 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
jQuery实现图片轮播特效代码分享
Sep 15 Javascript
开启BootStrap学习之旅
May 04 Javascript
原生JS取代一些JQuery方法的简单实现
Sep 20 Javascript
纯javascript版日历控件
Nov 24 Javascript
单页面vue引入百度统计的使用方法示例详解
Oct 13 Javascript
koa2的中间件功能及应用示例
Mar 05 Javascript
js实现表格单列按字母排序
Aug 12 Javascript
jQuery实现增删改查
Dec 22 jQuery
详解可以用在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 函数语法介绍一
2009/06/14 PHP
解析php入库和出库
2013/06/25 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
Python实现文件信息进行合并实例代码
2018/01/17 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
班级标语大全
2014/06/21 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
入党转正申请书范文
2019/05/20 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
redis配置文件中常用配置详解
2021/04/14 Redis
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
Java实现简易的分词器功能
2021/06/15 Java/Android
Linux中各个目录的作用与内容
2022/06/28 Servers