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 相关文章推荐
javascript 读取XML数据,在页面中展现、编辑、保存的实现
Oct 27 Javascript
js中匿名函数的N种写法
Sep 08 Javascript
js中创建对象的几种方式示例介绍
Jan 26 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
javascript常用功能汇总
Jul 05 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
JS中JSON对象和String之间的互转及处理技巧
Apr 06 Javascript
JavaScript数据类型学习笔记分享
Sep 01 Javascript
实例分析js事件循环机制
Dec 13 Javascript
微信小程序访问豆瓣电影api的实现方法
Mar 31 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
Oct 31 Javascript
微信小程序云函数添加数据到数据库的方法
Mar 04 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
全国FM电台频率大全 - 2 天津市
2020/03/11 无线电
php重定向的三种方法分享
2012/02/22 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
jquery实现表单验证并阻止非法提交
2015/07/09 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
实例分析javascript中的异步
2020/06/02 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
python学习之编写查询ip程序
2016/02/27 Python
利用python微信库itchat实现微信自动回复功能
2017/05/18 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python子类继承父类构造函数详解
2019/02/19 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
汽车销售经理岗位职责
2014/06/09 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers