搜索本产品文档关键词
HDR功能接入
所有文档
menu

智能视频SDK

HDR功能接入

接入准备

接入HDR功能,需要使用播放器SDK高级版,并申请高级版License。

功能介绍

在高级版SDK中,提供了HDR视频的解码和渲染能力,能够让HDR视频在高低端机型上都得到正确的色彩呈现。其中解码能力由播放内核原生支持,渲染能力由HDRKit组件和VideoProcessor组件提供,请确保该组件已集成到你的APP中。

SDK当前支持的HDR标准有:HDR10、HLG、HDR Vivid。

Demo体验

hdrdemo.gif

快速开始

  1. 初始化设备HDR能力信息和HDRKit组件
// 查询设备HDR能力信息
HdrInfo.initHDRDeviceInfo(mAppContext);
mHdrKit = new HdrKit();
// 需要传入您申请的高级版证书LicenseID,ID可以在百度智能云控制台(https://console.bce.baidu.com/bvc/#/bvc/player-license/list)查看
mHdrKit.init(mAppContext, "your-license-id");
  1. 设置输出surface和输入surface,典型场景是在onSurfaceCreated回调中进行设置
// 设置目标surface,HDR处理后的内容将渲染到此surface上
mHdrKit.prepareWithTargetSurface(mSurfaceholder.getSurface());
// 获取输入surface, 将原始画面渲染到此surface上
mMediaPlayer.setSurface(mHdrKit.getInputSurface());
  1. 渲染参数设置
// 设置输入画面宽高
mHdrKit.setInputSize(mSurfaceWidth, mSurfaceHeight);
// 设置渲染输出宽高
mHdrKit.setOutputSize(mSurfaceWidth, mSurfaceHeight);
// 设置输入视频的HDR标准,默认为HDR10
mHdrKit.setInputVideoContentType(HdrKit.ContentType.VIVID);
// 设置是否自动调节屏幕亮度,默认开启。
mHdrKit.setEnableBrightAdjust(true);
  1. HDR元数据设置
播放器提供了HDR10/HLG静态元数据和HDR Vivid动态元数据的回调
// 静态元数据回调
public boolean onHdrStaticMetadata(IMediaPlayer mp, int metadataType, byte[] metadata) 
// 动态元数据回调
public boolean onVividMetadata(IMediaPlayer mp, byte[] metadata)
在这两个回调中,可以相应地将元数据设置给HDRKit组件
// 设置静态元数据
mHdrKit.setHdrStaticMetadata(metadataType, metadata);
// 设置动态元数据
mHdrKit.setVividMetadata(metadata);
  1. 开始渲染,典型场景是随播放器的start调用
// 开始渲染到目标surface
mHdrKit.startRenderFromSurface();
  1. 释放,典型场景是随播放器的release调用
// 销毁,如果要重新使用,则需要重新init
mHdrKit.release();
  1. 高级用法

HDRKit组件除了可以用surface作为输入输出之外,还可以用纹理id作为输入输出,使用纹理ID时需使用如下的接口

// 设置输入纹理id, 该id对应的是未处理的视频,HDR处理后的内容将渲染到指定的输出纹理id或屏幕上
mHdrKit.prepareWithInputTexId(texid);
// 设置输出纹理id,如果不调用,则直接渲染到屏幕
mHdrKit.setOutputTexId(outputTexId)
// 开始基于输入纹理id的渲染,调用一次,渲染一帧。典型场景是在GLSurfaceView的onDrawFrame中调用
mHdrKit.drawFrameFromTexId()

在播放器SDK Demo中的BDCloudVideoView类对上述流程有详细的展示,可以参考。

接口说明

HDRKit类

枚举成员
描述
ContentType.HDR10 HDR10标准视频
ContentType.HLG HLG标准视频
ContentType.VIVID HDR Vivid标准视频
ContentType.SDR SDR视频

接口名
描述
void init(Context context, String appID) 初始化,鉴权失败时会抛出异常
void release() 销毁。如果要重新使用,则需要重新调用init
int getState() 获取HDRKit当前状态
void setInputVideoContentType(ContentType contentType) 输入视频的hdr类型,默认为HDR10
void setInputSize(int inputWidth, int inputHeight) 输入画面宽高。
必须在prepareWithTargetSurface或prepareWithInputTexId之后调用,否则抛出异常。
void setOutputSize(int outputWidth, int outputHeight) 渲染输出宽高。
必须在prepareWithTargetSurface或prepareWithInputTexId之后调用,否则抛出异常。
void setHdrStaticMetadata(int metadataType, byte[] metadata) 传入HDR静态元数据。
metadataType 为SEI_MASTERING_DISPLAY_COLOUR_VOLUME(137)或SEI_CONTENT_LIGHT_LEVEL(144)
void setVividMetadata(byte[] metadata) 传入HDR Vivid动态元数据
void setEnableBrightAdjust(boolean enable) 是否开启自动亮度调节
boolean getEnableBrightAdjust() 查询是否开启了自动亮度调节
void prepareWithTargetSurface(Surface surface) 设置目标surface,HDR处理后的内容将渲染到此surface上。必须在init之后调用,否则抛出异常。
Surface getInputSurface() 获取输入surface, 将原始画面渲染到此surface上。
必须在prepareWithTargetSurface之后调用,否则抛出异常。
void startRenderFromSurface() 开始渲染到目标surface。
必须在prepareWithTargetSurface之后调用,否则抛出异常。
void prepareWithInputTexId(int texid) 设置输入纹理id, 该id对应的是未处理的视频,HDR处理后的内容将渲染到指定的输出纹理id或屏幕上。
必须在init之后调用,否则抛出异常。
void setOutputTexId(int outputTexId) 设置输出纹理id,如果不调用,则直接渲染到屏幕。
必须在prepareWithInputTexId之后调用,否则抛出异常。
void drawFrameFromTexId() 开始基于输入纹理id的渲染,调用一次,渲染一帧。
必须在prepareWithInputTexId之后调用,否则抛出异常。
上一篇
全景声功能接入
下一篇
超低延时直播功能接入