视频服务HDR Vivid 还原色彩,让所见成“真”

视频,服务,hdr,vivid,还原,色彩,所见 · 浏览次数 : 515

小编点评

## Video Processing and HDR on HMS Core SDK This document outlines the process of implementing High Dynamic Range (HDR) in an HMS Core app, focusing on video processing and rendering for improved image quality. **HDR and its benefits:** * HDR increases the contrast between dark and bright areas of an image. * This enhances the visual experience by making the image appear more realistic. **HMS Core's HDR capabilities:** * The HMS Core SDK offers a **HDR Vivid** feature that addresses the limitations of traditional HDR. * It supports various video formats and provides high-quality rendering with improved detail and clarity. **Key steps for implementing HDR:** 1. **Initialize the HDR Vivid object:** * Set up the **input and output surface** for processing. * Configure the **output color space** and **format**. 2. **Configure the HDR Vivid parameters:** * Set the **brightness** to the desired level. * Set other parameters for **static and dynamic metadata** (e.g., color temperature, aspect ratio). 3. **Start the HDR Vivid processing thread:** * This thread handles the video processing and rendering. 4. **Stop the thread and release resources:** * When the activity stops, release the HDR Vivid object and its associated resources. **Additional features:** * **HDR ability configuration:** * The SDK allows you to configure different HDR modes and settings. * This enables control over brightness, layer display, and more. * **External control of HDR:** * You can set the brightness dynamically using the **setBrightness** method. * You can enable/disable HDR layer and caption/anomaly detection through methods. **Key takeaways:** * Using the HMS Core HDR Vivid feature significantly improves video quality. * It offers flexible control over HDR settings and external control capabilities. * Implementing HDR requires understanding and configuring the SDK's HDR API.

正文

如今,视频正在以一种前所未有的方式渗入日常生活,是当下人们记录生活最热门的方式。所以,用户对视频的画质要求越来越高,App想要吸引更多的用户,拥有视频画质新技术的强力支撑很关键。

HDR(High-Dynamic Range)就是一种提高影像亮度和对比度的处理技术。它可以将每个暗部的细节变亮,增加对比度,丰富更多细节色彩,让电影、图片都能呈现出极佳的效果,在观影时更接近真实环境中的视觉感受。但是传统的HDR技术存在标准不统一,终端呈现效果参差不齐,制作难度大,缺少超高清片源等桎梏。

HMS Core视频服务HDR Vivid能力不但解决了HDR的问题,而且可以呈现丰富的色彩及层次,更加强烈的影像纵深感及细节,让画面更加的趋近真实世界,力求实现人眼“所见即所得”的效果。HDR Vivid SDK提供的HDR Vivid视频图像的OETF、Tonemapping、HDR2SDR等能力,助力您快速构建HDR Vivid视频的播放、分享特性,帮助您向用户提供HDR Vivid视频媒体体验。HDR Ability SDK提供的屏幕亮度相关能力,获得更好的HDR视频播放体验,可以单独集成,也可以和HDR Vivid SDK配合使用。

开发准备

  1. 在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法请参见帐号注册认证

  2. 集成HMS Core SDK

针对Android Studio开发环境,华为提供了Maven仓集成方式的HMS Core SDK包。在开始开发前,您需要将HMS Core SDK集成到您的Android Studio开发环境中。

  1. 配置混淆脚本

4. 添加权限

应用开发

1. 准备工作

检查设备是否具有HDR Vivid片源硬件解码能力。如果以下函数返回true,则说明设备具有HDR Vivid片源硬件解码能力。

public boolean isSupportDecode() {
    // 获取MediaCodec在设备上的支持信息
    MediaCodecList mcList = new MediaCodecList(MediaCodecList.ALL_CODECS);
    MediaCodecInfo[] mcInfos = mcList.getCodecInfos();


    for (MediaCodecInfo mci : mcInfos) {
        // 过滤掉编码器
        if (mci.isEncoder()) {
            continue;
        }
        String[] types = mci.getSupportedTypes();
        String typesArr = Arrays.toString(types);
        // 过滤非HEVC解码器
        if (!typesArr.contains("hevc")) {
            continue;
        }
        for (String type : types) {
            // 判断解码器是否支持HEVC 10Bit的解码
            MediaCodecInfo.CodecCapabilities codecCapabilities = mci.getCapabilitiesForType(type);
            for (MediaCodecInfo.CodecProfileLevel codecProfileLevel : codecCapabilities.profileLevels) {
                if (codecProfileLevel.profile == HEVCProfileMain10
                    || codecProfileLevel.profile == HEVCProfileMain10HDR10
                    || codecProfileLevel.profile == HEVCProfileMain10HDR10Plus) {
                    // 返回支持
                    return true;
                }
            }
        }
    }
    // 返回不支持
    return false;
}

从视频中解析视频信息,包括:分辨率、转换函数、色彩空间、颜色格式。存放到自定义变量中,如:VideoInfo。

public class VideoInfo {
    private int width;
    private int height;
    private int tf;
    private int colorSpace;
    private int colorFormat;
    private long durationUs;
}

创建SurfaceView,用于SDK处理后渲染画面。

// surface_view为布局文件layout中定义
SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.surface_view);

创建线程,从视频中解析视频流,具体请参见示例代码

2. 渲染转码

2.1创建并初始化HdrVividRender实例。

HdrVividRender hdrVividRender = new HdrVividRender();
hdrVividRender.init();

2.2设置视频源的分辨率、光电转换函数。

// 设置视频源的光电转换函数
hdrVividRender.setTransFunc(2);
// 设置视频源的分辨率
hdrVividRender.setInputVideoSize(3840, 2160);

说明:Android平台下只支持渲染输入模式场景。

2.3设置输出的亮度值(可选)。

hdrVividRender.setBrightness(700);

2.4创建输入Surface。当输入模式为渲染模式时,需要调用该接口创建输入Surface,并将该Surface作为configure的inputSurface参数传入。

Surface inputSurface = hdrVividRender.createInputSurface();

2.5设置输出参数。

2.5.1设置渲染的Surface的大小(渲染输出模式需要设置)。

// surfaceView为视频播放窗口
hdrVividRender.setOutputSurfaceSize(surfaceView.getWidth(), surfaceView.getHeight());

2.5.2设置输出Buffer的色彩空间(转码输出模式时设置,可选,如果不设置,默认为BT.709)。

hdrVividRender.setColorSpace(HdrVividRender.COLORSPACE_P3);

2.5.3设置输出Buffer的颜色格式(转码输出模式时设置,可选,如果不设置,默认为R8G8B8A8)。

hdrVividRender.setColorFormat(HdrVividRender.COLORFORMAT_R8G8B8A8);

2.6输出模式为渲染模式时,需要调用如下接口:

hdrVividRender.configure(inputSurface, new HdrVividRender.InputCallback() {
    @Override
    public int onGetDynamicMetaData(HdrVividRender hdrVividRender, long pts) {
        // 设置静态元数据,需要从视频源中获取。
        HdrVividRender.StaticMetaData lastStaticMetaData = new HdrVividRender.StaticMetaData();
        hdrVividRender.setStaticMetaData(lastStaticMetaData);
        // 设置动态元数据,从视频源中获取。
        ByteBuffer dynamicMetaData = ByteBuffer.allocateDirect(10);
        hdrVividRender.setDynamicMetaData(20000, dynamicMetaData);
        return 0;
    }
}, surfaceView.getHolder().getSurface(), null);

2.7输出模式为转码模式时,需要调用如下接口:

hdrVividRender.configure(inputSurface, new HdrVividRender.InputCallback() {
    @Override
    public int onGetDynamicMetaData(HdrVividRender hdrVividRender, long pts) {
        // 设置静态元数据,需要从视频源中获取。
        HdrVividRender.StaticMetaData lastStaticMetaData = new HdrVividRender.StaticMetaData();
        hdrVividRender.setStaticMetaData(lastStaticMetaData);
        // 设置动态元数据,从视频源中获取。
        ByteBuffer dynamicMetaData = ByteBuffer.allocateDirect(10);
        hdrVividRender.setDynamicMetaData(20000, dynamicMetaData);
        return 0;
    }
}, null, new HdrVividRender.OutputCallback() {
    @Override
    public void onOutputBufferAvailable(HdrVividRender hdrVividRender, ByteBuffer byteBuffer,
        HdrVividRender.BufferInfo bufferInfo) {
            // App处理缓冲Buffer数据逻辑
    }
});

说明:如果不使用new HdrVividRender.OutputCallback()异步处理返回Buffer数据,可以通过read方法主动获取。例如:hdrVividRender.read(new BufferInfo(), 10); // 10为时间戳,由App决定具体时间戳。

2.8启动处理流程。

hdrVividRender.start();

2.9停止处理流程。

hdrVividRender.stop();

2.10释放资源。

hdrVividRender.release();
hdrVividRender = null;

说明:

渲染输出模式,当Surface大小改变时,需要调用setOutputSurfaceSize重新设置输出Surface的大小。

渲染输出模式,当Surface销毁重新创建时(前后台切换),如果HdrVividRender实例没有销毁,需要调用setOutputSurface接口设置新的输出Surface。

3. HDR能力配置

HDR能力接口类HdrAbility,可用于HDR Vivid SDK对HDR Vivid视频进行渲染转码处理过程中,进行亮度调节。

3.1初始化亮度调节功能。

HdrAbility.init(getApplicationContext());

3.2打开设备的HDR能力,屏幕的峰值亮度会增加。

HdrAbility.setHdrAbility(true);

3.3设置输出视频图像数据的白点的备选的最大峰值亮度。

HdrAbility.setBrightness(600);

3.4打开视频图层高亮显示能力。

HdrAbility.setHdrLayer(surfaceView, true);

3.5设置字幕/弹幕图层高亮显示能力。

HdrAbility.setCaptionsLayer(captionView, 1.5f);

了解更多详情>>

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

与视频服务HDR Vivid 还原色彩,让所见成“真”相似的内容:

视频服务HDR Vivid 还原色彩,让所见成“真”

如今,视频正在以一种前所未有的方式渗入日常生活,是当下人们记录生活最热门的方式。所以,用户对视频的画质要求越来越高,App想要吸引更多的用户,拥有视频画质新技术的强力支撑很关键。 HDR(High-Dynamic Range)就是一种提高影像亮度和对比度的处理技术。它可以将每个暗部的细节变亮,增加对

【FAQ】视频编辑服务常见问题及解答

Q1问题描述 1、 访问贴纸等素材的时候提示“网络异常,请重试”怎么办? 2、 使用AI能力时,提示“errorCode:20124 errorMsg:Method not Allowed”? 解决方案 请做以下检查: 1、 在代码中检查鉴权信息是否已设置。如果未设置,可以通过api_key或Acc

视频实时自然美颜, 无惧素颜上镜

华为HMS Core 视频编辑服务依托自身AI技术的核心优势,在最新版本HMS Core 6.8.0中上线了全新的视频美颜功能,能对指定图片或视频中的人脸实现磨皮、美白、大眼、瘦脸的美颜效果,适用于直播、相机、视频剪辑、图片处理等场景中,打造独特自然的美颜效果。 HMS Core视频美颜功能在技术上

华为开发者大会HDC2022:HMS Core 持续创新,与开发者共创美好数智生活

11月4日,华为开发者大会HDC2022在东莞松山湖拉开帷幕。HMS Core在本次大会上带来了包括音频编辑服务的高拟真歌声合成技术、视频编辑服务的智能提取精彩瞬间功能、3D Engine超大规模数字世界实时渲染技术,以及为听障人群发声的手语服务等HMS Core最新技术能力进展 。此外,HMS C

上新啦KIT

HMS Core上新啦!分析服务区服分析全新上线;机器学习服务OCR新增手写识别服务;3D建模续扫能力更新;视频编辑服务支持自定义上传素材……更多#HMS Core#能力可点击网页链接了解。 了解更多详情>> 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址:GitHub、Gite

【Azure 存储服务】MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度

问题描述 把MP4视频放在Azure的Blob里面,用生成URL在浏览器中打开之后,视频可以正常播放却无法拖拽视频的进度,这是什么情况呢? 问题解答 因为MP4上传到Azure Blob后,根据公开的权限,可以直接通过Storage Blob URL +/ Blob Container + / Bl

不要再说你不会了——网络性能问题排查思路

网络性能问题排查思路 服务监控系列文章 服务监控系列视频 网络问题往往是性能排查中最复杂的一个问题,因为网络问题往往涉及的链路比较长,排查起来不仅仅是看本地机器的指标就可以了。本文将展示一个比较系统的排查网络问题的思路。 我们往往都是通过类似prometheus,grafana搭建的监控平台对机器的

一次系统延迟性优化案例

一次系统延迟性优化案例 服务监控系列文章 服务监控系列视频 延迟的本质 本质是cpu没有及时的运行程序代码。 进程内部 网络io,磁盘io,cpu调度 达到瓶颈 第三方系统 调用的第三方系统慢,mysql,redis等基础组件调度慢, 第三方应用系统调用慢 问题背景 线上隔三差五晚上10点左右总会有

golang pprof 监控系列(1) —— go trace 统计原理与使用

golang pprof 监控系列(1) —— go trace 统计原理与使用 服务监控系列文章 服务监控系列视频 关于go tool trace的使用,网上有相当多的资料,但拿我之前初学golang的经验来讲,很多资料都没有把go tool trace中的相关指标究竟是统计的哪些方法,统计了哪段

我又和redis超时杠上了

我又和redis超时杠上了 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案。 服务监控系列文章 服务监控系列视频 背景 经过上次redis超时排查,并联系云服务商解决之后,redis超时的现象好了一阵