Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

正在缓存的时候调用stopServer,再播放视频会导致失败 #17

Open
callmewenxi opened this issue Nov 2, 2017 · 9 comments
Open

Comments

@callmewenxi
Copy link

ksyhttpcache_ios还有一个问题,使用你们的Demo也是必现的,在缓存的时候进入后台调用stopServer并暂停播放器,回到前台时调用startServer,然后再播放视频,必定出错,播放失败.

你们的Demo是开启后台任务的,不开启后台任务,调用stopServer,就会有这个问题

@mayudong1
Copy link
Contributor

具体在我们的demo上如何重现呢,需要修改那部分的代码,然后如何操作呢?

@yaoxc
Copy link

yaoxc commented Nov 17, 2017

解决了么?我现在开启后台任务,APP退到后台,如果没有被系统杀掉,再次进入APP,本地的代理会挂掉,播放也会有问题

@yaoxc
Copy link

yaoxc commented Nov 17, 2017

@callmewenxi

@callmewenxi
Copy link
Author

@mayudong1 重现步骤就是,对于代理,找applicationDidEnterBackground:中调用stopServer,applicationWillEnterForeground:时调用startServer,
对于播放器:进入后台时暂停播放,进入前台恢复播放器播放,就会出现问题

不过后来我觉得是ijk播放器的问题,因为数据是能继续下载的,且能下载完,但是播放器就是播放失败,安卓端使用别的库实现缓存,也遇到了类似的问题,根据他们的说法,视频数据是能给到播放器的,但是播放器认为数据有问题,最后没有再深究了,用了些取巧的方法解决了

@callmewenxi
Copy link
Author

@yaoxc 我现在就是进入后台时开启一个120s的后台任务,任务结束的时候才调用stopServer,这样不会被系统杀掉App的, applicationWillEnterForeground:的时候再调用startServer,基本没什么问题.

@callmewenxi
Copy link
Author

@mayudong1 还有一个问题,就是网络视频当次缓存后,如果我点击重播,其实是需要联网才能播放的,通过抓包发现,貌似是拿视频信息(moov)?
不知道你们内部是怎么实现的,但是这样感觉不合理,都已经有本地缓存了,为什么还要发一次请求?

@mayudong1
Copy link
Contributor

这个确实是个问题,每次播放时都会先进行一次HTTP的HEAD请求,来获取文件的长度,也是为了防止远端文件有变化
有个取巧的办法可以在播放某个URL时,先判断该URL是不是已经缓冲完毕了,如果已经缓冲完毕就直接去播本地的文件,传给播放器本地URL
我们后续看看这种情况应该怎么处理吧

@callmewenxi
Copy link
Author

恩,我现在就是这么处理的.
不过我觉得没必要去请求,因为本地已经缓存了,远端的变化就不必考虑了.

@yaoxc
Copy link

yaoxc commented Nov 23, 2017

@callmewenxi 可以把这部分的代码截图共享下么?我设置了,发现还是有问题,本地代理服务还是会频繁挂掉,不知道那个地方的纰漏,求帮助

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants