阿里云播放器快速实现全屏秒播主要通过三个方式实现(首帧图和播放的首帧画面一致、播放器预加载和边播边缓存)。本方案在WIFI环境下可以做到平均300毫秒左右的起播速度。

封面策略

  • 显示视频的时候先显示封面,然后再播放视频,如果保证封面图和第一帧画面一致,则用户感觉不到是封面的存在。这样就造成了视频秒开极快的假象。
  • 在快速滑动的时候仅仅只请求封面图。
  • 在用户滑动到一半的时候,展现预先下载的一个封面图。

预加载视频策略

创建多个播放器

由于播放器不支持边播放边准备的功能,所以实现预加载的功能需要创建多个播放器。

播放器4.5.0版本之后添加了列表播放器AliListPlayer,列表播放器内部实现了预加载的功能。具体操作,请参见播放器功能使用
  • 列表播放器只支持STS+VID、视频URL两种播放器方式。
  • 列表播放器不支持M3U8格式的视频,如有需要可以创建多个AliPlayer自行实现预加载。

启用边播边缓存功能

边播边缓存功能是在视频被成功播放后,文件会缓存到本地,再次播放视频时会直接使用本地缓存文件,不再走网络请求。

可设置下载路径、最大下载数据(单位:MB)、单一视频最大允许下载的时长(单位:秒)。

 //Android代码示例
 //设置缓存目录路径。在创建播放器类,并在调用prepare方法之前设置。
  String sdDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test_save_cache";   aliyunVodPlayer.setPlayingCache(true, sdDir, 60 * 60 /*单个文件的最大时长, s */, 300 /*缓存目录文件的总大小,MB*/);
//比如:maxSize设置500M时缓存文件超过500M后会优先覆盖最早缓存的文件。maxDuration设置为300秒时表示超过300秒的视频不会启用缓存功能。

//iOS代码示例
//设置缓存目录路径
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [pathArray objectAtIndex:0];
//在创建播放器类,并在调用prepare方法之前设置。比如:maxSize设置500M时缓存文件超过500M后会优先覆盖最早缓存的文件。maxDuration设置为300秒时表示超过300秒的视频不会启用缓存功能。
[self.aliPlayer setPlayingCache:YES saveDir:docDir maxSize:500 maxDuration:300];
说明
  • 缓存功能仅针对被完整播放的视频(Seek后无效),主要用于短视频循环播放场景。
  • 需要在播放器prepare之前调用。

启动刷新预热

进入控制台,在视频点播中找到刷新预热选项。在操作类型中选择预热,填写需要预热的视频URL。预热
说明 由于刷新预热有一定成本,可根据视频热度进行预热,将视频主动预热在阿里云各个节点上。