You need to enable JavaScript to run this app.
导航
标准协议视频的起播选档
最近更新时间:2025.11.10 16:08:35首次发布时间:2025.11.04 16:22:41
复制全文
我的收藏
有用
有用
无用
无用

起播选档是指在视频开始播放前,根据用户的网络状况、设备信息及业务场景,智能选择一个最合适的清晰度进行播放。起播选档旨在优化视频的起播体验,在保障首帧速度的同时,尽可能提供更高的初始画质。本功能与标准协议视频的 ABR 播放在 SDK 内部都依赖 ABR 模块,但应用场景有所不同:

  • 起播选档:仅在播放开始前进行一次选档决策。播放过程中,清晰度将保持不变,不会根据网络波动自动切换。其起播选档策略更为精细,并支持超分降档等高级优化。
  • ABR 播放:包含起播选档过程,并会在整个播放期间持续监测网络,动态地、无缝地自动切换清晰度。

如果您的业务场景不需要在播放中自动切换清晰度,或者希望获得最优的起播清晰度决策,推荐使用本文介绍的起播选档功能。如果需要播放中自动切换清晰度的能力,请使用 ABR 功能。

本文指导您为标准 HLS Master M3U8 视频实现起播选档功能。

前提条件

使用本功能前,请确保您已参考集成 SDK快速开始文档,完成 SDK 的集成和初始化。在此基础上,本功能有以下特定要求:

  • SDK 版本:需要 1.48.2.10 或更高版本。
  • 模块依赖:请确保在 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"

核心接入流程

步骤 1:全局初始化

ApplicationonCreate 方法中,除了 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();
}

步骤 2:为播放器实例开启选档

对于每一次播放,您都需要在创建 TTVideoEngine 实例后、调用 play 之前,为该实例配置并开启起播选档功能。

  1. 构建选档配置:创建一个 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;
    }
    
  2. 在创建 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();