You need to enable JavaScript to run this app.
导航

接入 HDR 功能

最近更新时间2023.10.11 18:55:48

首次发布时间2023.02.16 20:48:52

本文为您介绍接入 HDR 的功能介绍、效果示例、前提条件、播放方式等内容。

功能介绍

HDR(High Dynamic Range,高动态范围 ) 视频,相比普通 SDR(Standard Dynamic Range)视频拥有更高的色深、更广的动态范围和更强的色彩表现力,使得画面更真实、更有层次,很直观的提升视频画质,从而有效提升人们的观影感受。

前提条件

  • Android 系统 >= 9.0
  • 通过 mVideoEngine.isSupportHDR() 方法,返回值为 true, 设备是支持 HDR。
  • 使用 SurfaceView 播放视频。
  • 播放 H.265 编码的 HDR10 或 HLG 视频源。
  • 使用硬解。

DirectUrl 方式播放 HDR 源

设置 HDR 数据源播放,实现的代码示例如下所示。

final String vid = "video id"; // 视频源与 vid 必须一一对应
final String url = "http://www.example.com/hdr.mp4"; // 设置 HDR 视频资源 url
final String cacheKey = TTVideoEngine.computeMD5(url);

// 1.组装资源
StrategySource directUrlSource = new DirectUrlSource.Builder()
        .setVid(vid)
        .addItem(new DirectUrlSource.UrlItem.Builder()
                .setUrl(url)
                .setCacheKey(cacheKey)
                .build())
        .build();
       
// 2.设置播放源
ttVideoEngine.setStrategySource(directUrlSource);
// 3.播放
ttVideoEngine.play()

说明

  • vid 必须设置,视频源与 vid 必须一一对应。

  • 缓存 key 必须设置。缓存 key 的生成规则:

    • 生成的 key 不带特殊字符,能作为文件名。
    • 生成的 key 能和视频资源文件一一对应。
    • 推荐使用 URL 的 MD5 作为缓存 key。

Vid + PlayAuthToken 方式播放 HDR 源

alt

控制台配置转码模板

  1. 登录视频点播控制台,进入空间;
  2. 选择左侧导航栏媒体处理设置>媒体处理模板, 选择画质增强模板页签,单击添加画质增强模板按钮;
  3. 跳转创建模板页面,根据页面信息提示,开启色彩增强的开关,选择 SDRToHDR,完成参数配置。详情请参见画质增强模板

签发 PlayAuthToken

请求 HDR 源需要 AppServer 在下发的 PlayAuthToken 中签入 HDRDefinition,可通过服务端 SDK 中的获取临时安全凭证,即 PlayAuthToken 文档进行 PlayAuthToken 的接入。

切换 HDR 档位播放

切换到 HDR 档位的代码示例如下所示。

ttVideoEngine.configResolution(High_HDR);

Resolution HDR 档位枚举如下表所示。

枚举值对应分辨率描述
Standard_HDR360P标清 HDR
High_HDR480P高清 HDR
SuperHigh_HDR720P超清 HDR
ExtremelyHigh_HDR1080P1080P HDR
TwoK_HDR2K2K HDR
FourK_HDR4K4K HDR

说明

详情请参见基础功能接入获取清晰度部分。

客户端处理

  1. 获取支持的清晰度列表,实现的代码示例如下所示。
ttVideoEngine.setVideoInfoListener(new VideoInfoListener() {
    @Override
    public boolean onFetchedVideoInfo(VideoModel videoModel) {
        // 获取视频数据成功回调
        Log.v("VideoPlay", "onFetchedVideoInfo " + videoModel);
        if (videoModel == null) return false;
        
        // 获取当前 VideoModel 的清晰度数组,可用于清晰度列表展示
        Resolution[] resolutions = ttVideoEngine.supportedResolutionTypes();
          
        return false;
    }
});
  1. 通过以下方法判断某清晰度是否为 HDR。
/**
 判断是否是 HDR 档位清晰度
 
 @param resolution 清晰度
 */
private boolean isHDRResolution(Resolution resolution) {
    return resolution.toString(TYPE_VIDEO).contains("HDR");
}