估计踩过微信视频这个坑的,内心都想说上一句:

“神经病啊!”

而微信也终于出了个《H5同层播放器接入规范》,算是正常点了……好了闲话不说,下边进入正题:


1. <video>标签里的内联播放相关属性

微信在video标签上新增了一些x5的私有属性,分别是:

  1. x5-video-player-type
    启用同层播放。取值固定为'h5'

  2. x5-video-player-fullscreen
    是否全屏。取值为'true''false'

  3. x5-video-orientation
    视频方向。取值分别为'landscape''portrait'或者'landscape|portrait',分别对应横屏、竖屏及自动旋转(这个应该用的少)。

不过有一点需要注意的是,这些都是x5的私有属性,仅适用于Android平台。而跟iOS平台相关的,则是这几个属性:

  1. airplay

  2. x-webkit-airplay

  3. playsinline

  4. webkit-playsinline

其中最后两个是iOS平台下的内联播放属性,都是布尔属性,不需要赋值(存在即是true);前两个是iOS平台下airplay的相关属性(说实话我现在也没搞明白为什么网页需要airplay属性),取值为'allow''deny',通常保险起见用'allow'就可以。

2. CSS的属性选择及取值

微信在同层接入规范中提到了object-position这个属性,用于设置视频出现的位置。实际在尝试的过程中,搭配object-fit属性同时使用的效果会比较好。但这两个属性并不是x5私有属性,而是原生的,所以它们同时适用于Android和iOS两个平台。

object-positionobject-fit这两个元素主要的作用是为“可替换元素”设置位置和大小。这里的“可替换元素”,指的是内容不受CSS显式控制的元素,比如比较典型的就是<img><object><video>和表单元素等。

说回视频播放。微信官方的同层接入规范中推荐的做法,是用js动态计算需要的像素值,然后给object-position属性赋值。而我自己尝试了一圈下来,发现object-position这个属性本身支持百分比取值,通常视频默认的值是'50% 50%',也就是居中;全屏视频一般情况下需要贴底放,所以要把取值改成'0 100%'

另一个属性object-fit,有点类似background-size属性,用来设置视频在容器内的填充方式,平时用只需要取值'contain'(保持宽高比填满容器)就可以了。不过这里需要留意的是,全屏下,由于视频一般都不会正好填满屏幕(宽高比差异以及输出分辨率没算顶部标题栏),会在顶部留下一条空隙。这条空隙通常是默认黑色的,如果需要更改颜色,首先要加上个'display:block;'(因为video默认是inline的),然后直接改background-color就OK~

3. 视频封面

<video>标签里有一个与视频封面相关的属性poster,但是在使用中发现性能存在一些问题,在Android端打开视频时(加载),会有跳动的感觉,但是如果去掉,在视频加载时(preload取值'auto',且未用预加载)则会显示空白页面。目前换用了背景图片的方式,但由于视频全屏播放时顶部会有空隙,所以额外加了个background-position: bottom;以及background-size: contain;(取值和视频保持一致),这样设置好的背景在播放视频时就不会漏边了。

4. 设置视频视口大小

同层接入规范里推荐在resize事件回调里设置视频视口大小,我习惯直接设置<video>标签的widthheight,所以在resize回调里加入:

$('video').attr({'width': window.innerWidth + 'px','height': window.innerHeight + 'px'});

就可以了。

5. UA特性探测

同层接入规范里给的,判断是否是同层播放器方法:

  1. 在微信等TBS里通过UA判断X5内核版本来区分,当版版本号>036849表示支持
    UA示例:
    Mozilla/5.0 (Linux; Android 4.4.4; OPPO R7 Build/KTU84P) AppleWebKit/537.36
    (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.8
    TBS/036849 Safari/537.36 MicroMessenger/6.3.27.861 NetType/WIFI
    Language/zh_CN

  2. 在QQ浏览器Android版本中,当浏览器版本>=7.1时开始支持
    UA示例:User­Agent: Mozilla/5.0 (Linux; U; Android 4.4.4; zh­cn; OPPO R7
    Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0
    Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36


参考资料:

  1. 微信 · H5同层播放器接入规范

  2. 京东 · 视频H5のVideo标签在微信里的坑和技巧

  3. 关于如何在微信里面让video不全屏播放

  4. H5微信播放全屏问题

  5. HTML5中的视频音频使用详解

  6. 张鑫旭 · 半深入理解CSS3 object-position/object-fit属性

  7. MDN · object-fit

  8. MDN · object-position

  9. MDN · 媒体相关事件

  10. MDN · 可替换元素

  11. Apple Developer · HTMLVideo​Element

  12. Apple Developer · HTMLMedia​Element

  13. Apple Developer · plays​Inline

  14. Apple Developer · Opting Into or Out of AirPlay

神经病啊!——微信同层播放器接(踩)入(坑)总结相关推荐

  1. 微信H5同层播放器以及视频自动播放

    iOS之前已经解决了视频播放默认全屏,且浮在页面最顶端的问题 playsinline webkit-playsinline 这样就可以在视频之上进行一些操作,实现诸如弹幕.自定义播放控件等的效果. 但 ...

  2. X5同层播放器应用实践

    移动端浏览器中的video元素是比较特别的,早期无论是在iOS还是Android的浏览器中,它都位于页面的最顶层,无法被遮挡.后来,这个问题在iOS下得到了解决.但是对Android的大部分浏览器来说 ...

  3. h5同层播放器的知识

    poster="images/1.jpg":属性规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像.如果未设置该属性,则使用视频的第一帧来代替. preload=&quo ...

  4. 微信公众号教程(18)微信音乐播放器开发 上

    微信音乐播放器开发 原文:http://www.cnblogs.com/imaker/p/6252638.html 一.Html5的audio组件   HTML5 有两个很炫的元素,就是Audio和 ...

  5. [微信音频播放器] html5 audio 制作的微信播放器

    weixinAudio.js 一个简单的微信样式播放器 播放器DOM及CSS是微信里内置的音频播放器的样式,重新创建了控制层js,方便在在公众号,APP等场景使用. 例子 demo 地址 github ...

  6. html仿微信语音播放器,原生js仿微信音频播放器

    今天看个类似微信音频播放器的效果: 简单使用 使用比较简单,直接配置如下: var wx_audio = new WxAudio({ ele: ".wx-audio", title ...

  7. [模拟拖拽] 模拟将一个文件拖拽到一个软件窗口上,实现拖拽操作(微信语音播放器)...

    "金蛇语音播放器" 是我随便写的一个假名.要实现的功能是: 我在网上下载了一个播放器,在自己公司的软件中使用,用来播放微信的语音. 因为版权问题,我不想让别人知道我用的是金蛇播放器 ...

  8. html5 仿微信语音播放器,Material design风格HTML5 audio音频播放器

    jAudio.js是一款基于HTML5 audio的Material design风格音频播放器jQuery插件.该音频播放器可以设置音频播放列表,每首曲子的封面,标题等,还可以控制歌曲的播放和快进, ...

  9. 一个音乐播放器的踩坑实践

    前言 这是这个系列的第二篇文章,和第一篇文章相同的是Demo中的资源文件和一些关键代码是搜索和学习得来的.一是因为没有相关的资源文件,譬如音乐文件.歌词文件.歌曲封面等:二是着实有点力有未逮的感觉(p ...

最新文章

  1. 设计模式系列3-----C++实现命令模式(Command Pattern)
  2. linux用户态驱动--IOMMU(三)
  3. hibernate5.2.10.Final基本配置
  4. UVa1600 PatrolRobot 巡逻机器人(bfs)
  5. python计算n到n+100之间所有奇数的和_Python基本操作题
  6. 【Maven】CentOS7使用Nexus3搭建maven私服
  7. 微型计算机技术及应用 习题答案,微型计算机技术及应用习题答案.doc
  8. [SpringBoot2]web场景_SpringBoot2_SpringMVC自动配置概览
  9. 【转】CANOPEN总线的相关问题点整理分享*****
  10. 面向对象设计之CRC卡片
  11. 微软发布 Azure 物联网安全中心;阿里巴巴在美申请专利,以实现跨区块链统一管理;Google利用足球训练下一代人工智能……...
  12. 《天天数学》连载36:二月五日
  13. centos环境下安装redis
  14. if语句中的赋值与判断
  15. Linux用apt命令安装软件
  16. TP5框架开发 很不错的小程序商城源码!免费开源
  17. 零基础可入门的Python,为什么有些人自学几天就放弃了?
  18. shell 参数的分组读取
  19. Python动态图见得多了?Excel:亦可赛艇!我可是身经百战了
  20. 通过线构造面(C# + ArcGIS Engine 9.2)

热门文章

  1. 安卓手机可以连接斑马系统吗_斑马郝飞:我们一定能在车载系统上打败安卓
  2. Xilinx axi dma driver 驱动构建 (二)
  3. inet_ntop php,inet_ntop()
  4. 数组随机抽取 java_Java利用数组随机抽取幸运观众如何实现
  5. linux教程 nfs,[原创]linux视频教程之NFS
  6. matlab pause
  7. 高速串行总线设计基础(八)揭秘SERDES高速面纱之CML电平标准与预加重技术
  8. FPGA从Xilinx的7系列学起(4)
  9. 使用未编译的XAML动态生成WPF控件
  10. HAProxy客户端IP地址的透传