You need to enable JavaScript to run this app.
导航
播放 HDR 视频
最近更新时间:2024.08.21 11:24:42首次发布时间:2023.02.16 20:48:52

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

前提条件

  • 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 方式播放 HDR 视频

图片

控制台配置转码模板

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

服务端签发临时播放 token

应用客户端需要从服务端请求 HDR 源。服务端需要在签发临时播放 Token 中设置 HDRDefinition,具体请见以下文档:

切换 HDR 档位

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

ttVideoEngine.configResolution(High_HDR);

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

枚举值

分辨率

描述

Standard_HDR

360P

标清 HDR

High_HDR

480P

高清 HDR

SuperHigh_HDR

720P

超清 HDR

ExtremelyHigh_HDR

1080P

1080P HDR

TwoK_HDR

2K

2K HDR

FourK_HDR

4K

4K HDR

说明

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

客户端获取支持的清晰度列表

示例代码如下:

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;
    }
});

判断某清晰度是否为 HDR,示例代码如下:

/**
 判断是否是 HDR 档位清晰度
 
 @param resolution 清晰度
 */
private boolean isHDRResolution(Resolution resolution) {
    return resolution.toString(TYPE_VIDEO).contains("HDR");
}