H5 video 视频在QQ、微信中播放视频不全屏

H5 video 视频在QQ、微信中播放视频不全屏

HTML5下的音视频播放是通过<video>标签的方式进行,通常,浏览器内核不会对页面<video>标签指定的播放器进行劫持,但在一些应用中,如UC浏览器、QQ浏览器提供了自己的内核(手机淘宝等APP使用了UC内核,QQ、微信等APP的内置浏览器使用了QQ浏览器内核),这些APP中进行视频播放时,会将<video>标签解析替换成自己的播放器,进行播放器劫持。外在的表现是点击播放视频时,新打开一个页面全屏播放视频。

现在需求来了,要做一个直播,并且希望视频在当前页面内直接播放,而不是跳转页面,如花椒直播的分享页。

实现方法:

在<video>标签中增加属性playsinline 、webkit-playsinline(这个属性是iOS 10中设置可以让视频在小窗内播放)。 另外,在微信、QQ等使用X5内核浏览器中,还可以使用x5-playsinline(适应微信等X5内核)、x5-video-player-type、x5-video-player-fullscreen、x5-video-orientation等属性来控制全屏,示例如下:

<video
  id="my-video" 
  src="test.mp4" 
  controls = ""    /*禁掉默认控制条-- 必要*/
  poster="poster.jpg"  /*视频封面*/
  preload="auto"  /*预加载*/
  webkit-playsinline="true"  /*iOS 10中设置可以让视频在小窗内播放*/
  playsinline="true"
  x-webkit-airplay="allow"  /*启用AirPlay支持*/
  x5-video-player-type="h5"  /*对于x5内核声明启用同层H5播放器*/
  x5-video-player-fullscreen="true"   /*全屏设置设置为 true 是防止横屏*/
  x5-video-orientation="portraint"  /*播放器的方向,默认为竖屏*/>
 </video>

隐藏控制条的实现(播放器非劫持状态)

由于iOS及Android会对未标记controls属性的<video>标签启用系统默认的控件,由此,还需要使用CSS来对这些默认控件进行隐藏,如下:

*::-webkit-media-controls-enclosure {
  display:none !important;
  -webkit-appearance: none;
}
*::-webkit-media-controls-panel {
  display: none!important;
  -webkit-appearance: none;
}
*::-webkit-media-controls-panel-container {
  display: none!important;
  -webkit-appearance: none;
}
*::--webkit-media-controls-play-button {
  display: none!important;
  -webkit-appearance: none;
}
*::-webkit-media-controls-start-playback-button {
  display: none!important;
  -webkit-appearance: none;
}
*::-webkit-media-controls {
display: none!important;
-webkit-appearance: none;
}