播放器 SDK 支持 QUIC(HTTP/3)传输协议。根据内部实践,在弱网场景下开启 QUIC 协议,针对部分丢包和限速场景,视频的首帧加载时长及播放卡顿率均有一定程度的下降,能够显著提升极端网络环境下的播放体验。SDK 提供两种开启策略,您可以根据业务需求选择:
SDK 版本要求:SDK 自 1.46.2.9 版本起支持播放 QUIC。
集成 QUIC 组件:需在 app/build.gradle 中集成 ttnet 模块。
说明
SDK 与 ttnet 版本匹配建议:
implementation "com.bytedanceapi:ttsdk-ttnet:版本号" // 如果您使用的版本低于 1.50.1.7,还需额外添加以下依赖: // implementation "com.ss.mediakit:ttnetloader:1.1.218.1-tob"
服务端支持:确保您的 CDN 域名已配置并开启了 QUIC 协议支持。
此方式下,SDK 会根据网络状况和服务器响应,自动在 TCP 和 QUIC 之间进行切换或竞速。
QuicConfig quicConfig = new QuicConfig(); // 1. 开启 QUIC quicConfig.enable = true; TTNetConfig config = new TTNetConfig.Builder() .setQuicConfig(quicConfig) .build(); TTNetManager.initTTNet(this, config); // 2. 开启 QUIC 下载器 // 注意:如果您的 SDK 版本低于 1.50.1.7,还需要配置以下三个 setIntValue 开启 QUIC 下载器。1.50.1.7 后 SDK 会内部默认开启 // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_ENABLE_TTNETLOADER, 1); // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_NEED_MDL_LOAD_MDLV2_LIB, 1); // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_ENABLE_MDLV2, 1); // 3. 执行 SDK 初始化 Env.start(new Config.Builder() .... .build());
如果您希望针对核心业务域名跳过标准协议中“先走 TCP 探测”的阶段,实现“首跳开启”以获取极致的首帧速度,请参考以下配置。
// 1. 禁用 SDK 内部的 QUIC 自动探测和域名临时黑名单逻辑 DataLoaderHelper.getDataLoader().setStringValue(DATALOADER_KEY_STRING_MDL_TEMP_OPTS,"{\"ttnet_enable_quic_probe\":0,\"ttnet_enbale_quic_broken\":0}"); // 2. 开启 QUIC 并配置加速域名 QuicConfig quicConfig = new QuicConfig(); Map<String, Pair<Integer, Integer>> quicHint = new HashMap<>(); // 设置强制使用 QUIC 的加速域名(QUIC Hints)。如不设置,SDK 内部将按标准逻辑自行探测。 quicHint.put("xxx.xxx.com", new Pair<>(443, 443)); // 开启 QUIC 支持 quicConfig.enable = true; quicConfig.quicHint = quicHint; TTNetConfig config = new TTNetConfig.Builder() .setQuicConfig(quicConfig) .build(); // 初始化网络组件 TTNetManager.initTTNet(this, config); // 3. 开启 QUIC 下载器 // 注意:如果您的 SDK 版本低于 1.50.1.7,还需要配置以下三个 setIntValue 开启 QUIC 下载器。1.50.1.7 后 SDK 会内部默认开启 // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_ENABLE_TTNETLOADER, 1); // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_NEED_MDL_LOAD_MDLV2_LIB, 1); // TTVideoEngine.setIntValue(DataLoaderHelper.DATALOADER_KEY_INT_ENABLE_MDLV2, 1); // 4. 执行 SDK 初始化 Env.start(new Config.Builder() .... .build());