网易首页 > 网易号 > 正文 申请入驻

使用 HDR 技术创建高清视频播放器

0
分享至

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。

在视频播放器中实施 HDR 的演练。

什么是 HDR 及其重要性
流媒体技术得到显着提升,视频分辨率越来越高,从480p或以下(称为标准清晰度或简称SD)到720p或以上(高清或简称HD)。
视频分辨率对所有应用程序都至关重要。我最近遇到的研究支持了这一点:62% 的人更有可能对提供低质量视频体验的品牌产生负面看法,而 57% 的人不太可能分享低质量的视频。考虑到这一点,难怪有如此多的新兴解决方案来提高视频分辨率。
一种解决方案是 HDR——高动态范围。它是一种用于成像和摄影的后处理方法,通过为黑暗区域提供更多细节并提高对比度来模仿人眼可以看到的内容。在视频播放器中使用时,HDR 可以提供分辨率更高的更丰富的视频。
然而,许多 HDR 解决方案都因烦人的限制而令人失望。这些可能包括缺乏统一的技术规范,实施难度大,以及对超高清视频的要求。我试图寻找没有此类限制的解决方案,幸运的是,我找到了一个。这就是 HMS Core Video Kit 的HDR Vivid SDK。该解决方案包含图像处理功能,例如光电传递函数 (OETF)、色调映射和 HDR2SDR。有了这些功能,SDK 可以为视频播放器配备更丰富的色彩、更高层次的细节等等。
我将SDK与HDR Ability SDK(也可以单独使用)一起使用,试用了后者的亮度调节功能,发现它们可以提供更好的HDR视频播放体验。在这一点上,我想分享一下我是如何使用这两个 SDK 来创建视频播放器的。
开发前
1.在AppGallery Connect中根据需要配置应用信息。
2、集成HMS Core SDK。
对于 Android Studio,可以通过 Maven 存储库集成 SDK。在开发过程之前,需要将SDK集成到Android Studio项目中。
3. 配置混淆脚本。
4、增加权限,包括访问互联网、获取网络状态、访问Wi-Fi网络、写入外接存储、读取外接存储数据、读取设备信息、查看设备是否root等权限获取唤醒锁。(最后三个权限是可选的。)

应用程序开发
准备工作
1. 检查设备是否能够解码 HDR Vivid 视频。如果设备具有这样的功能,则以下函数将返回true。

public boolean isSupportDecode() {
// Check whether the device supports MediaCodec.
MediaCodecList mcList = new MediaCodecList(MediaCodecList.ALL_CODECS);
MediaCodecInfo[] mcInfos = mcList.getCodecInfos();
for (MediaCodecInfo mci : mcInfos) {
// Filter out the encoder.
if (mci.isEncoder()) {
continue;
}
String[] types = mci.getSupportedTypes();
String typesArr = Arrays.toString(types);
// Filter out the non-HEVC decoder.
if (!typesArr.contains("hevc")) {
continue;
}
for (String type : types) {
// Check whether 10-bit HEVC decoding is supported.
MediaCodecInfo.CodecCapabilities codecCapabilities = mci.getCapabilitiesForType(type);
for (MediaCodecInfo.CodecProfileLevel codecProfileLevel : codecCapabilities.profileLevels) {
if (codecProfileLevel.profile == HEVCProfileMain10
|| codecProfileLevel.profile == HEVCProfileMain10HDR10
|| codecProfileLevel.profile == HEVCProfileMain10HDR10Plus) {
// true means supported.
return true;
}
}
}
}
// false means unsupported.
return false;


2. 解析视频以获得有关其分辨率、OETF、色彩空间和色彩格式的信息。然后将信息保存在自定义变量中。在下面的示例中,变量被命名为VideoInfo。
public class VideoInfo {
private int width;
private int height;
private int tf;
private int colorSpace;
private int colorFormat;
private long durationUs;
}
3. 创建一个SurfaceView对象,SDK 将使用该对象处理渲染图像。

// surface_view is defined in a layout file.
SurfaceView surfaceView = (SurfaceView) view.findViewById(R.id.surface_view);


4.创建一个线程来从视频中解析视频流。
渲染和转码视频
1. 创建并初始化HdrVividRender实例。

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


2. 配置视频源的 OETF 和分辨率。

// Configure the OETF.
hdrVividRender.setTransFunc(2);
// Configure the resolution.
hdrVividRender.setInputVideoSize(3840, 2160);


SDK 在安卓设备上使用时,只支持输入的渲染模式。
3. 配置输出亮度。此步骤是可选的。

hdrVividRender.setBrightness(700);


4. 创建一个Surface 对象,它将用作输入。HdrVividRender工作在渲染模式时会调用该方法,将创建的Surface对象作为configure的inputSurface参数传递给SDK。

Surface inputSurface = hdrVividRender.createInputSurface();


5. 配置输出参数。
设置渲染的Surface对象的尺寸。此步骤在输出的渲染模式中是必需的。

// surfaceView is the video playback window.
hdrVividRender.setOutputSurfaceSize(surfaceView.getWidth(), surfaceView.getHeight());

设置缓冲输出视频的色彩空间,可在转码模式下设置输出。此步骤是可选的。但是,当没有设置颜色空间时,默认使用 BT.709。

hdrVividRender.setColorSpace(HdrVividRender.COLORSPACE_P3);

设置缓冲输出视频的颜色格式,可在转码模式中设置输出。此步骤是可选的。但是,当没有指定颜色格式时,默认使用 R8G8B8A8。

hdrVividRender.setColorFormat(HdrVividRender.COLORFORMAT_R8G8B8A8);


6. 当使用渲染模式作为输出模式时,需要以下API。

hdrVividRender.configure(inputSurface, new HdrVividRender.InputCallback() {
@Override
public int onGetDynamicMetaData(HdrVividRender hdrVividRender, long pts) {
// Set the static metadata, which needs to be obtained from the video source.
HdrVividRender.StaticMetaData lastStaticMetaData = new HdrVividRender.StaticMetaData();
hdrVividRender.setStaticMetaData(lastStaticMetaData);
// Set the dynamic metadata, which also needs to be obtained from the video source.
ByteBuffer dynamicMetaData = ByteBuffer.allocateDirect(10);
hdrVividRender.setDynamicMetaData(20000, dynamicMetaData);
return 0;
}
}, surfaceView.getHolder().getSurface(), null);


7. 当使用转码模式作为输出模式时,调用如下接口。

hdrVividRender.configure(inputSurface, new HdrVividRender.InputCallback() {
@Override
public int onGetDynamicMetaData(HdrVividRender hdrVividRender, long pts) {
// Set the static metadata, which needs to be obtained from the video source.
HdrVividRender.StaticMetaData lastStaticMetaData = new HdrVividRender.StaticMetaData();
hdrVividRender.setStaticMetaData(lastStaticMetaData);
// Set the dynamic metadata, which also needs to be obtained from the video source.
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) {
// Process the buffered data.
}
});


new HdrVividRender.OutputCallback()用于异步处理返回的缓冲数据。如果不使用该方法,可以使用read方法代替。例如:

hdrVividRender.read(new BufferInfo(), 10); // 10 is a timestamp, which is determined by your app.


8. 启动处理流程。

hdrVividRender.start();


9.停止处理流程。

hdrVividRender.stop();


10.释放已经占用的资源。

hdrVividRender.release();
hdrVividRender = null;

在上述步骤中,我注意到当Surface的尺寸发生变化时,必须调用setOutputSurfaceSize来重新配置Surface输出的尺寸。
此外,在输出的渲染模式下,当WisePlayer从后台切换到前台或从后台切换到前台时,Surface对象会被销毁并重新创建。在这种情况下,有可能HdrVividRender实例没有被销毁。如果是这样,则需要调用setOutputSurface API,以便可以设置新的Surface输出。
设置 HDR 功能
HdrAbility类中提供了 HDR 功能。可用于HDR Vivid SDK在渲染或转码HDR Vivid视频时调整亮度。
1.初始化亮度调节功能。

HdrAbility.init(getApplicationContext());


2. 在设备上启用 HDR 功能。然后,设备屏幕的最大亮度将增加。

HdrAbility.setHdrAbility(true);


3. 配置输出视频图像数据中白点的替代最大亮度。

HdrAbility.setBrightness(600);


4. 使视频层高亮显示。

HdrAbility.setHdrLayer(surfaceView, true);


5.配置高亮字幕层或弹幕评论层的功能。

HdrAbility.setCaptionsLayer(captionView, 1.5f);

概括
视频分辨率是移动应用程序用户体验的重要影响因素。HDR 通常用于后期处理视频,但它受到许多限制的阻碍,这些限制由 Video Kit 的 HDR Vivid SDK 解决。
该 SDK 加载了图像处理功能,例如 OETF、色调映射和 HDR2SDR,因此它可以模仿人眼可以看到的内容,以提供身临其境的视频,这些视频可以在 HDR Ability SDK 的帮助下进一步增强相同的套件。这些 SDK 的功能和直接的集成过程使其成为将 HDR 功能实施到移动应用程序中的理想选择。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
奥尼尔:在骑士时有些嫉妒詹姆斯 我从未拥有过他那么大的权力

奥尼尔:在骑士时有些嫉妒詹姆斯 我从未拥有过他那么大的权力

直播吧
2024-04-26 22:06:21
公诉人:“别人打你,你为何要还手”?这起案子引起网友的民愤!

公诉人:“别人打你,你为何要还手”?这起案子引起网友的民愤!

辉哥说动漫
2024-04-24 18:49:38
搬救兵!朱芳雨连线巴特尔:你要是在场上 许钟豪都不敢放个屁

搬救兵!朱芳雨连线巴特尔:你要是在场上 许钟豪都不敢放个屁

818体育
2024-04-27 10:33:15
4元拿下5600亩地承包权,开鲁“张氏兄弟”身份曝光,果然不一般

4元拿下5600亩地承包权,开鲁“张氏兄弟”身份曝光,果然不一般

叶公子
2024-04-26 00:13:10
高层住宅在苏联时期已经证明是一个巨大的骗局,不适合兴建居住!

高层住宅在苏联时期已经证明是一个巨大的骗局,不适合兴建居住!

前沿科技学习分享圈
2024-04-20 13:56:38
朝鲜半岛突然打响!美韩军队对朝鲜商船开枪,朝鲜反击:直接开炮

朝鲜半岛突然打响!美韩军队对朝鲜商船开枪,朝鲜反击:直接开炮

天气观察站
2024-04-26 12:46:53
离岸人民币兑美元较周四纽约尾盘跌134点

离岸人民币兑美元较周四纽约尾盘跌134点

财联社
2024-04-27 05:35:12
3.5亿!重庆将新建一条都市圈环线铁路

3.5亿!重庆将新建一条都市圈环线铁路

笑熬浆糊111
2024-04-27 10:17:09
知名演员章子怡,4月23号突然在社交平台高调发文 并晒出大量照片

知名演员章子怡,4月23号突然在社交平台高调发文 并晒出大量照片

娱乐圈酸柠檬
2024-04-24 15:28:11
21+2+5!哈登里程碑之夜三分4连击却无奈空砍 卡椒合砍16分带不动

21+2+5!哈登里程碑之夜三分4连击却无奈空砍 卡椒合砍16分带不动

狍子歪解体坛
2024-04-27 10:43:36
大鱼来了?再见了,周琦!人家才是广东队的内线答案!

大鱼来了?再见了,周琦!人家才是广东队的内线答案!

绯雨儿
2024-04-27 04:00:03
韩国KG集团董事长:“对中国汽车有错误的印象,韩国需要反思”!

韩国KG集团董事长:“对中国汽车有错误的印象,韩国需要反思”!

虫虫杂谈
2024-04-26 20:10:05
我得罪县长被免职,到某局做清洁工,一天我的哥哥到某局检查工作

我得罪县长被免职,到某局做清洁工,一天我的哥哥到某局检查工作

乔生桂
2024-04-26 11:02:23
我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

叶天辰故事会
2024-04-23 22:26:35
阿姨淡定骑电瓶车 后面跟着一支自行车队“蹭风”

阿姨淡定骑电瓶车 后面跟着一支自行车队“蹭风”

闪电新闻
2024-04-26 15:55:19
C919飞机再度拿下百架大单,目录价格为何较半年前涨超9%?

C919飞机再度拿下百架大单,目录价格为何较半年前涨超9%?

界面新闻
2024-04-26 22:06:19
因涉嫌违法使用未经检验特种设备等,嘉兴一家三甲医院被处罚

因涉嫌违法使用未经检验特种设备等,嘉兴一家三甲医院被处罚

澎湃新闻
2024-04-26 22:22:44
限期180天,美要求中国军工企业退出俄市场,否则就全面封锁制裁

限期180天,美要求中国军工企业退出俄市场,否则就全面封锁制裁

环球Talk
2024-04-23 23:47:26
“中国的歼-20隐形战斗机可能很快将前往中东”!4月25日

“中国的歼-20隐形战斗机可能很快将前往中东”!4月25日

Mon巧的时尚品味
2024-04-26 16:45:07
有望底部起飞! 最具价值的25只超跌、优质小盘股

有望底部起飞! 最具价值的25只超跌、优质小盘股

艾克谈科技
2024-04-27 04:21:33
2024-04-27 13:48:49
墨谈科技
墨谈科技
业务数码玩家.无聊的博主
2778文章数 561关注度
往期回顾 全部

科技要闻

特斯拉这款车型刚上市几天,就上调价格

头条要闻

牛弹琴:越南两任国家主席辞职后 政坛又发生重大变动

头条要闻

牛弹琴:越南两任国家主席辞职后 政坛又发生重大变动

体育要闻

时代要落幕了?詹姆斯杜兰特陷0-3绝境

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

北京房价回到2016年

汽车要闻

5月上市/智能化丰富 海狮 07EV正式到店

态度原创

本地
游戏
时尚
数码
公开课

本地新闻

蛋友碰碰会空降西安!5.1山海境等你!

通过Steam Deck验证的《辐射4》表现似乎更差了

给中年女人的建议:不留长发,不穿花哨的衣服,也能美到老

数码要闻

Azulle 发布 Access Pro 迷你电脑棒:130 克重量、英特尔 N100

公开课

睡前进食会让你发胖吗?

无障碍浏览 进入关怀版