本文介绍如何通过 Android 播放器 SDK 搭建西瓜视频同款中视频场景,实现“零首帧”的中视频播放效果。
在中视频场景中,缩短视频首帧耗时和提升视频上下滑动的流畅度是提升用户观看体验的重要手段:
为了帮助您快速搭建“西瓜视频”同款中视频场景,基于西瓜视频亿级日活跃用户的真实反馈和大规模实践经验,播放器 SDK 封装了预加载策略。通过预加载策略,可将视频首帧耗时缩短至 100-300 毫秒,为用户呈现极速首帧和流畅丝滑的播放体验,让用户享受到与西瓜视频相媲美的视觉盛宴。
下载地址:Android 示例项目。
策略 | 说明 | 优化效果 |
|---|---|---|
预加载策略 | 预加载是指在播放当前视频时,提前下载后续视频的数据,以便在切换到下一个视频时实现快速起播,从而优化用户的播放体验。 | 缩短视频首帧耗时 |
播放器异步调用 | 建议您使用播放器 SDK 提供的异步接口(例如 | 提升视频上下滑动的流畅度 |
设置封面图 | 建议您使用视频默认抽取的非黑首帧作为封面图,以避免在画面尚未渲染时出现黑屏无内容的情况。 | 避免出现黑屏,提升用户体验 |
在初始化播放器 SDK 前,参考以下代码初始化策略,开启 V2 版本策略:
说明
播放器 SDK 自 1.43.3.4 版本起支持 V2 版本策略,优化了预加载策略与预渲染策略的实现逻辑,在弱网和快速滑动的场景下进一步提升流畅性。
// 1. 开启 logcat 日志 if (BuildConfig.DEBUG) { VodSDK.openAllVodLog(); } // 2. 开启策略 V2 版本 // 注意:这句代码控制 StrategyManager 构造方法中初始化的策略版本,需要在 StrategyManager.instance() 调用前调用。 StrategyManager.setVersion(StrategyManager.VERSION_2); // 3. 初始化播放器 SDK Env.init(/* 省略初始化代码 */);
使用策略功能,需要使用以下接口设置播放源播放。
适用于播放已上传至火山引擎视频点播服务的视频。通过视频的 Vid 和其对应的临时播放凭证 PlayAuthToken 来指定播放内容。这两个参数通常由您的业务服务端下发,客户端直接使用即可。详情请见通过临时播放 Token 播放。除了 vid 和 playAuthToken 外,您还需指定 resolution,且此处设置的 resolution 必须和设置预加载源时的 resolution 保持一致。
final String vid = "YOUR_VIDEO_ID"; // appServer 下发 final String playAuthToken = "YOUR_PLAYAUTHTOKEN"; // appServer 下发 final int encodeType = TTVideoEngine.CODEC_TYPE_H264; // final int encodeType = TTVideoEngine.CODEC_TYPE_H265; // final int encodeType = TTVideoEngine.CODEC_TYPE_H266; // 1. 组装 vid 播放源 StrategySource vidSource = new VidPlayAuthTokenSource.Builder() .setVid(vid) .setPlayAuthToken(playAuthToken) .setEncodeType(encodeType) // 设置起播清晰度,此处为 480P。不传使用默认值 360P .setResolution(Resolution.High) .build(); // 2. 设置播放源 ttVideoEngine.setStrategySource(vidSource); // 3. 播放 ttVideoEngine.play();
适用于播放来自火山引擎或第三方 CDN 的视频 URL 地址。通过传入视频的直接播放地址来指定播放内容。除了 url,您还必须提供以下两个关键参数:
vid:视频的唯一标识。可以是您自己的视频管理系统中的唯一标识,也可以在 App 层自行生成一个 ID。此 ID 会用于播放器 SDK 的日志上报、预加载、预渲染等功能中。cacheKey:视频的缓存索引 Key。为确保唯一性,推荐使用 URL 的 MD5 值。为确保播放器缓存和下载功能的稳定性,强烈建议您遵循以下规范来设置 cacheKey:
cacheKey 的取值应仅包含字母 (a-z, A-Z) 和数字 (0-9)。cacheKey 中使用任何特殊符号,例如 _、-、/、?、& 等。注意
addItem 至少设置 1 个。setEncodeType 设置。final String vid = "YOUR_VIDEO_ID"; // 替换成您自己的视频 ID final String url = "http://www.example.com/h264.mp4"; // 替换成您自己的视频 URL final String cacheKey = TTVideoEngine.computeMD5(url); // 1. 组装播放源 StrategySource directUrlSource = new DirectUrlSource.Builder() .setVid(vid) .addItem( new DirectUrlSource.UrlItem.Builder() .setEncodeType(TTVideoEngine.CODEC_TYPE_H264) .setUrl(url) .setCacheKey(cacheKey) .build()) .build(); // 2. 设置播放源 ttVideoEngine.setStrategySource(directUrlSource); // 3. 播放 ttVideoEngine.play();
为实现预加载策略,您需要将视频播放列表传入 SDK 作为预加载源。SDK 会根据您提供的播放列表,在播放当前视频时提前下载后续的视频内容。在此过程中,SDK 会根据当前的播放状态自动管理预加载的时机和配置,例如预加载的并发数和数据大小。
具体步骤如下:
示例代码如下:
// 1. 全局开启预加载策略,需要在主线程调用 TTVideoEngine.enableEngineStrategy(STRATEGY_TYPE_PRELOAD, STRATEGY_SCENE_SHORT_VIDEO); List<StrategySource> sources = new ArrayList<>(); // 2. 重置视频播放列表,首次加载或者下拉刷新时调用 TTVideoEngine.setStrategySources(sources); // 播放列表有新增时(如上滑加载更多数据),可通过此接口向播放列表中增加数据。 // 会在之前设置给 SDK 的列表后累加。 // TTVideoEngine.addStrategySources(sources); // 3. 设置视频源开始播放,见上面《设置视频源》小节 ttVideoEngine.setStrategySource(strategySource); ttVideoEngine.play();
说明
// 设置预加载任务的并发数,默认值为 1,串行执行预加载任务 TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_PARALLEL_NUM, 2);
在退出中视频页面或切换到其他页面时调用 clearAllStrategy 关闭所有策略,释放资源。
TTVideoEngine.clearAllStrategy();