写了一年小程序,每天接受数万付费用户的考验,踩过小程序的坑数不胜数。先写一下视频篇,写一些会影响到用户正常看视频功能和影响业务主体流程的坑。
1.一些低端设备无法播放高清视频 1080p
需要接入转码,提供2种分辨率的视频。如果检测到播放高清视频报错,自动切入低清视频。也有可能高清视频播放不出来,也检测不到报错,所以还需要一个按钮来手动切换标清视频。问题现象是在有些设备直接播不出来,在有些设备上是有声音但黑屏无图像,可能会报一些类似MEDIA_ERR_DECODE(-4003,-1)这样的报错。
2.同层渲染问题
小程序video已经支持同层渲染,但是在某些版本微信某些设备上,比如某些三星设备,同层渲染可能失效,导致在视频上面的按钮看不到。所以对于一些重要的按钮功能。可以做一些彩蛋式的操作:比如连续点5下屏幕,触发切换标清的逻辑。避免按钮没显示出来用户播放不了视频也切换不了标清。
3.视频播放到一半直接调用ended事件
可以加一个检测,如果调用ended事件的时候,最大播放进度离视频长度还有一段距离。可以尝试触发切换标清的逻辑接着播放。
4.iOS视频播放黑屏
iOS用户偶现播放视频的时候会出现播放不了黑屏,可能会报MEDIA_ERR_NETWORK。这个时候把视频的链接给用户,直接在微信中播放大概率也播放不了。 这个问题很大程度跟用户网络有关系,可以切换网络或者还原网络试一下,有时候会生效。比如国外播放我们国内的视频,就有很多用户会出现问题。
5.iOS播放结束自动重播不调用ended事件
iOS用户偶现播放到结束的时候不会调用ended事件,而是会回到开头,重新播放。对于视频播放结束之后需要做一些操作的程序,就要做一些特殊的检测,比如当前的最大进度已经到了视频长度后,进度又突然变到了0。就可以手动结束视频播放,调用结束回调函数。
6.视频卡在最后几秒钟
部分Android用户视频快结束的时候会一直卡在最后几秒钟过不去。针对这种情况,在播放快要结束的时候增加一个定时器。到定时器触发的时候,视频还没有调用ended回调,就手动去调用一下。
7.其他报错
用户设备存储空间剩的很少的时候,视频播放也有可能会有问题,可能会有MEDIA_ERR_DECODE(-4999,-1)这样的错误,经常出现在一些华为的机器上。实际上在设备存储空间很少的时候,小程序的其他很多功能都会受到影响,包括网络请求,资源下载等。
还有某些时候视频没有声音之类的,可以用重启大法。
结语
实际填坑的时候根据业务场景可能要考虑的更多,比如拖动进度条之类的会造成的影响之类。
后续还会更新微信小程序其他方面的坑,原则还是只提供大概思路。