2017年是短视频应用火爆的一年,在短视频应用中,必然会遇到的一个问题就是用户在反复观看同一个视频的时候,如何减少网络流量的使用。
如果用户第一次完整观看了视频,其实整个视频的内容已经进行了一次下载,如果重复观看需要重复下载的话,会导致流量成倍的上升。
在第一次观看时,能否把视频数据进行cache?大致有两种方式:
- 保存在内存中,解码播放的数据不释放,无论是重复观看还是往回seek,都可以快速提供数据;
- 解码播放后的内存数据cache到硬盘,然后释放掉内存数据。下次播放时,从本地读取,命中则不发起网络请求。
相比而言,内存cache实现难度最低,但是内存开销问题显著。金山云多媒体SDK采用了第二种方案。
1. httpcache的作用
一般的视频播放流程为由播放器直接向视频服务器发起数据请求,然后服务器源源不断的想播放器发送数据供播放器持续播放直到播放结束,当再一次播放时需要重复这一过程,从而每次播放都会产生网络流量。
ksy_http_cache
- 播放器向cache模块发起请求;
- cache模块向视频服务器发起请求;
- 视频服务器将数据发给cache模块;
- cache模块将数据发送给播放器;
此处视频数据不再是直接由视频服务器到播放器,而是中间经过了一个cache模块的中转,这样我们就可以在cache模块中对数据进行操作,无论是保存到本地还是直接转发,都可以在这个模块中进行。
而对于播放器来说,它访问的已经由原来的视频服务器变为cache模块,只要在它需要数据时,cache模块能够迅速完整的提供相应的数据就可以了,而不再需要关心数据从而来。
2. http代理的实现
3. 本地缓存文件的管理
-
播放器可能只播放一部分就退出了,在播放过程中会有手动改变播放进度的情况,这样都会导致缓存的文件不完整;
所以需要另外一个索引文件来记录当前缓存文件的状态,需要记录缓存文件的总大小、已经缓存的数据位置和大小。 -
缓存文件的管理;
包括已缓存文件查询和删除,缓存进度的查询,缓存文件总大小的管理(防止超出可存储大小)等。
5. 其他需要考虑的问题
- 错误处理;
- 播放器所支持的一些网络相关设置,http代理也应该支持;
- iOS应用在长时间处于非活动状态(如切后台或锁屏)时,本地http服务会失效,如何将其重启;
金山云SDK相关的QQ交流群:
- 视频云技术交流群:574179720
- 视频云Android技术交流:6200036233