HarmonyOS 鸿蒙Next Native层取到音频或图片数据流怎么传到arkts层?
HarmonyOS 鸿蒙Next Native层取到音频或图片数据流怎么传到arkts层?
在Native层取到音频或图片数据流,音频或图片数据流怎么才能传到arkts层?
可以通过arraybuffer实现 ArkTS 与 Native C++ 之间的音频数据相互传递 。
Native C++ 侧接受传入的 ArkTS Array,通过 napi_get_typedarray_info 将获取到的数据传入数组 typedarray 生成 input_buffer ,然后通过 napi_get_arraybuffer_info 获取数组数据。
ArkTS 侧接收 Native C++ 侧返回的 Array,通过 napi_create_arraybuffer 创建一个 arraybuffer 数组,根据创建的 arraybuffer 通过 napi_create_typedarray 创建一个 typedarray 并将 arraybuffer 存入 output_array,然后给 arraybuffer 赋值,最后返回 output_array。
Native侧接受传入的 ArkTS Array
static napi_value TS2NAPI(napi_env env, napi_callback_info info)
{
// 获取TS层传来的参数
size_t argc = 1;
napi_value args;
napi_get_cb_info(env, info, &argc, &args, NULL, NULL);
napi_value input_array = args;
// 数据类型
napi_typedarray_type type;
napi_value input_buffer;
//数据偏移
size_t byte_offset;
//数据字节大小
size_t i, length;
napi_get_typedarray_info(env, input_array, &type, &length, NULL, &input_buffer, &byte_offset);
//获取数组数据
void *data;
size_t byte_length;
napi_get_arraybuffer_info(env, input_buffer, &data, &byte_length);
//遍历数组
if (type == napi_int32_array) {
int32_t *data_bytes = (int32_t *)(data);
for (i = 0; i < length/sizeof(int32_t); i++) {
OH_LOG_INFO(LOG_APP, "TS2NAPI: C++ %{public}d", *((int32_t *)(data_bytes) + i));
}
}
return NULL;
}
TS侧接收 Native侧返回的Array
//NAPI层 array 传到TS层
static napi_value NAPI2TS(napi_env env, napi_callback_info info)
{
// 数据个数
int num = 10;
// 创建output_buffer
napi_value output_buffer;
void *output_ptr = NULL;
napi_create_arraybuffer(env, num * sizeof(int32_t), &output_ptr, &output_buffer);
// output_array
napi_value output_array;
napi_create_typedarray(env, napi_int32_array, num, output_buffer, 0, &output_array);
int32_t * output_bytes = (int32_t *)output_ptr;
for (int32_t i = 0; i < num; i++) {
output_bytes[i] = i;
}
for (int32_t i = 0; i < num; i++) {
OH_LOG_INFO(LOG_APP, "NAPI2TS: C++ %{public}d", *((int32_t *)(output_ptr) + i));
}
return output_array;
}
Index.ets
@Entry
@Component
struct Index {
napiArray?:Int32Array
build() {
Row() {
Column() {
Button("NAPI2TS")//接收Native侧返回的Array
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.napiArray= testNapi.NAPI2TS()
for(let num of this.napiArray) {
console.info("NAPI2TS: JS " + num.toString())
}
})
//向Native侧传入Array
Button("TS2NAPI")
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
if(this.napiArray){
testNapi.TS2NAPI(this.napiArray)
for(let num of this.napiArray) {
console.info("TS2NAPI: JS " + num.toString())
}
}
})
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS 鸿蒙Next Native层取到音频或图片数据流怎么传到arkts层?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,将Native层获取的音频或图片数据流传递到ArkTS层,可以通过以下几种方式实现:
-
文件传输:
- 在Native层将音频或图片数据编码并保存到本地存储。
- 在ArkTS层通过文件读取的方式获取这些数据,并利用相应的解码库进行解码显示或播放。
-
数据流传输:
- 在Native层实时读取音频或图片数据,并通过网络或其他数据流方式传输到ArkTS层。
- ArkTS层负责接收这些数据流,并进行实时处理、显示或播放。
-
跨语言通信机制:
- 利用HarmonyOS提供的跨语言通信机制(如IPC或DataAbility)实现Native层与ArkTS层之间的数据传递。
- 在Native层将音频或图片数据封装成适合传输的格式,并通过跨语言通信机制发送到ArkTS层。
- ArkTS层接收数据后,进行解析并展示。
以上方法可以根据具体应用场景和需求选择。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。