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面向对象编程 for Cookie
Sep 19 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
基于JavaScript实现简单的随机抽奖小程序
Jan 05 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
Node.js编写组件的三种实现方式
Feb 25 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
Node学习记录之cluster模块
May 31 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 Javascript
小程序server请求微信服务器超时的解决方法
May 21 Javascript
js键盘事件实现人物的行走
Jan 17 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 页面执行时间计算代码
2008/12/04 PHP
PHP set_time_limit(0)长连接的实现分析
2010/03/02 PHP
php中jQuery插件autocomplate的简单使用笔记
2012/06/14 PHP
深入理解Javascript闭包 新手版
2010/12/28 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
python的urllib模块显示下载进度示例
2014/01/17 Python
python验证码识别实例代码
2018/02/03 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
Django 重写用户模型的实现
2019/07/29 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
老师给学生的表扬信
2014/01/17 职场文书
论文诚信承诺书
2014/05/23 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
单位计划生育责任书
2015/05/09 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
Redis基本数据类型Set常用操作命令
2022/06/01 Redis
MySQL新手入门进阶语句汇总
2022/09/23 MySQL