预加载是指在开始播放之前提前下载即将播放视频的头部数据,以实现快速起播,从而显著优化播放体验。详细功能介绍,请见 Android 自定义预加载。
注意
该功能仅高级版支持。请确保您已购买高级版的 License,详见播放器 License。
您可以根据播放源的类型(Vid 或 DirectUrl)调用相应的 API 来添加预加载任务。
适用于播放已上传至火山引擎视频点播服务的视频。通过视频的 Vid 和其对应的临时播放凭证 PlayAuthToken 来指定播放内容。这两个参数通常由您的业务服务端下发,客户端直接使用即可。详情请见通过临时播放 Token 播放。
// 使用vid和playAuthToken初始化vid source, resolution为期望预加载的档位 TTVideoEngineVidSource source = TTVideoEngineVidSource.init( vid: <vid>, playAuthToken: <playAuthToken>, resolution: <TTVideoEngineResolutionType>); // 使用source和preloadSize初始化PreloaderVidItem, 预加载字节数preloadSize默认800 KB TTVideoEnginePreloaderVidItem item = TTVideoEnginePreloaderVidItem.vidItemWithVideoSource(source, 800 * 1024); // 添加预加载任务 TTVideoEnginePreload.addTaskWithVidItem(item);
您可以为每个预加载任务 item 设置回调,以监听其完成、取消或失败的状态。
// 对已添加的预加载任务PreloaderURLItem,监听item的cancel和end回调 // 预加载任务取消 item.onPreloadCancel = () { print('TTF -- 预加载cancel 回调到dart'); }; // 预加载任务完成 // taskInfo - 预加载任务的文件信息和下载信息 // error - 预加载任务的error信息 item.onPreloadEnd = (TTVideoEngineLocalServerTaskInfo? taskInfo, TTError? error) { Map<dynamic, dynamic>? map = taskInfo?.toJson(); String errorStr = error.toString(); print('TTF -- 预加载end 回调到dart end = $map error = $errorStr'); };
如果业务逻辑判断某个视频不再需要被预加载,可以将其任务从队列中取消,以节省网络资源。
// 取消全部预加载任务 TTVideoEnginePreload.cancelAllTask(); // 根据 key (即创建任务时使用的 cacheKey) 取消一个指定的预加载任务 TTVideoEnginePreload.cancelTaskByKey(<cacheKey>);
要验证预加载是否生效,您可监听播放器实例的 onMediaCacheChange 回调。当播放器开始播放一个视频时,如果该视频成功命中了预加载的缓存,此回调便会被触发,且 cacheSize 会大于 0。
void Function(String key, int cacheSize)? onMediaCacheChange;