更新记录

1.0.1(2026-01-21)

一、文档细则补充

1.0.0(2026-01-21)

  • 初始版本发布
  • 支持 DUIX 数字人模型加载与渲染
  • 支持音频播放(WAV 文件、PCM 流)
  • 支持动作控制(命名动作、随机动作)
  • 支持音量控制和静音
  • 完整的事件回调机制

    更新日志

[1.0.0] - 2026-01-13

新增

  • 初始版本发布
  • 支持 DUIX 数字人模型加载与渲染
  • 支持音频播放(WAV 文件、PCM 流)
  • 支持动作控制(命名动作、随机动作)
  • 支持音量控制和静音
  • 完整的事件回调机制

技术实现

  • 采用组件化设计,视图组件 + API 方法
  • Hybrid.kt 作为核心能力入口
  • HlDuixViewNativeView.kt 实现数字人视图
  • 完整的生命周期管理

平台支持

  • Android: 完整支持(minSdk 24)
  • iOS: 完整支持(iOS 12.0+)
  • HarmonyOS: 暂不支持

平台兼容性

uni-app(4.76)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - × × × - 5.0 12 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

DUIX 数字人视图插件

基于 DUIX SDK 的数字人渲染与交互 UTS 插件,支持 Android 和 iOS 双平台。

功能特性

  • 数字人模型加载与渲染
  • 背景图片设置
  • 音频播放(WAV 文件)
  • PCM 音频流播放(支持流式 TTS)
  • 动作控制(命名动作、随机动作)
  • 音量控制
  • 完整的事件回调机制
  • 调试模式
  • 资源下载与本地复制(iOS 和 Android)

平台支持

  • Android:完整支持(minSdk 24)
  • iOS:完整支持(iOS 12.0+)

使用方法

基本用法

注意()需要在nvue页面中使用

<template>
  <view class="container">
    <hl-duix-view
      ref="duixView"
      :modelUrl="modelUrl"
      :backgroundUrl="backgroundUrl"
      :debug="true"
      :autoInit="false"
      @init-ready="onInitReady"
      @init-error="onInitError"
      @audio-play-start="onAudioPlayStart"
      @audio-play-end="onAudioPlayEnd"
      style="width: 100%; height: 100%;"
    />
  </view>
</template>

<script setup>
import { ref, onReady } from 'vue'

const duixView = ref(null)
const modelUrl = ref('https://example.com/model.zip')
const backgroundUrl = ref('/static/bg.png')

onReady(() => {
  // 手动初始化
  duixView.value.initialize(modelUrl.value)
})

const onInitReady = (e) => {
  console.log('DUIX 初始化成功', e.modelInfo)
  // 可以开始播放音频或控制动作
}

const onInitError = (e) => {
  console.error('DUIX 初始化失败', e.message)
}

const onAudioPlayStart = () => {
  console.log('音频播放开始')
}

const onAudioPlayEnd = () => {
  console.log('音频播放结束')
}

// 播放音频
const playAudio = () => {
  duixView.value.playAudio('/path/to/audio.wav')
}

// 启动动作
const startMotion = () => {
  duixView.value.startMotion('smile', true)
}

// 设置音量
const setVolume = (volume) => {
  duixView.value.setVolume(volume)
}
</script>

流式 TTS 播放示例

// 开始 PCM 推送
duixView.value.startPushPcm()

// 推送 PCM 数据(base64 格式)
const base64Data = uni.arrayBufferToBase64(pcmBuffer)
duixView.value.pushPcmDataBase64(base64Data)

// 停止推送
duixView.value.stopPushPcm()

API 文档

Props

属性 类型 默认值 说明
modelUrl String "" 模型 URL 或本地路径(必需)
backgroundUrl String "" 背景图片 URL 或本地路径
debug Boolean false 是否启用调试模式
autoInit Boolean true 是否自动初始化

Events

事件名 参数 说明
init-ready { modelInfo } 初始化成功
init-error { message, debugInfo } 初始化失败
audio-play-start - 音频播放开始
audio-play-end - 音频播放结束
audio-play-error { message } 音频播放错误
motion-start - 动作开始
motion-end - 动作结束
debug { message } 调试消息(仅 debug=true)

Methods

方法名 参数 说明
initialize(url?) url?: String 手动初始化 DUIX
playAudio(filePath) filePath: String 播放音频文件
playPcmStream(filePath) filePath: String 播放 PCM 流
startPushPcm() - 开始推送 PCM 数据
pushPcmData(data) data: ByteArray/Data 推送 PCM 数据
pushPcmDataBase64(data) data: String 推送 PCM 数据(base64)
stopPushPcm() - 停止推送 PCM 数据
startMotion(name, immediate) name: String, immediate: Boolean 启动指定动作
startRandomMotion(enabled) enabled: Boolean 启动随机动作
setVolume(volume) volume: Number (0.0-1.0) 设置音量
stopAudio() - 停止音频播放
destroy() - 释放资源

UTS API 方法

插件还提供了独立的 API 方法用于资源管理:

import { downloadBaseConfig, downloadModel, copyLocalResource } from '@/uni_modules/hl-duix-view'

// 下载基础配置
await downloadBaseConfig('https://example.com/config.zip', (result) => {
  console.log(result.event, result.progress, result.message)
})

// 下载模型
await downloadModel('https://example.com/model.zip', (result) => {
  console.log(result.event, result.progress, result.message)
})

// 复制本地资源
await copyLocalResource('/path/to/source', 'targetName', (result) => {
  console.log(result.event, result.progress, result.message)
})

注意事项

通用

  1. 权限要求:需要网络、音频录制、存储读写权限

  2. 模型格式:支持 DUIX SDK 标准模型格式(.zip)

  3. 音频格式

    • WAV:标准 WAV 格式
    • PCM:16kHz、16-bit、单声道
  4. 资源释放:页面卸载时会自动调用 destroy()

  5. PCM 流式播放:需要至少 1 秒的音频数据(32000 字节)才能驱动口型

  6. 背景图路径

    • 在 nvue 页面中需要转换为绝对路径:
      // #ifdef APP-PLUS
      bgImage.value = plus.io.convertLocalFileSystemURL('_www/static/bg.png')
      // #endif

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络访问、音频录制、存储读写

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: