【兼容性记录】video标签在 IOS 和 安卓中的问题

业务需求背景:由于业务中涉及到有视频播放的内容,所以就使用了 video 标签去做,但是 video 标签在 ios 设备安卓设备中的默认行为不一致,故记录下解决方法(折中办法)。

ios 自动全屏

ios 设备点击播放视频会自动进入全屏(弹层播放),而安卓不会

这个比较好处理,有对应的属性设置,只需要在 video 标签中添加即可和安卓保持一致。

  • playsinline:告诉支持它的浏览器(包括现代的 iOS Safari)在网页内部播放视频。
  • webkit-playsinline:旧版本的 iOS Safari 添加的特殊属性,作用与 playsinline 相同
<video webkit-playsinline playsinline src="xxx" />

ios 设备中无视频头帧

ios 设备没有预览图的情况下不会展示视频头帧,播放前video标签背景是透明的,而安卓自动展示头帧

在这里插入图片描述
这是因为 ios 的保护机制:如果 video 标签未开始播放时不会去加载视频的,所以就没有头帧图。解决方法有几种,一种是设置video poster属性:在页面加载的时候获取视频的首帧图,然后将这个图赋值给poster。另外一种就是简单封装一下,这个问题就 over 了,唯一的缺点就是需要写额外的逻辑。

<!-- 方式一 -->
<video width="100%" controls accept-ranges content-length poster="xxx.png" src="xxx.mp4">

<!-- 方式二 -->
<div class="video-container">
  <div class="video">
      <div class="play-overlay">  
        <button class="play-button"></button>  
      </div>
	  <!-- content-length:提供了文件大小信息,帮助浏览器管理下载过程 -->
      <!-- accept-ranges:允许浏览器分段请求 -->
      <video width="100%" controls accept-ranges content-length src="xxx.mp4">   
    </video>
    <img class="video-cover-image" src="xxx.jpg" />  
  </div>
</div>
<script>
// 为所有的 video-container 增加点击事件监听
document.querySelectorAll('.video-container .play-button').forEach(function(playButton) {
  playButton.addEventListener('click', function() {
    let videoContainer = this.closest('.video-container');
    videoContainer.querySelector('.play-overlay').style.display = 'none';
    videoContainer.querySelector('.video img').style.display = 'none';
    let video = videoContainer.querySelector('video')
    video.play();
  });
});
</script>

安卓设备全屏后退出页面位置出现偏移

安卓设备播放视频后点击全屏,然后点击退出按钮后页面位置会发生偏移(只遇到过向下移的情况)

这个问题来来回回折腾了一两天后面直接将方案改了:网页上点击播放按钮后页面出现一个弹出层进行播放

<a href="javascript:;" class="video_btn" data-mp4="xxx.mp4"></a>
<script>
document.body.addEventListener('click', function(event) {
  if (event.target.matches('.video_btn')) {
    const item = event.target;
    let mp4 = item.getAttribute('data-mp4')
    // 将 mp4 地址赋值给弹出层的video标签
    let html =`<div class="pop_video_bg"></div>
			    <div class="pop_video" style="display: block;">
			    	<div id="pop_vv">
			    	<div style="position:relative;left:0;top:0;display:inline-block;width:100%;max-height:100%">
			    		<video controls controlslist="nodownload" src="xxx.mp4" loop="false" width="100%" height="100%" disablepictureinpicture autoplay style="background-color: black;">
			    			<source src="xxx.mp4" type="video/mp4">
			    		</video>
			    	</div>
			    </div>
			   <div class="close_pv"></div>
			  </div>`
  }
  // 将html放入body中
  ...
});
</script>

倩女幽魂类似
在这里插入图片描述
在这里插入图片描述

### 回答1: 原因是因为iOS设备上的Safari浏览器对于自动播放的限制比较严格,在使用video标签播放视频时,如果没有用户手动触发播放行为,视频将无法自动播放。 而在使用Vue的iOS点视频链接可以播放,是因为很可能是通过JavaScript的方式触发了播放行为。这是因为JavaScript可以绕开Safari浏览器对于自动播放的限制,但是需要使用相应的API进行调用。 如果想要使用video标签iOS设备上自动播放视频,可以使用video标签的playsinline属性或者给其添加webkit-playsinline属性,并且将muted属性设置为true,这样即使没有用户手动触发播放行为也能够自动播放。但是需要注意的是,这种方法可能会被苹果官方视为违规,从而导致App Store审核不通过。 因此,对于iOS设备上的视频播放,我们需要综合考虑使用video标签自动播放、JavaScript触发播放以及苹果官方推荐的播放方式。最终选择合适的方法,以确保视频能够在iOS设备上正常播放。 ### 回答2: Vue无法直接通过video标签播放iOS点播视频链接的问题,可能是因为iOS对于视频播放有一些限制。苹果公司为了保护用户的隐私安全和节省用户的流量,iOS设备在播放视频时候对于视频源有一些限制。 为了解决这个问题,可以尝试以下几种方法: 1. 使用Vue的插件或者第三方库。在Vue的官方插件库或者第三方开发者社区,可能已经有一些解决iOS视频播放问题的插件或者库。可以尝试寻找并安装其合适的插件或者库,根据其文档进行配置和使用,以实现在iOS上播放视频链接。 2. 使用可兼容iOS的视频播放组件。除了video标签,还可以尝试使用其他可兼容iOS的视频播放组件,例如HLS.js、Video.js等。这些组件在移动设备上有更好的兼容性和稳定性,可以帮助解决iOS上视频播放的问题。 3. 使用WebView来播放视频。如果以上两种方法都无法解决问题,可以考虑在Vue应用使用WebView来播放视频。WebView是一个可以加载网页和播放视频的组件,可以通过Vue组件或者指令的方式在Vue应用集成。通过WebView可以达到兼容iOSAndroid的视频播放效果。 需要注意的是,以上方法仅仅是一些尝试的方向,具体的解决方法还需要根据具体的项目需求和开发环境来确定。如果还无法解决问题,建议查阅相关的技术文档和社区讨论,或者咨询专业的开发人员。 ### 回答3: 根据提供的信息,问题可能出在video标签没有设置正确的视频源或者视频源不兼容。Vue和iOS本身并不会对视频播放存在冲突,video标签在Vue是用来显示和播放视频的常用元素之一。所以我们首先需要确保video标签的视频源设置正确。 一种可能的错误是视频源格式与video标签不兼容。video标签支持多种格式的视频源,如MP4、WebM、Ogg等。请确认视频源是以支持的格式之一来提供的。如果视频源是以其他格式提供的,可以尝试将其转换为支持的格式再重新传入video标签。 另一种可能是视频源的路径或URL设置不正确。在Vue使用video标签播放视频时,需要确保视频源的路径或URL正确指向到视频文件。请检查视频源路径或URL是否正确,并确保它们可以在iOS设备上正常访问。 另外,还可能存在其他引起视频无法播放的问题,比如网络连接问题、视频文件损坏等。在解决问题之前,可以尝试使用其他视频文件测试video标签是否能够正常播放,以确定问题是否出在视频文件本身。 总结起来,要解决Vue使用video标签无法播放的问题,需要确保视频源的格式正确、路径或URL设置正确,并排除其他可能引起问题的因素。如果问题仍然存在,可以考虑使用其他方法或组件来实现视频播放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

画一个圆_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值