android x5 内核 webview 同层播放踩坑
- 最近在做
混合APP
的视频播放,是基于x5 内核
的,踩了不少坑,特此记录下。
介绍
- 微信、
qq
等使用的都是x5内核 webview
- 腾讯提供了对应的
tbs sdk
使用x5内核
tbs sdk
提供了对x5 内核 webview
的封装tbs sdk
并未内置x5内核
,而是通过远程下发的形式下载的- 若下载失败,会启用
android
自带的webview
x5 内核
会在首次加载webview
时尝试下载x5内核
有自己的下发灰度规则https://x5.tencent.com/docs/version_plan.html
- 默认情况下,
x5 内核
只会在wifi
下进行下载和更新非wifi
场景需要设置QbSdk.setDownloadWithoutWifi(true)
##
同层播放
解释
- 正常情况下,
H5 video
播放时拥有最高层级,无法在其上覆盖任何图层 - 通过
x5
的同层播放,可以实现在video
上覆盖其它图层- 例如:弹幕、自定义的控制层等
如何开启
- H5
video
添加x5-video-player-type='h5-page'
属性即可- 不要与
x5-playsinline
同时存在,可以与disablepictureinpicture、playsinline、webkit-playsinline、x-webkit-airplay="allow"
等共存- 因为
x5-playsinline
是指定native
播放,其优先级大于h5-page
- 因为
- 不要与
- 需要
webview
开启硬件加速AndroidManifest.xml
中添加android:hardwareAccelerated="true"
常见问题
视频有声音无画面
- 检查是否开启硬件加速
- 检查视频解码库是否下载成功
- 检查网络情况
- 检查是否存在网络黑/白名单机制
- 视频编码是否有问题(部分
非 aoc h.264
格式的mp4
会存在此问题,转换为aoc h.264
格式即可解决)
点击全屏卡死
- 检查
webview
的standardFullScreen
的值是否为true
,并且没有实现WebChromeClient的onShowCustomView
方法 - 若使用同层播放,点击全屏后,则会进入
native
的全屏播放器,可能存在不需要的功能,例如分享;此部分无法自定义- 解决方法:
- 可使用
css
模拟全屏(设置宽高100%
)规避此问题 - 特殊场景,可屏蔽全屏按钮
video::-webkit-media-controls-fullscreen-button { display: none; }
- 可使用
- 解决方法:
未播放时,快速点击视频左侧、右侧区域快进时,播放按钮图标会丢失
- 开启同层播放,并在其之上添加透明蒙层,点击时隐藏蒙层并播放视频
如何查看当前webview
使用的x5 内核
版本
- 原生可调用
QbSdk.getTbsVersion
获取内核版本号 H5
则可进入webview
,跳转http://soft.imtt.qq.com/browser/tes/feedback.html
,页面显示的非000000
数字即为内核版本H5
可检查navigator.userAgent
字符串中TBS/
后面的 6 位数字
如何调试、升级 X5 内核版本
- 访问
http://debugtbs.qq.com
,进入x5内核
调试页面- 检测是否安装
x5 内核
- 查看内核版本
- 可在线升级
x5 内核
版本 - 安装本地
x5 内核
- 开启内置
vconsole
- 检测是否安装
参考资料
- 文档
https://x5.tencent.com/docs/access.html
- 如何加载 X5 内核类
https://x5.tencent.com/tbs/technical.html#/list/sdk/916172a5-f14e-40ed-9915-eaf74e9acba8/%E5%8A%A0%E8%BD%BDX5%E5%86%85%E6%A0%B8%E7%B1%BB
- 接入文档
https://x5.tencent.com/tbs/guide/sdkInit.html
SDK
接入问题https://x5.tencent.com/tbs/technical.html#/sdk
PS
- 后面还会介绍其余部分,如果觉得还行,可以给个赞哦 ✨
- 个人
github
https://github.com/BryanAdamss,也总结了一些东西,欢迎 star- 基于 canvas 的绘图板drawing-board
- 前端入门 demo、最佳实践集合 fe-awesome-demos
- 一个自动生成别名的
vue-cli-plugin
https://www.npmjs.com/package/vue-cli-plugin-auto-alias