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 validation插件表单验证的一个例子
Mar 03 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
Mar 11 Javascript
javascript放大镜效果的简单实现
Dec 09 Javascript
原生js实现日期联动
Jan 12 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
深入探究使JavaScript动画流畅的一些方法
Jun 30 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
Oct 30 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 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
处理php自动反斜杠的函数代码
2010/01/05 PHP
php中static和const关键字用法分析
2016/12/07 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
Python实现全局变量的两个解决方法
2014/07/03 Python
Python中的各种装饰器详解
2015/04/11 Python
python实现统计代码行数的方法
2015/05/22 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
python实现AES加密与解密
2019/03/28 Python
Python实现元素等待代码实例
2019/11/11 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
网上卖盒饭创业计划书
2014/01/26 职场文书
退休感言
2014/01/28 职场文书
个人求职信范文分享
2014/01/31 职场文书
电大会计学自我鉴定
2014/02/06 职场文书
前处理组长岗位职责
2014/03/01 职场文书
幼儿园秋游感想
2014/03/12 职场文书
天猫活动策划方案
2014/08/21 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
离婚被告代理词
2015/05/23 职场文书
2015党建工作简报
2015/07/21 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
Linux磁盘管理方法介绍
2022/06/01 Servers