基本介绍
阿里云播放器提供了边播边缓存功能, 主要可用于省流量 (断网可播), 加快二次起播速度, 加快循环播放速度. 如果开启此功能, 用户在完整播放完一次视频后, 视频将会被缓存到本地. 再次播放的时候, 如果本地缓存已经存在, 则会直接播放本地缓存, 避免走网络流量. 同时, 本地视频打开速度比网络文件打开要快, 起播速度也会有提升.
https://www.atatech.org/articles/131370#1 接口使用
AliyunVodPlayer 提供了以下接口去配置此功能:
Android 接口:
public void setPlayingCache(boolean enable, String saveDir, int maxDuration, long maxSize)
iOS 接口:
-(void) setPlayingCache:(BOOL)bEnabled saveDir:(NSString*)saveDir maxSize:(int64_t)maxSize maxDuration:(int)maxDuration;
这四个参数的含义如下:
参数 | 功能 | 备注 |
---|---|---|
enable | 是否开启此功能。 | 当 enable 为 false 时,将关闭此功能。当 enable 为 true 的时候,不一定能够缓存文件。能否缓存,需要根据另外的三个参数决定。 |
saveDir | 缓存文件保存的路径。 | 当视频能够被缓存时,将会保存到这个文件夹下面。文件名不是原始的文件名。 |
maxDuration | 单个文件的最大时长,单位:秒。 | 如果某个文件的时长超过此值,即使 enable=true,也将不会被缓存。 |
maxSize | 整个文件夹缓存总大小的最大值,单位: MB。 | 如果文件夹中文件总大小将要超过此值,将会删掉最旧的文件,直到有足够的空间去缓存新的视频文件。 |
https://www.atatech.org/articles/131370#2 Android 使用示例
- AliyunVodPlayer aliyunVodPlayer = new AliyunVodPlayer(this);
- String sdDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test_save_cache";
- aliyunVodPlayer.setPlayingCache(true, sdDir, 60 * 60 /* 时长, s */, 300 /* 大小, MB*/);
当完整播放完一次视频后, 将在设置的 dir 目录中看到缓存的文件, 截图如下:
https://www.atatech.org/articles/131370#3 iOS 使用示例
- NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *docDir = [pathArray objectAtIndex:0];
- [_aliPlayer setPlayingCache:YES saveDir:docDir maxSize:3000 maxDuration:100000];
https://www.atatech.org/articles/131370#4 使用场景
有两个比较实用的场景:
1. 节省流量: 播放完缓存在本地后, 如果再次播放视频, 则不需要耗费流量, 可以大大节省用户流量. 对那些需要重复播放同一个视频的场景比较有用.
2. 加快循环播放速度以及加快起播速度, 如果视频已经缓存在本地, 则循环播放会从本地读取视频, 而不是再次从网络上读取, 这样能够加快循环播放的速度. 比较适合短视频场景.
3. 同时对长视频不太建议使用边播边缓存的功能.
https://www.atatech.org/articles/131370#5 功能注意点
https://www.atatech.org/articles/131370#6 1. 以下情况将不会被缓存
播放过程中拖拽 (seek). 如果播放过程中有拖拽动作, 此次视频将不会被缓存.
没有播放完就停止播放 (stop). 播放中 stop, 导致数据没有完整被获取, 此次视频将不会被缓存.
无法获取到视频文件大小的. 如果获取不到视频文件的大小, 将无法判断是否超出 maxSize, 默认将不会被缓存. 如果不判定视频文件大小, 可以将参数 MaxSize 设置成 - 1, 那么播放器内部不会对缓存大小进行判定. 缓存功能只有在: 用户完整的播放完一次视频的时候才会有缓存文件.
https://www.atatech.org/articles/131370#7 2. 缓存的文件名不可更改
缓存生成的文件名是匹配视频的唯一标志. 如果文件名被修改, 那么下次播放将找不到对应的缓存文件, 将还会重新读取网络数据.
https://www.atatech.org/articles/131370#8 3. 淘汰机制
如果设置的最大缓存大小是 100M, 此时缓存超过了你设置的最大空间后, 则会把最早缓存下来的视频进行删除, 保证最新视频能够缓存下来.
来源: https://yq.aliyun.com/articles/689890