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