前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >html5的video在IOS端默认全屏和黑屏问题

html5的video在IOS端默认全屏和黑屏问题

作者头像
空空云
发布于 2018-09-27 03:48:12
发布于 2018-09-27 03:48:12
5.7K00
代码可运行
举报
文章被收录于专栏:大前端_Web大前端_Web
运行总次数:0
代码可运行

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://cloud.tencent.com/developer/article/1347531

最近项目中需要使用video来代替有点复杂的动画(video循环自动播放),遇到了使用过程中的两个坑

ios端默认全屏解决办法

查阅资料说在在video标签加如下属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<video webkit-playsinline="webkit-playsinline"></video>

无奈测试机是ios10,上面这段代码在iOS8,9下生效

因项目是react工匠,不支持除data-*之外的自定义属性,需在compentDidMount加如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.videoElement.setAttribute('webkit-playsinline', 'webkit-playsinline');// Fix fullscreen problem on IOS 8 and 9
this.videoElement.setAttribute('playsinline', 'playsinline'); // Fix fullscreen problem on IOS 10

如果项目基于cordova构建,还需在config.xml加如下属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<preference name="AllowInlineMediaPlayback" value="true" />

对了,行内播放之后还解决了一个问题,可以在video视窗使用定位来增加遮罩等功能

video自动播放黑屏

最开始产品需求是视频加载自动播放并且循环,导致快速切换页面再加载视频经常黑屏很长一段时间才能播放

寻求解决思路:

一. 视频加载前使用loading,对video执行onCanPlay监听remove loading

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//react 代码
canPlay() {
  this.mask.remove();
}

<div className="video-wrap">
   <div className="mask" ref={(node) =>{this.mask = node;}}>
     <div className="loading"><span></span><span></span><span></span></div>
   </div>
   <video autoPlay muted loop  poster={this.props.poster} ref={(node) =>{this.videoElement = node;}} onCanPlay={this.canPlay}>
     <source src={this.props.src}></source>
     Your browser does not support the video tag.
   </video>
</div>

问题:依然存在黑屏,换成onplay尝试无解

网上说是videoview在加载第二个视频时 默认会释放到第一个视频的资源再加载第二个视频的资源 这个比较耗内存 会出现短暂的黑屏,可通过Web Workers开启多线程操作资源的加载,未尝试,可作为思路

二. 更改需求^ ^

因自动循环播放体验不友好,后期改为手动播放,添加poster,preload='auto'遂可以解决

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 playVideo() {
  this.videoElement.play();
  this.img.style.display = 'none';
}

videoEnded() {
  this.img.style.display = 'block';
}

<div className="video-wrap">
   <img className="play" src="./img/icon-video-play.png" alt="" ref={(node) =>{this.img=node;}} {...tapOrClick(this.playVideo)}/>
   <video preload="auto"  poster={this.props.poster} ref={(node) =>{this.videoElement = node;}} onEnded={this.videoEnded}>
     <source src={this.props.src}></source>
     Your browser does not support the video tag.
   </video>
</div>

题外话,查阅相关资料发现,autoplay确实存在不少坑,低版本的chrome for android 也不支持, google developers 建议autoplay和muted一起使用,参考资料:https://developers.google.com/web/updates/2016/07/autoplay

video.play()返回的是个promise,学到了……^_^,文章也解释了为什么移动端不太支持自动循环播放,会导致用户无意识下载很多资源。来源:https://developers.google.com/web/updates/2016/03/play-returns-promise

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var playPromise = document.querySelector('video').play();

// In browsers that don’t yet support this functionality,
// playPromise won’t be defined.
if (playPromise !== undefined) {
  playPromise.then(function() {
    // Automatic playback started!
  }).catch(function(error) {
    // Automatic playback failed.
    // Show a UI element to let the user manually start playback.
  });
}

重点:相对于web端,还可以使用库video.js,相对于html5的video,video.js功能更全,兼容性更好,也支持循环播放功能。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯云 Web 超级播放器开发实战
腾讯云 Web 超级播放器 TCPlayer 可实现在手机浏览器和 PC 浏览器上播放音视频流的问题,功能强劲,兼容性好,可以不依赖用户安装 App,就能进行播放。
初九之潜龙勿用
2024/06/20
2760
video.js调用
>  一、总结(点击显示或隐藏总结内容) 一句话总结: 网上有各种细致的现成的代码可以拿来用,没必要自己死专 1、video.js有两种初始化方式? 一种是在video的html标签之中 一种是使用j
kirin
2020/06/22
31.8K0
【技巧】ionic3视频播放
一般视频的展示方式有两种:缩略图和直接播放,分别对应下面两种效果(可参考直播应用和今日头条视频):
IT晴天
2018/08/20
2K0
网页视频autoplay兼容及解决方案
自动播放是指无需经过用户的同意就可以开始播放视频。这包括在video元素使用autoplay属性或者通过JavaScript代码直接调用video元素的play方法。 <video src="/video.mp4" autoplay> 和 videoElement.play();
用户6256742
2024/07/31
4810
网页视频autoplay兼容及解决方案
HTML5的Video标签详细说明手册
引用我翻译文档《在HTML5页面中嵌入音频和视频》中的介绍文字:“当今,在网页上嵌入视频且所有用户不管使用任何浏览器或者操作系统都能看到的唯一可靠方法是使用Flash。这需要Adobe Flash插件,并且结合<object>和<embed>标签。
Java架构师必看
2021/05/21
2.1K0
HTML5的Video标签详细说明手册
视频H5 video最佳实践
随着 4G 的普遍以及 WiFi 的广泛使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 也越来越普遍了,相比帧动画,视频的表现更加丰富,这里介绍一些实践经验。
gnip
2020/10/28
4.7K0
H5 canvas如何载入视频
Canvas可以载入图片,那么Canvas 也可以载入视频。 Canvas加载视频和图片是一样的,使用drawImage,区别就是给一个定 时器不停的抓取每帧的画面,放入Canvas画布里面。 示例1 : 附上demo: <!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=640,user-scalable=0,target-densitydpi=device-dpi"
White feathe
2021/12/08
9340
H5 canvas如何载入视频
css如何实现一个元素高度固定宽度按比例显示?
用padding-top百分比可以实现宽度固定高度按比例展示,现在的需求是对一个video视频的盒子div高度是固定的,宽度如何按比例展示?
蓓蕾心晴
2018/12/19
1.9K0
videojs插件使用「建议收藏」
使用整理:使用主要针对于移动端视频播放,考虑的点:视频显示适配手机宽度;适配定义样式;在微信端,安卓、ios视频空间控件不同,定制等会自动被微信视频控件覆盖;播放过程中定制暂停/播放按钮事件等;播放结束后定制重播、下一个视频事件,读秒播放下一个视频
全栈程序员站长
2022/11/01
10.5K0
走进安卓的重灾区----video
html5的video已经出来很久了。在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差。这几天搞了安卓的兼容,简直是要吐血。所以特意总结了一些强势的坑点。
winty
2019/12/21
1.6K0
videojs播放器插件使用详解
HLS是苹果公司实现的基于 HTTP 的流媒体传输协议,全称 HTTP Live Streaming,可支持流媒体的直播和点播,主要应用在 iOS 系统,为 iOS 设备(如 iPhone、iPad)提供音视频直播和点播方案。
菲宇
2020/04/16
53.5K2
网页背景H5视频自动播放---PC端、移动端兼容问题完美解决方案(IOS、安卓、微信端)
PC端相应简单些,浏览器对<video>标签的兼容还是很好的,但是想要在浏览器中当做Banner视频自动播放就必须设置这些属性来更好地实现;
Tz一号
2020/09/10
3.8K0
HTML5 Audio & Video - 兼容性总结(一)
监听 ended 事件不准确,可以监听 timeupdate 事件,判断 当前播放进度 currentTime 大于等于 总时长 duration 时,就是播放完成;
用户9253515
2021/12/27
1.6K0
Video里的poster填满窗口的方案
用Video播放视频,视频能自适应屏幕大小,但是它的Poster(海报封面)继承了原尺寸比例,无法自动缩放或拉伸,不得技巧的话,很难处理。
IT晴天
2018/08/20
2K0
实现一个Vue3版抖音滑动插件采坑指南!
「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。
用户7413032
2022/03/09
1.4K0
移动端自动播放视频
TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。是一种视频格式,一般用于实时流媒体和广播电视领域。
程序员不务正业
2021/03/03
1.9K0
html5视频常用API接口「建议收藏」
一、虽然有的属性是boolean类型,但仍旧建议按照XHTML书写(属性名=”属性值”)格式,避免出现错误 (下面加粗的属性为常用属性)
全栈程序员站长
2022/09/06
4.1K0
video标签在不同平台上的事件表现差异分析
本文作者:IMWeb 张颖 原文出处:IMWeb社区 未经同意,禁止转载 video标签属性和事件介绍 为了文章的完整性,首先还是列举一下video标签的属性: src :视频的属性 pos
IMWeb前端团队
2018/01/08
2.6K0
复杂帧动画之移动端video采坑实现
本文由 IMWeb 首发于 IMWeb 社区网站 imweb.io。点击阅读原文查看 IMWeb 社区更多精彩文章。 在企鹅辅导品牌页中,我们需要实现一个动画如下: 页面滚动到动画区域,播放动画, 对应动画部分如下: 帧动画当前的实现有以下几种方式: GIF 动画 大家比较熟悉的图片格式 lottie(http://airbnb.io/lottie/) Airbnb 开源项目,通过解析 AE 动画为 json 数据,支持跨平台的动画效果解决方案;lottie 在辅导中已经有实际应用,使用过的同学都表示
用户1097444
2022/06/29
2.4K0
复杂帧动画之移动端video采坑实现
原 HTML5 video视频的plays
作者:汪娇娇 时间:2017年1月17日 问题其实很简单,就是h5的video视频如何在iPhone上不全屏显示,并且自动播放。 测过就知道,只要在video上加一个autoplay属性,就可以在iPad或者Browser上自动播放;给video加一个宽高,就可以在iPad或者Browser上不全屏播放。但在iPhone上用这方法简直免谈。 话不多说,直接说方法。 HTML(加webkit-playsinline和autoplay属性) <video id="player" width="480" heig
jojo
2018/05/03
8550
推荐阅读
相关推荐
腾讯云 Web 超级播放器开发实战
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验