ksyhttpcache_ios
ksyhttpcache_ios copied to clipboard
正在缓存的时候调用stopServer,再播放视频会导致失败
ksyhttpcache_ios还有一个问题,使用你们的Demo也是必现的,在缓存的时候进入后台调用stopServer并暂停播放器,回到前台时调用startServer,然后再播放视频,必定出错,播放失败.
你们的Demo是开启后台任务的,不开启后台任务,调用stopServer,就会有这个问题
具体在我们的demo上如何重现呢,需要修改那部分的代码,然后如何操作呢?
解决了么?我现在开启后台任务,APP退到后台,如果没有被系统杀掉,再次进入APP,本地的代理会挂掉,播放也会有问题
@callmewenxi
@mayudong1 重现步骤就是,对于代理,找applicationDidEnterBackground:中调用stopServer,applicationWillEnterForeground:时调用startServer, 对于播放器:进入后台时暂停播放,进入前台恢复播放器播放,就会出现问题
不过后来我觉得是ijk播放器的问题,因为数据是能继续下载的,且能下载完,但是播放器就是播放失败,安卓端使用别的库实现缓存,也遇到了类似的问题,根据他们的说法,视频数据是能给到播放器的,但是播放器认为数据有问题,最后没有再深究了,用了些取巧的方法解决了
@yaoxc 我现在就是进入后台时开启一个120s的后台任务,任务结束的时候才调用stopServer,这样不会被系统杀掉App的, applicationWillEnterForeground:的时候再调用startServer,基本没什么问题.
@mayudong1 还有一个问题,就是网络视频当次缓存后,如果我点击重播,其实是需要联网才能播放的,通过抓包发现,貌似是拿视频信息(moov)? 不知道你们内部是怎么实现的,但是这样感觉不合理,都已经有本地缓存了,为什么还要发一次请求?
这个确实是个问题,每次播放时都会先进行一次HTTP的HEAD请求,来获取文件的长度,也是为了防止远端文件有变化
有个取巧的办法可以在播放某个URL时,先判断该URL是不是已经缓冲完毕了,如果已经缓冲完毕就直接去播本地的文件,传给播放器本地URL
我们后续看看这种情况应该怎么处理吧
恩,我现在就是这么处理的. 不过我觉得没必要去请求,因为本地已经缓存了,远端的变化就不必考虑了.
@callmewenxi 可以把这部分的代码截图共享下么?我设置了,发现还是有问题,本地代理服务还是会频繁挂掉,不知道那个地方的纰漏,求帮助