开发中遇到问题及解决建议
一、弱网下下载压缩资源包和播放音频的问题
1.资源包下载问题:之前绘本出现过一个问题,就是用户明明下载完成了一本绘本,点击去后发现图片和音频资源却是没有的。
复现过程:用Charles搭建弱网环境,并打断点调试,发现请求过程并无异常,没有出现请求过程中的错误,正确的走了下载完成的回调方法,并且没有出现错误码
然后发现下载完成后还有个解压的操作,发现数据解压失败了,只是之前没有加入解压是否成功的判断
结论:无论是下载库的原因还是其他得原因,成功的走了下载完成可能并不代表资源下载成功,最好加一个判断,以确认资源没有损坏,特别是压缩包
2.弱网下AVPlayer音频播放问题:之前在单词、随堂测等播放在线音频的时候,群里不少反馈说点击播放没有声音,具体过程是点击播放按钮后出现加载动画,然后加载动画很快就消失了,就是播放不出声音,也没有播放失败的提示
复现过程:搭建弱网环境,发现音频是可以播放的,只不过要等一会儿,而用户比较着急,当时的播放按钮没有做是否是同一个资源链接的判断,所以用户每次点击都是重新开始加载,但问题是加载动画为何在没有播放出声音前就消失了,后来发现是状态监控的一个问题,就是AVPlayer在哪个状态下才算真正开始播放音频,一般都认为是在AVPlayerStatusReadyToPlay
这个状态时开始播放,所以在这个时候做了开始播放的回调或通知,但在网络比较弱的时候这样是不准确的,还需要做其他的处理
结论:其实AVPlayer在AVPlayerStatusReadyToPlay这个状态的时候的确开始了播放,这个状态也确实是开始播放的状态,之所以在网络不好的情况下进入这个状态的时候不能播放出声音是因为缓冲不足而暂停了播放,之后就是一直在加载,直到缓冲达到能够播放的状态才能继续播放
而网络环境好的情况下一个几分钟的音频完全缓冲完毕基本也就是2、3秒的事,咱们的音频一般都是十几秒,基本很快就加载完了,所以不会出现上述的问题,但在弱网下最好做下如下处理 image.png
监听缓冲状态(监听loadedTimeRanges属性,AVPlayerItemPlaybackStalledNotification无效),缓冲中判断一下是否达到了播放状态
如果达到了就播放,并通知开始播放
如果达不到就继续回调或通知外部执行加载状态
关于AVPlayer的疑问
1.有些服务器获取不到资源时长
2.如果音频还没有缓冲完毕,此时断网重连,会走播放完成的通知,但此时音频并没有播放结束