H5 video标签 全屏播放各属性测试+兼容处理记录

video标签真是个神奇的属性,每次处理兼容都搞得人很头疼,H5移动端视频处理个人理解可以拆分为单独的一块,不同与其他H5功能,好比canvas一样,往小了看是简单的小视频播放(快手、抖音之类)。进一步可以演变为播放器嵌套,比较有名的例如B站开源的flv.js,之前笔记详情使用过,解决了flv格式文件video标签不支持播放问题。再进一步可以演化为视频直播类H5,16年末的时候看过上海一家直播类H5招聘要求,三年以上视频直播类相关经验起薪20k~

本次日记分享需全屏兼容合机型播放,相比之前做过兼容全机型不全屏播放,各端兼容调试时间减少了不少,算是个填坑的过程吧!记录在这,下一个人再做的时候可以节约大量跳坑时间

正常video标签:
           < video width = "" height = "" >
                < source src = "myvideo.mp4" type = "video/mp4" ></ source >
                < source src = "myvideo.ogv" type = "video/ogg" ></ source >
                < source src = "myvideo.webm" type = "video/webm" ></ source >
                < object width = "" height = "" type = "application/x-shockwave-flash" data = "myvideo.swf" >
                     < param name = "movie" value = "myvideo.swf" />
                     < param name = "flashvars" value = "autostart=true&amp;file=myvideo.swf" />
                </ object >
                当前浏览器不支持 video直接播放,点击这里下载视频: < a href = "myvideo.webm" >下载视频</ a >
           </ video >

一般简化:
          < video src = "" ></ video >
需要什么属性自己往上加,现有项目中用到的属性如下:
< video
  id = "videoALL"
  src = "video/01.mp4"
  poster = "images/1.jpg" /* 视频封面 */
  preload = "auto"
  webkit-playsinline = "true" /* 这个属性是ios 10 中设置可以
                     让视频在小窗内播放 也就是不是全屏播放 */
  playsinline = "true"  /* IOS微信浏览器支持小窗内播放 */
  x-webkit-airplay = "allow"
  x 5- video-player-type = "h5"  /* 启用H 5 播放器 , 是wechat安卓版特性 */
  x 5- video-player-fullscreen = "true" /* 全屏设置
                     设置为 true 是防止横屏 */>
  x5-video-orientation="portraint" /*播放器支付的方向,
                     landscape横屏,portraint竖屏,默认值为竖屏*/
  style="object-fit:fill"

loop="loop"/*循环播放(不写不循环)*/

controls="controls" /*显示控制按键(不写不显示)*/

</ video >

之前的全机型不全屏播放属性配置如下,我记得是仿照的JD某流媒体,附上当时笔记配图一张:
<video id="test" autoplay="" class="video-js jd-video" x5-video-player-type="h5" webkit-playsinline="" playsinline="" controls="" poster="sb20161211233221.png">
        <source type="video/mp4" src=" ">
    </video>




日记分享详情视频标签配置属性如下:

DOM:
< video class = "theVideo hide" preload = "auto" type = "video/mp4" webkit-playsinline = "true" playsinline = "true" x 5- video-player-type = "h5" x 5- video-player-fullscreen = "portraint" loop = "loop" onerror = " window .VIDEO_FAILED=1"></video>

CSS:
.theVideo {
      display : block ;
      width : 100 % ;
      height : 100 % ;
      object-fit: fill;
}
此配置效果如下:


此方法会导致video样式拉称
后来查API发现 是因为   object-fit: fill;导致
  object-fit: fill;( 被替换的内容大小可以填充元素的内容框。 整个对象将完全填充此框。 如果对象的高宽比不匹配其框的宽高比,那么该对象将被拉伸以适应。
跟产品对照了下抖音的H5分享分享,分享出去的视频为适应手机屏幕部分被截取
于是改为
.theVideo {
      display : block ;
      width : 100 % ;
      height : 100 % ;
      /*object-fit: fill;*/
      object-fit : cover ;
}
  object-fit : cover ;( 被替换的内容大小保持其宽高比,同时填充元素的整个内容框。 如果对象的宽高比与盒子的宽高比不匹配,该对象将被剪裁以适应。
效果如下:


嗯,还是拉称的显瘦啊!但是我们要 -=- 务真务实,实事求是


说另一个问题
video标签点击暂停事件,起初测试阶段未发现该兼容BUG,后来android上点击可以暂停,ios上点击无效果,一般bug都是反过来的,可能video标签有它自己的想法吧!
debug阶段:
1.怀疑定位层级问题导致底部video没有触发,依次增加层级直到最高z-index元素video-play被覆盖,点击事件依然无法执行
2.怀疑js未能获取DOM,js监听dom操作无alert弹出,改为后台交互数据加载完成后再次监听点击事件,依然无效果,再改为dom增加点击事件依然无效果。
3.解决方案-后来反思:用户首次点击 video-play元素可以操纵video播放,所以增加第三方元素覆盖video标签范围区域,监听此标签用户操作事件控制video播放/暂停

         
object-fit属性参考可查看如下网址个人感觉写的比较明细:


### 苹果设备上 H5 页面中 `video` 标签播放视频的兼容性解决方案 对于苹果设备上的 HTML5 `<video>` 标签播放视频存在的兼容性问题,主要集中在防止 iOS 默认全屏播放以及确保内联播放正常工作。为了使视频能够在苹果设备上顺利播放并保持良好的用户体验,建议采用如下配置: #### 使用合适的属性设置 在 `<video>` 标签中加入特定于 WebKit 浏览器(如 Safari)的属性可以帮助控制视频的行为方式。这些属性能够有效避免iOS系统下的自动全屏现象,并允许视频以内联模式播放。 ```html <video id="video" playsinline="true" <!-- 启用内嵌播放 --> webkit-playsinline="true" <!-- 针对旧版WebKit浏览器启用内嵌播放 --> x-webkit-airplay="allow" <!-- 支持AirPlay功能 --> airplay="allow" <!-- 明确声明支持AirPlay --> src="./video.mp4" <!-- 设置视频源文件路径 --> poster="./poster.png"> <!-- 设置封面图片 --> </video> ``` 上述代码片段展示了如何利用多个属性来优化苹果设备上的视频播放体验[^1]。值得注意的是,在较新的版本中仅需指定 `playsinline=true` 即可满足大部分场景的需求;而对于更早版本,则可能还需要额外添加 `webkit-playsinline=true` 来确保兼容性[^3]。 此外,考虑到不同平台间的差异性和未来可能出现的变化,推荐开发者密切关注官方文档和技术社区内的最新动态,以便及时调整策略以应对新情况的发生。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值