首页 » SEO优化 » view_videophp技巧_运用 HDR 技能创建高清视频播放器

view_videophp技巧_运用 HDR 技能创建高清视频播放器

duote123 2024-12-15 0

扫一扫用手机浏览

文章目录 [+]

什么是 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;

view_videophp技巧_运用 HDR 技能创建高清视频播放器

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 将利用该工具处理渲染图像。

view_videophp技巧_运用 HDR 技能创建高清视频播放器
(图片来自网络侵删)

// 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 功能履行到移动运用程序中的空想选择。

相关文章

html中php感化技巧_html有什么浸染

html有什么浸染?一、用户体验,例如title、alt用于阐明名词或阐明图片信息、label标签的活用;二、有利于SEO:和搜索...

SEO优化 2024-12-17 阅读0 评论0