VideoPlayer组件使用常见问题集
Q1:为什么视频不能自动播放?即使勾选了PlayOnAwake属性。
- 首先要确定是不是平台限制,在Web平台下,某些浏览器出于安全性和用户体验考虑,会阻止网页内嵌视频自动播放音频。在这种情况下,即使设置了 playOnAwake 也可能不会自动播放,除非用户有交互行为(如点击页面)。
- 其次检查是不是文件没有完全加载,大体积的视频资源加载较慢,需要等加载完成后才会播放。如果是这个问题,可以通过预加载视频资源或在代码中监听META_LOADED(视频信息加载完成),加载完成后再play视频。这里需要注意监听事件,官方提供了READY_TO_PLAY,但亲测部分平台是无效的。
- 另外检查下节点或父节点的active是否为true,如果节点在其父节点之前激活,可能会导致 playOnAwake 不生效。
- 有些浏览器允许自动播放视频,但如果视频有音音轨也可能会禁止自动播放,因为和前面一样,平台可能会阻止音频自动播放,除非用户有交互行为。实际上大部分情况需要在多平台发布,需要尽量避免第四种情况的发生。
为什么VideoPlayer组件在代码中play不生效?
- 排除资源问题(视频格式和编码不支持),Web平台存在浏览器安全策略限制,会阻止自动播放音、视频。需要在用户交互(如点击)之后才能播放视频。
为什么VideoPlayer play在交互逻辑中,预览视频仍不能播放,往往会停在第一帧或着黑屏?
- 排除资源问题,可能是视频未加载完成,可以监听onMetaLoaded处理播放逻辑;没有在用户交互时同步播放,异步播放会导致视频播放不生效。
为什么在VideoPlayer节点上添加透明组件无效果
- VideoPlayer组件渲染的是底层的WebGL视频纹理,它的透明度控制不同于普通的2D UI节点。CocosCreator中VideoPlayer组件不支持透明度控制
为什么VideoPlayer设置层级无效?
- VideoPlayer 节点与其他节点一样,存在于场景的节点树结构中,受父节点是否激活影响。在Web环境中,VideoPlayer是通过H5原生 元素实现的,这种情况下,视频元素不受Cocos Creator的普通层级控制,而是依赖于DOM层级。VideoPlayer在Creator中默认显示在最上层,但也提供了设置在最下层的方式:1.在项目设置->宏配置->勾选ENABLE_TRANSPARENT_CANVAS;
2.在属性检查器中勾选VideoPlayer的stayOnBottom属性。
需要注意的是,如果VideoPlayer设置在最下层,则无法监听VideoPlayerEvent中的clicked事件,如果需要可以在对应的位置添加一个UI节点用于响应事件。
Q6:如何在VideoPlayer的上层显示UI
Q7:如何实现VideoPlayer在中间层
- CocosCreator中的Mask组件适用于2D Sprite 或者 UI 元素的内容裁剪显示,受限于VideoPlayer渲染机制,Mask就无法再配合VideoPlayer了。不过可以使用另外的方法去结合Mask组件实现,示例同上参照Cocos实例2:实现VideoPlayer奥利奥夹心饼干
Q8:静音后,VideoPlayer播放仍有声音
- VideoPlayer 组件有自己的音频控制选项,如果没有正确配置或者适配全局静音开关,则即使全局静音,其所包含的音频轨道仍会播放。如果有需要,可以在静音逻辑里实现对VideoPlayer音频的控制。
Q9:为什么在手机端无法播放
- 检查是否有视频加载监听事件,注意监听META_LOADED,而不是READY_TO_PLAY