起播选档是指在视频开始播放前,根据用户的网络状况、设备信息及业务场景,智能选择一个最合适的清晰度进行播放。起播选档旨在优化视频的起播体验,在保障首帧速度的同时,尽可能提供更高的初始画质。本功能与标准协议视频的 ABR 播放在 SDK 内部都依赖 ABR 模块,但应用场景有所不同:
如果您的业务场景不需要在播放中自动切换清晰度,或者希望获得最优的起播清晰度决策,推荐使用本文介绍的起播选档功能。如果需要播放中自动切换清晰度的能力,请使用 ABR 功能。
本文指导您为标准 HLS Master M3U8 视频实现起播选档功能。
使用本功能前,请确保您已参考集成 SDK 和快速开始文档,完成 SDK 的集成和初始化。在此基础上,本功能有以下特定要求:
build.gradle 文件中添加 ttabr 模块依赖:def ttsdk_version = "1.48.2.x" // 要求 1.48.2 或更高版本 implementation "com.bytedanceapi:ttsdk-player_premium:$ttsdk_version" implementation "com.bytedanceapi:ttsdk-ttabr:$ttsdk_version"
在 Application 的 onCreate 方法中,除了 SDK 的常规初始化外,还需要初始化 ABR 策略模块。此操作只需在 App 启动时执行一次。
public class App extends Application { @Override public void onCreate() { super.onCreate(); initVodSDK(); } } public static void initVodSDK() { // 1. 初始化 SDK Env.init(/*省略*/); // 2. 关键步骤:初始化 ABR 全局配置,为起播选档所必需 TTVideoABRStrategy.init(); }
对于每一次播放,您都需要在创建 TTVideoEngine 实例后、调用 play 之前,为该实例配置并开启起播选档功能。
构建选档配置:创建一个 TTVideoABRStartupConfig 对象,用于定义选档算法的行为。
public TTVideoABRStartupConfig createStartupConfig() { TTVideoABRStartupConfig startupConfig = new TTVideoABRStartupConfig(); // -- 基础设备信息 -- startupConfig.screenWidth = UIUtils.getScreenWidth(this.mContext); // 当前设备屏幕宽 startupConfig.screenHeight = UIUtils.getScreenHeight(this.mContext); // 当前设备屏幕高 // -- 策略配置 -- // 在无网络测速信息时(如 App 冷启后首个视频)使用的默认清晰度 startupConfig.defaultResolution = Resolution.High; // 480p // Wi-Fi 网络下允许选择的最高清晰度 startupConfig.wifiMaxResolution = Resolution.ExtremelyHigh; // 1080p // 移动网络下允许选择的最高清晰度 startupConfig.mobileMaxResolution = Resolution.SuperHigh; // 720p // -- 业务场景配置:根据视频显示尺寸优化选档 -- startupConfig.displayWidth = Math.min(startupConfig.screenWidth, startupConfig.screenHeight); startupConfig.displayHeight = (int) (startupConfig.displayWidth / 9f * 16); return startupConfig; }
在创建 DirectUrl 播放源后,应用配置并开启起播选档:
// 假设已创建好 directUrlSource if (mVideoEngine == null) { mVideoEngine = new TTVideoEngine(context); // 设置播放源 mVideoEngine.setStrategySource(directUrlSource); // 关键步骤 1: 开启速度预测优化 mVideoEngine.setIntOption(TTVideoEngine.PLAYER_OPTION_ENABLE_OPTIMIZED_SPEED_PREDICTION, 1); // 关键步骤 2: 应用起播选档配置 final TTVideoABRStartupConfig startupConfig = createStartupConfig(); TTVideoABRStrategy.initEngine(mVideoEngine, startupConfig); // 关键步骤 3: 设置 HLS 回调 mVideoEngine.setPlayerHLSChooseStreamCallback(new TTVideoEnginePlayHLSChooseStreamCallback() { @Override public void streamInfos(TTVideoEngineMasterPlaylist masterPlaylist) { // 可在此获取 Master M3U8 解析后的所有流信息 } @Override public int chooseVariantBandWidth() { // 返回 0,表示由 SDK 内部的起播选档策略决策 return 0; } @Override public int chooseRenditionInfoId(int varIndex) { return 0; } }); } // 开始播放 mVideoEngine.play();