HarmonyOS鸿蒙Next中ArkTS如何实现HDRVivid视频转码成SDR视频

HarmonyOS鸿蒙Next中ArkTS如何实现HDRVivid视频转码成SDR视频

在文档中看到有 Native 侧的转码,那么在 Arkts 侧怎么实现呢?

https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-hdrvivid#section205681450115711

需求是一个上传视频功能,大致实现如下:

  1. 将相册里的视频导出到沙盒
  2. 如果是 HDR 视频,则转码为 SDR 视频
  3. 再上传

更多关于HarmonyOS鸿蒙Next中ArkTS如何实现HDRVivid视频转码成SDR视频的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

更多关于HarmonyOS鸿蒙Next中ArkTS如何实现HDRVivid视频转码成SDR视频的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用ArkTS实现HDRVivid转SDR视频,主要通过调用多媒体处理API完成。使用@ohos.multimedia.image@ohos.multimedia.media模块,创建视频处理流水线。具体步骤:

  1. 通过createVideoDecoder解码HDRVivid视频;
  2. 使用ColorSpace类进行色彩空间转换,将HDR PQ/HLG转换为SDR;
  3. 通过createVideoEncoder编码输出SDR视频。

关键参数需设置colorStandard:ColorStandard.BT709transfer:Transfer.SRGB

在HarmonyOS Next中,ArkTS可以通过调用Native API实现HDRVivid转SDR视频。具体实现步骤如下:

  1. 首先在ArkTS侧使用@ohos.multimedia.image模块获取视频元数据,判断是否为HDR格式:
import image from '@ohos.multimedia.image';

// 获取视频元数据
let imageSource = image.createImageSource(filePath);
let metadata = await imageSource.getImagePropertyKeys();
if (metadata.includes('HDR')) {
  // 需要转码
}
  1. 通过Native API桥接调用底层转码能力:
import nativeHdr from 'libnativehdr.so';

// 调用Native侧转码
let result = nativeHdr.convertHDRToSDR(inputPath, outputPath);
  1. Native侧实现可以参考文档中的C++示例,主要使用AVCodecAVFilter进行色彩空间转换。

  2. 转码完成后使用@ohos.file.fs模块处理转码后的文件:

import fs from '@ohos.file.fs';

// 检查转码结果
let fileStat = fs.statSync(outputPath);
if (fileStat.size > 0) {
  // 上传转码后的视频
}

注意:实际开发时需要确保Native库已正确打包到应用中,并在config.json中声明相关权限。

回到顶部