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 硬解。YES:支持; NO:不支持 TTVideoEngineCodecStrategyUtil.isDeviceSupporth265HardwareDecode // 确认当前是否使用硬解。调用时机:在 onPrepared 回调后调用 self.videoEngine.hardwareDecode // 获取当前播放源 code 类型。调用时机:在 onPrepared 回调后调用 // H264: 0 // H265: 1 NSInteger videoCodecId = [[self.videoEngine getOptionBykey:VEKKEY(VEKGetKeyPlayerVideoCodecId_NSInteger)] integerValue];
DirectUrl 模式播放 H.265 视频的整体流程具体如下图所示:
应用客户端向服务端请求播放地址时,需携带是否支持 H.265 信息。服务端根据此信息返回视频播放地址,即支持时返回 H.265 播放地址,不支持时返回 H.264 播放地址。客户端获取到播放地址后,设置给 SDK 即可,具体请见快速开始 - 设置播放源。
说明
应用服务端也可同时下发 H.264 和 H.265 播放源,客户端再根据确认结果播放相应视频。
playAuthToken
并下发给客户端。请注意不要设置 Codec
,否则客户端无法设置。具体请见以下文档:
参考以下示例代码在 Vid 模式下播放 H.265 视频:
// 1. 确认该机型是否支持 H.265 硬解 TTVideoEngineEncodeType encodeType = nil; if (TTVideoEngineCodecStrategyUtil.isDeviceSupporth265HardwareDecode) { encodeType = TTVideoEngineh265; } else { encodeType = TTVideoEngineH264; } // vid 方式播放时需同时设置 playAuthToken 和 resolution NSString *vid = @"vid"; // 应用服务端下发 NSString *playAuthToken = @"play auth token"; // 应用服务端下发 TTVideoEngineResolutionType resolution = TTVideoEngineResolutionTypeFullHD; // 指定视频播放分辨率档位 // 2. 构建 vid 播放源,传入 encodeType 类型 TTVideoEngineVidSource *vidSource = [[TTVideoEngineVidSource alloc] initWithVid:vid playAuthToken:playAuthToken resolution:resolution encodeType:encodeType isDash:NO isHLS:NO]; // 3. 设置播放源 [self.engine setVideoEngineVideoSource:vidSource]; // 4. 播放 [self.engine play];