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 相关文章推荐
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
Jun 28 Javascript
基于jQuery的图片剪切插件
Aug 03 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
Oct 16 Javascript
javascript批量修改文件编码格式的方法
Jan 27 Javascript
微信小程序 form组件详解
Oct 25 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
Vue路由history模式解决404问题的几种方法
Sep 29 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 Javascript
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
详解可以用在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
Yii调试SQL的常用方法
2014/07/09 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
jquery 指南/入门基础
2007/11/30 Javascript
Javascript浅谈之this
2013/12/17 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
python操作xml文件示例
2014/04/07 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
python中的全局变量用法分析
2015/06/09 Python
关于python的list相关知识(推荐)
2017/08/30 Python
对Xpath 获取子标签下所有文本的方法详解
2019/01/02 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python日期相关操作实例小结
2019/06/24 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
pymysql模块使用简介与示例
2020/11/17 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
校园文化标语
2014/06/18 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
2015年团支书工作总结
2015/04/03 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js