当前位置: 首页 > news >正文

Android端极致画质体验之HDR播放

高动态范围HDR视频通过扩大亮度分量的动态范围(从100cd/m2到1000cd/m2),以及采用更宽的色彩空间BT2020,提供极致画质体验。从Android10开始,支持HDR视频播放。

一、HDR技术

HDR技术标准包括:Dolby-Vision、HDR10、HLG、PQ。支持HDR的编码器有HEVC和VP9。传输函数有ST-2084和HLG。元数据类型分为静态元数据和动态元数据。具体如下表所示:

 二、HDR解码

Android提供CodecCapabilities.profileLevels来判断是否支持HDR。对应的三种格式如下:

1、Dolby Vision

杜比视界对应MediaFormat的mimetype:

String MIMETYPE_VIDEO_DOLBY_VISION

对应的profileLevel:

int DolbyVisionProfileDvavPen
int DolbyVisionProfileDvavPer
int DolbyVisionProfileDvheDen
int DolbyVisionProfileDvheDer
int DolbyVisionProfileDvheDtb
int DolbyVisionProfileDvheDth
int DolbyVisionProfileDvheDtr
int DolbyVisionProfileDvheStn

2、HEVC的HDR10

HEVC解码器对应profileLevel:

int HEVCProfileMain10HDR10
int HEVCProfileMain10HDR10Plus

解码器需要支持解析SEI的metadata元数据,以及SPS中相关HDR信息(比如profile、level)。 

3、VP9的HLG与PQ

VP9解码器对应的profileLevel:

int VP9Profile2HDR
int VP9Profile2HDR10Plus
int VP9Profile3HDR
int VP9Profile3HDR10Plus

三、HDR渲染

Android提供Display.getHdrCapabilities来判断屏幕是否支持HDR渲染,相关常量如下:

  • int HDR_TYPE_HLG
  • int HDR_TYPE_HDR10
  • int HDR_TYPE_HDR10_PLUS
  • int HDR_TYPE_DOLBY_VISION
  • float INVALID_LUMINANCE

相关的方法如下:

  • float getDesiredMaxLuminance() // 最大亮度
  • float getDesiredMinLuminance() // 最小亮度
  • float getDesiredMaxAverageLuminance() // 最大平均亮度
  • int[] getSupportedHdrTypes() // 支持HDR类型

四、支持HDR的封装格式

HDR的封装格式有mp4、webm,如下表所示:

 HDR对应的技术、格式、解码器、元数据配置如下表所示:

五、HDR解码器通道

1、HDR10解码器通道

HDR信息在SEI或SPS中,解码器解析到HDR元数据后,传给surface渲染层,流程如下:

2、Dolby Vision解码器通道

dolby码流存储在mp4格式中。mimetype为"video/dolby-vision"的HDR轨道包含2-3层码流,包括:基础层、增强层、元数据层。解码流程如下:

3、VP9解码器通道

首先从webm/mkv容器提取metadata元数据,VP9解码器处理工作如下:

  • 接收普通码流进行解码;
  • 接收HDR静态元数据;
  • 传输静态/动态元数据给display显示层;

webm/mkv的metadata位于Tracks/TrackEntry/Video/Color,结构如下图:

 参考资料:

Android HDR视频

webm格式官方介绍

http://www.lryc.cn/news/248045.html

相关文章:

  • 【Java SE】带你在String类世界中遨游!!!
  • Android: ListView + ArrayAdapter 简单应用
  • 前端:实现二级菜单(点击实现二级菜单展开)
  • Spark-java版
  • RabbitMQ消息模型之Work Queues
  • vue3+ts 实现时间间隔选择器
  • PTA 魔法优惠券
  • P8A110-A120经典赛题
  • 文件基础知识
  • 二叉树OJ题之二
  • MySql表中添加emoji表情
  • 【新手解答1】深入探索 C 语言:变量名、形参 + 主调函数、被调函数 + 类和对象 + 源文件(.c 文件)、头文件(.h 文件)+ 库
  • 2023最新的软件测试热点面试题(答案+解析)
  • NCo3.1(08) - Nco3 服务器端编程
  • 【代码随想录】算法训练计划36
  • Python (十五) 面向对象之多继承问题
  • 广域网加速技术
  • 构建智能医患沟通:陪诊小程序开发实战
  • 插入区间[中等]
  • Android Bitmap 模糊效果实现 (二)
  • 初识Java 18-4 泛型
  • 家政保洁预约小程序app开发特点有哪些?
  • 【JavaEE初阶】 HTTP响应报文
  • PTA: 螺旋矩阵
  • SparkSQL远程调试(IDEA)
  • Vue2 Vue3 响应式实现原理
  • Android Tombstone 与Debuggerd 原理浅谈
  • Matlab 三维电力线重建
  • GoLang Filepath.Walk遍历优化
  • Java面向对象第7天