You need to enable JavaScript to run this app.
导航
播放 H.265 视频
最近更新时间:2025.11.12 17:16:14首次发布时间:2021.04.14 14:20:55
复制全文
我的收藏
有用
有用
无用
无用

H.265 (HEVC) 是一种视频编码标准,相较于 H.264 (AVC),它能在相同画质下显著降低码率,节省带宽成本;或在同等带宽下提供更卓越的画质。然而,H.265 的硬件解码能力在不同设备上存在兼容性差异。播放器 SDK 通过内置的基于大数据分析的 H.265 硬解机型黑名单,能够智能地选择硬解或软解,有效避免播放失败、花屏、黑屏等问题,确保 H.265 视频的流畅播放。本文将指导您如何在应用中集成 H.265 视频的播放能力。

前提条件

  • 版本要求:本功能仅高级版和企业版支持。请确保您已购买相应版本的 License 并集成了正确的 SDK 依赖。详情请参见 License 管理

    注意

    自 1.36.1 版本起,H.265 硬解优化由增值服务调整至高级版和企业版。如您集成 1.36.1 之前的版本且想要使用此功能,请升级至最新版本。

  • 准备 H.265 视频:根据您选择的播放模式,准备方式有所不同。

实现方式

DirectUrl 模式播放

DirectUrl 模式适用于播放任意来源(包括火山引擎视频点播服务或第三方 CDN)的 H.265 视频 URL。在这种模式下,您的应用需要自行承担更多的决策逻辑。

工作原理

由于播放器无法预知一个 URL 对应视频的编码格式,您的应用通常需要管理 H.264 和 H.265 两种格式的 URL,并根据设备能力进行选择。

  1. 客户端判断当前设备是否支持 H.265 硬解
  2. 客户端:根据判断结果,在 H.264 和 H.265 两个 URL 中选择一个进行播放。
    • 方案 1(推荐):客户端将设备能力上报给应用服务端,由服务端决策并返回一个最终的播放 URL。
    • 方案 2:服务端同时下发 H.264 和 H.265 两个 URL,由客户端在本地进行判断和选择。
  3. 客户端:确定 URL 后,设置给 SDK 即可,具体请见步骤 6:设置播放源中的 DirectUrl 播放源。

DirectUrl 模式播放 H.265 视频的整体流程具体如下图所示:
Image

Vid 模式播放

Vid 模式下播放 H.265 视频可以利用客户端的能力检测与服务端的智能调度,实现最简单、最可靠的 H.265 播放体验。

工作原理

  1. 客户端:在发起播放前,判断当前设备是否支持 H.265 硬解。
  2. 客户端:在构造 VidPlayAuthTokenSource 时,将期望的编码格式(H.265H.264)通过 setEncodeType 方法告知 SDK。
  3. 播放器 SDK:携带 encodeType 信息和 PlayAuthToken 向视频点播服务请求播放信息。
  4. 视频点播服务
    • 如果客户端请求 H.265 视频且该格式的视频存在,则返回 H.265 的播放地址。
    • 如果客户端请求 H.265 视频但该格式不存在,服务会自动降级,返回 H.264 格式的播放地址。

示例代码

参考以下示例代码在 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 硬解的支持列表中。

// 判断当前设备是否支持 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];