H.265 (HEVC) 是一种视频编码标准,相较于 H.264 (AVC),它能在相同画质下显著降低码率,节省带宽成本;或在同等带宽下提供更卓越的画质。然而,H.265 的硬件解码能力在不同设备上存在兼容性差异。播放器 SDK 通过内置的基于大数据分析的 H.265 硬解机型黑名单,能够智能地选择硬解或软解,有效避免播放失败、花屏、黑屏等问题,确保 H.265 视频的流畅播放。本文将指导您如何在应用中集成 H.265 视频的播放能力。
注意
自 1.36.1 版本起,H.265 硬解优化由增值服务调整至高级版和企业版。如您集成 1.36.1 之前的版本且想要使用此功能,请升级至最新版本。
PlayAuthToken 时,不要设置 Codec 参数,以确保播放器能够根据设备能力自由选择编码格式。具体请见以下文档:
DirectUrl 模式适用于播放任意来源(包括火山引擎视频点播服务或第三方 CDN)的 H.265 视频 URL。在这种模式下,您的应用需要自行承担更多的决策逻辑。
由于播放器无法预知一个 URL 对应视频的编码格式,您的应用通常需要管理 H.264 和 H.265 两种格式的 URL,并根据设备能力进行选择。
DirectUrl 模式播放 H.265 视频的整体流程具体如下图所示:
Vid 模式下播放 H.265 视频可以利用客户端的能力检测与服务端的智能调度,实现最简单、最可靠的 H.265 播放体验。
VidPlayAuthTokenSource 时,将期望的编码格式(H.265 或 H.264)通过 setEncodeType 方法告知 SDK。encodeType 信息和 PlayAuthToken 向视频点播服务请求播放信息。参考以下示例代码在 Vid 模式下播放 H.265 视频:
// 1. 判断设备是否支持 H.265 硬解 TTVideoEngineEncodeType encodeType = TTVideoEngineH264; if (TTVideoEngineCodecStrategyUtil.isDeviceSupporth265HardwareDecode) { encodeType = TTVideoEngineh265; } // 2. 准备基础播放参数 NSString *vid = @"your_video_id"; // 由您的业务服务端提供 NSString *playAuthToken = @"your_play_auth_token"; // 由您的业务服务端提供 TTVideoEngineResolutionType resolution = TTVideoEngineResolutionTypeFullHD; // 指定起播清晰度 // 3. 构造 Vid 播放源,并传入期望的 encodeType // 前提:服务端在签发 playAuthToken 时未限制 Codec 类型。 TTVideoEngineVidSource *vidSource = [[TTVideoEngineVidSource alloc] initWithVid:vid playAuthToken:playAuthToken resolution:resolution encodeType:encodeType isDash:NO isHLS:NO]; // 4. 设置播放源并播放 [self.engine setVideoEngineVideoSource:vidSource]; [self.engine play];
通过以下方法检查当前设备是否在 H.265 硬解的支持列表中。
// 判断当前设备是否支持 H.265 硬解。YES:支持; NO:不支持 BOOL isSupport = TTVideoEngineCodecStrategyUtil.isDeviceSupporth265HardwareDecode;
在播放过程中,如果您需要确认当前实际使用的解码器信息,可以在 videoEngineReadyToPlay: 回调触发后调用以下方法:
// 确认当前播放是否正在使用硬件解码 BOOL isHardwareDecode = self.videoEngine.hardwareDecode; // 获取当前播放视频的编码格式 ID // 0: H.264 // 1: H.265 NSInteger videoCodecId = [[self.videoEngine getOptionBykey:VEKKEY(VEKKeyPlayerGetVideoCodecTypeId_NSInteger)] integerValue];