H.265(HEVC)是一种视频编码标准,相比于之前的标准 H.264(AVC),H.265 能够以更高的压缩效率提供相同质量的视频,或者在相同的比特率下提供更好的图像质量。然而,H.265 存在设备兼容性问题。点播 SDK 包含了基于大数据沉淀的 H.265 硬解机型黑名单,可根据机型画像灵活切换软硬解策略,有效避免播放失败、花屏、黑屏等问题。本文为您介绍使用点播 SDK 时如何正确播放 H.265 视频。
该功能仅高级版和企业版支持。请确保您已购买高级版或企业版的 License 并添加高级版 SDK 依赖,详见 License 包管理。
注意
自 1.36.1 版本起,H.265 硬解优化由增值服务调整至高级版和企业版。如您集成 1.36.1 之前的版本且想要使用此功能,请升级至最新版本。
通过以下示例代码确认当前设备是否支持 H.265 硬解。
// 确认该机型是否支持 H.265 硬解。true:支持; false:不支持 boolean isSupportH265HardwareDecode = CodecStrategy.Decoder.isSupport(CodecStrategy.Dimension.h265_HARDWARE); // 确认当前是否使用硬解。调用时机:在 onPrepared 回调后调用 boolean isHardwareDecode = videoEngine.getIntOption(TTVideoEngine.PLAYER_OPTION_GET_VIDEO_CODEC_TYPE) == TTVideoEngine.PLAY_CODEC_NAME_AN_HW; // 获取当前播放源 code 类型。调用时机:在 onPrepared 回调后调用 // H264: 0 // H265: 1 int videoCodecId = videoEngine.getIntOption(TTVideoEngine.PLAYER_OPTION_GET_VIDEO_CODEC_ID);
DirectUrl 模式播放 H.265 视频的整体流程具体如下图所示:
应用客户端向服务端请求播放地址时,需携带是否支持 H.265 信息。服务端根据此信息返回视频播放地址,即支持时返回 H.265 播放地址,不支持时返回 H.264 播放地址。客户端获取到播放地址后,设置给 SDK 即可,具体请见快速开始 - 设置播放源。
说明
应用服务端也可同时下发 H.264 和 H.265 播放源,客户端再根据确认结果播放相应视频。
playAuthToken
并下发给客户端。请注意不要设置 Codec
,否则客户端无法设置。具体请见以下文档:
参考以下示例代码在 Vid 模式下播放 H.265 视频:
// 1. 确认该机型是否支持 H.265 硬解 final String encodeType; if (CodecStrategy.Decoder.isSupport(CodecStrategy.Dimension.h265_HARDWARE)) { encodeType = TTVideoEngine.CODEC_TYPE_h265; } else { encodeType = TTVideoEngine.CODEC_TYPE_H264; } // 2. 构建 vid 播放源,传入 encodeType 类型 StrategySource vidSource = new VidPlayAuthTokenSource.Builder() .setVid("your video id") // 应用服务端下发 .setPlayAuthToken("your video id's play auth token") // 应用服务端下发 // 设置 encodeType 类型,不传则使用默认值 h264 // 播放器请求视频播放地址时,若 H265 资源不存在,会兜底下发 H264 播放 .setEncodeType(encodeType) .build(); // 3. 设置播放源 ttVideoEngine.setStrategySource(vidSource); // 4. 播放 ttVideoEngine.play()