【每日学点鸿蒙知识】tensorflowlite编译、音频编码线程、沉浸式状态栏、TextArea最大字节数限制等

1、如何编译Tensorflow lite库?

之前项目基于tflite推理引擎做人脸识别的功能,鸿蒙侧如何复用tflite模型?

tflite对Android和iOS本身支配了GPU支持,但是鸿蒙侧目前并没有,鸿蒙提供了自己的推理引擎,而且支持将tflite模型转换为鸿蒙推理引擎模型,建议使用鸿蒙官方方案。

2、音频编码需要单独设置线程吗?

编码可以不另外起线程,系统的编解码会起线程。写文件是应用自己根据自身需求另外起线程处理。

3、创建音频编码器配置参数报错

复制代码
// 通过 codecname 创建编码器
OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_AUDIO_MPEG, true);
const char *name = OH_AVCapability_GetName(capability);
audioEnc_ = OH_AudioCodec_CreateByName(name);

 // 配置最大输入长度, 每帧音频数据的大小(可选)
    uint32_t DEFAULT_MAX_INPUT_SIZE = inSamplerate * TIME_PER_FRAME * inChannel * sizeof(short); // aac
    OH_AVFormat *format = OH_AVFormat_Create();
    // 写入format
    OH_AVFormat_SetIntValue(format,OH_MD_KEY_AUD_CHANNEL_COUNT, inChannel);
    OH_AVFormat_SetIntValue(format,OH_MD_KEY_AUD_SAMPLE_RATE, inSamplerate);
    OH_AVFormat_SetLongValue(format,OH_MD_KEY_BITRATE, outBitrate);
    OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, SAMPLE_FORMAT);
    OH_AVFormat_SetLongValue(format,OH_MD_KEY_CHANNEL_LAYOUT, CHANNEL_LAYOUT);
//     OH_AVFormat_SetIntValue(format,OH_MD_KEY_MAX_INPUT_SIZE, DEFAULT_MAX_INPUT_SIZE);
    // 配置编码器
    ret = OH_AudioCodec_Configure(audioEnc_, format);
    if (ret != AV_ERR_OK) {
        printLog("configure failed");
    }

传入参数:采样率48000, 声道数2, 码率128,ret返回为3:

复制代码
/**  
 * @error invalid argument. */
AV_ERR_INVALID_VAL = 3,

输出码率设置太低,改成128000。

4、如何设置沉浸式状态栏?

在UIAbility onWindowStageCreate方法中设置沉浸式状态栏:

复制代码
async function enterImmersion(windowClass: window.Window) {  
  // 设置窗口布局为沉浸式布局  
  await windowClass.setWindowLayoutFullScreen(true)  
}

async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {  
  await enterImmersion(windowClass)  
}

5、如何设置TextArea最大允许输入字节数?

可以在onChange回调中,自行计算当前输入的字节长度(参考示例如下),再与服务端的最大字节长度做对比,若超出则禁止输入:

复制代码
export function CalUtf8BytesLen(str: string): number {  
  let length = 0;  
  for (const char of str) {  
    let code = char.charCodeAt(0);  
    if (code <= 0x7f) {  
      length += 1; // 0xxxxxxx  
    } else if (code <= 0x7ff) {  
      length += 2; // 110xxxxx 10xxxxxx  
    } else if (code >= 0xd800 && code <= 0xdfff) {  
      // surrogate pair  
      if (char.length === 2) {  
        code = (char.charCodeAt(0) - 0xd800) * 0x400 + char.charCodeAt(1) - 0xdc00 + 0x10000;  
        length += 4; // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
      } else {  
        throw new Error('Invalid surrogate pair');  
      }  
    } else {  
      length += 3; // 1110xxxx 10xxxxxx 10xxxxxx  
    }  
  }  return length;  
}
相关推荐
做萤石二次开发的哈哈3 小时前
萤石开放平台如何拉取 RTC 房间成员列表?
音视频·萤石开放平台
爱吃大芒果3 小时前
复刻 HarmonyKit 工具箱:基于新版 @kit 开发本地工具 App
华为·harmonyos
风华圆舞3 小时前
鸿蒙上跑通第一个 AI Agent:5 分钟接入智谱/DeepSeek
人工智能·华为·harmonyos·arkts·arkui·toolregistry
离离原上草773 小时前
Pavo AI Agent 源码深度解析:从自然语言故事到视频分镜的 Multi-Agent 工程实践
人工智能·音视频
xd1855785554 小时前
电影匹配引擎-基于鸿蒙的心情电影推荐应用开发实践
人工智能·安全·华为·harmonyos·鸿蒙
YWamy5 小时前
播放器类音视频 SDK 选型指南:主流产品对比与适配建议
音视频
千逐685 小时前
HarmonyOS 实战 | @State 不神秘——变量一变界面就跟着变
华为·harmonyos·鸿蒙
不才难以繁此生6 小时前
NavPathStack 返回错页怎么排查:中式美食详情页从搜索、收藏和推荐进入怎么回到原处
harmonyos·arkts·arkui·中式美食·navpathstack
weixin_446260856 小时前
HumanForge:基于多智能体伪造推理的以人为中心深度伪造视频基准
人工智能·音视频
美狐美颜SDK开放平台6 小时前
从RTC到AI美颜:直播APP开发中的直播美颜SDK技术架构解析
人工智能·音视频·实时音视频·美颜sdk·视频美颜sdk·美颜api