# DUIX本地渲染SDK安卓集成文档_v1

更新时间:2023年12月11日16:57:24

本文介绍了如何使用硅基数字人服务提供的DUIX本地渲染Android SDK,包括下载安装、关键接口及代码示例。

# 物料准备

dh_mobile_lib_release_0.0.1.aar
duix_dh_sdk_2.0.3.jar

# 下载安装

  1. 下载duix_dh_sample_android_1.0.1.zip (opens new window)
  2. 解压zip包,在DHSample/app/libs目录下获取AAR包和JAR包,将SDK包集成到您的工程项目中进行依赖。
  3. 使用Android Studio打开此工程查看参考代码实现,其中本地渲染交互的主要代码在CallActivity.java文件中。

# Gradle配置

工程下app模块添加如下配置:

dependencies {
    implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
    
    // sdk中使用到exoplayer处理音频
    implementation 'com.google.android.exoplayer:exoplayer:2.14.2'

    ...
}

# 权限处理

在SDK中需要获取网络权限


<uses-permission android:name="android.permission.INTERNET" />

# SDK关键接口

  • DUIX构造函数

/**
* @param appId 在DUIX平台"资源和管理"->"应用"->对应应用的AppID
* @param appKey 在DUIX平台"资源和管理"->"应用"->对应应用的密钥
* @param surfaceView 展示数字人的控件
* @param callback 渲染SDK的所有回调事件
*/
public DUIX(Context context, String appId, String appKey, SurfaceView surfaceView, Callback callback) {
    
}

其中Callback接口包含如下回调:

  1. onEvent: 在SDK初始化,渲染驱动都会回调该函数。

    /**
    * @param event 回调事件
    * @param msg 异常时携带的错误消息。
    * @param info 回调时绑定的数据
    */
    void onEvent(String event, String msg, Object info);
    

    常见的事件类型:

    事件 说明
    init.ready 初始化成功
    init.error 初始化异常,在msg参数中查看错误原因
    play.start 数字人开始驱动音频
    play.end 音频播报完毕
  • init: 初始化DUIX服务,在Activity的onCreate阶段调用,可以在该阶段传递背景图或背景颜色

    /**
    * @param modelDir 模型文件夹的路径
    * @param baseConfigDir 基础配置文件夹的路径
    * @param bgColor 背景颜色
    */
    public void init(String modelDir, String baseConfigDir, int bgColor) 
    
    /**
    * @param modelDir 模型文件夹的路径
    * @param baseConfigDir 基础配置文件夹的路径
    * @param bgPath 背景图的本地路径
    */
    public void init(String modelDir, String baseConfigDir, String bgPath)
    
  • release: 释放DUIX资源

// 断开DUIX服务连接,释放资源。在关闭页面时一定要调用,否则会造成内存泄露
public void release()
  • isReady: 是否初始化完成
public boolean isReady()
  • play: 播放本地wav音频或网络wav音频(注意:网络音频必须提供准确的音频总时长)
/**
* @param localPath 本地wav文件的sdcard存储路径
* @param key 发起任务的标示,可以填""。在回调时会回调该值
*/
play(String localPath, String key)

/**
* @param url 网络wav文件的链接地址
* @param duration 网络音频的总时长
* @param key 发起任务的标示,可以填""。在回调时会回调该值
*/
play(String url, long duration, String key)
  • stop: 主动停止数字人播报
public void stop()
  • getCurrentPosition: 获取当前音频的播报进度,单位毫秒

    public long getCurrentPosition()
    

# 调用步骤

  1. 启动DUIX服务前需要准备好授权的appId,appKey以及同步数字人需要的基础配置和模型文件。
  2. 使用DUIX构造函数创建DUIX服务对象。
  3. init初始化数字人渲染服务。
  4. 在回调中监听"init.ready"及"init.error"以获取数字人初始化是否完成。
  5. 调用paly函数驱动数字人播报。
  6. 调用stop函数可以主动停止播报。
  7. 使用release释放本地资源。

# Proguard配置

如果代码使用了混淆,请在proguard-rules.pro中配置:

-keep class com.btows.ncnntest.**{*; }

# 代码示例

  • DUIX参数设置及连接

    duix = DUIX(mContext, appId, appKey, binding.surfaceView) { event, msg, info ->
                Log.e("123", "DUIX.onEvent event: $event info: $info")
                runOnUiThread {
                    when (event) {
                        Constant.CALLBACK_EVENT_INIT_READY -> {
                        	// 初始化成功
                            initOk()
                        }
    
                        Constant.CALLBACK_EVENT_INIT_ERROR -> {
                            Toast.makeText(mContext, "DUIX init error: $msg", Toast.LENGTH_SHORT).show()
                        }
    
                        Constant.CALLBACK_EVENT_PLAY_START -> {
                            Log.e(TAG, "开始播放: $info")
                        }
    
                        Constant.CALLBACK_EVENT_PLAY_END -> {
                            Log.e(TAG, "结束播放: $info")
                        }
                    }
                }
            }
    // 异步回调结果
    duix?.init(modelDir, baseDir, Color.YELLOW)
    
  • 驱动数字人渲染

    // 驱动数字人渲染,在播报完成后会在onEvent()函数中回调结束事件
    val wavFile = File(mContext.externalCacheDir, "test.wav")
    duix?.play(wavFile.absolutePath, "d39caddd-488b-4682-b6d1-13549b135dd1")
    
    
    duix?.play("https://....test.wav", "d39caddd-488b-4682-b6d1-13549b135dd1")
    
  • 主动停止播报

    duix?.stop()
    
  • 获取音频播报进度

    // 返回音频播报的毫秒进度
    val current = duix?.getCurrentPosition()
    
  • 关闭会话释放资源

    duix?.release()
    

# 注意事项

  1. 驱动渲染必须正确的配置基础配置文件和对应模型的的存储路径。