产品概述
产品功能
产品优势
系统 | 支持 Android6 以上系统 |
处理器架构 | 支持 arm64-v8a CPU 架构 |
处理器性能要求 | 支持高通骁龙8+ , 海思麒麟 980+ ,联发科mt6878+ 等 |
开发 IDE | Android Studio |
内存要求 | 大于 500MB |
common_model/ 如果有多个人物模型,可以共用一个基础模型包。human_xxxxx_540p_v2/,其中 xxxxx 为定制形象的名称。
virtualhuman_2d_sdk_v202502071637.aardependencies{implementation fileTree(dir: 'libs', include: ['*.aar'])// 添加依赖implementation'com.squareup.okhttp3:okhttp:4.9.0'implementation 'com.parse.bolts:bolts-tasks:1.4.0'}
// 设置日志级别VirtualHumanController.setLogLevel(Int level);// 设置日志回调VirtualHumanController.setLogCallback(IDataCallback logCallback);
日志等级 | 等级标识(level) |
关闭日志 | 0 |
错误日志 | 1 |
警告日志 | 2 |
信息日志 | 3 |
调试日志 | 4 |
追踪日志 | 5 |
参数名称 | 数据类型 | 参数类型 | 说明 |
level | int | 必要 | 日志等级 |
logMsg | String | 必要 | 日志信息 |
VirtualHumanParam vhParam = new VirtualHumanParam();// 本地模型路径vhParam.humanModelPath = "/data/user/0/com.tencent.virtualhuman_2d_demo/files/test_model/human_model";// 本地模型路径vhParam.commonModelPath = "/data/user/0/com.tencent.virtualhuman_2d_demo/files/test_model/common_model";vhParam.appId = "License的appId";vhParam.secretKey = "License的secretKey";vhParam.deviceName = "设备标记,建议用铭牌信息";// 错误回调函数vhParam.errorCallback = (code, message) -> {Log.d(TAG, "Code: " + code + ", Message: " + message);};// 事件回调函数vhParam.eventCallback = (code, message) -> {Log.d(TAG, "Code: " + code + ", Message: " + message);};controller = new VirtualHumanController(this, vhParam);int ret = controller.initHuman();if (ret == 0) {controller.setRenderView(virtualHumanView);// 设置渲染视图controller.startHuman();// 开始渲染} else {Log.i(TAG, "init fail=" + ret);}
参数名称 | 数据类型 | 必选 | 说明 |
humanModelPath | String | 是 | 本地模型路径。 |
commonModelPath | String | 是 | 本地通用模型路径。 |
appId | String | 是 | License 里的 AppId。 |
secretKey | String | 是 | License 里的 SecretKey。 |
eventCallback | IDataCallback | 否 | 事件回调函数,事件通知。 |
eventCallback | IDataCallback | 是 | 异常回调函数,监控异常信息。 |
deviceName | String | 否 | 设备别名,建议用铭牌信息 |
参数名称 | 数据类型 | 必选 | 说明 |
code | int | 是 | code |
message | String | 是 | 信息 |
错误编号 | 错误消息 |
20001 | 初始化算法模型错误。 |
20010 | 鉴权失败。 |
20012 | 设备性能不足,不能流畅运行。 |
错误编号 | 错误消息 |
10001 | 整段播报开始。 |
10002 | 整段播报结束。 |
10003 | controller.appendAudioData('音频数据',boolean,‘标记’)。 当调用 appendAudioData 传入标记参数时。10003代表播放该段音频数据时的开始事件,并将标记在回调事件中返回。 |
10004 | controller.appendAudioData('音频数据',boolean,‘标记’)。 当调用 appendAudioData 传入标记参数时。10003代表播放该段音频数据时的结束事件,并将标记在回调事件中返回。 |
10005 | 数智人首帧图像渲染的回调事件。 |
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/ll_floating_ball"android:layout_width="180dp"android:layout_height="320dp"android:background="#8f15ab71"android:gravity="center"android:orientation="horizontal"><com.tencent.virtualhuman_2d_sdk.VirtualHumanViewandroid:id="@+id/virtual_human_view"app:TVHFillMode="fill" // 渲染 View 的填充模式android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout></LinearLayout>
<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/ll_container"android:layout_width="480dp"android:layout_height="480dp"android:background="#8f15ab71"android:gravity="center"android:orientation="horizontal"></LinearLayout></LinearLayout>
// context是当前Activity界面的上下文VirtualHumanView virtualHumanView = new VirtualHumanView(context);virtualHumanView.setFillMode(VirtualHumanViewType.fill);LinearLayout ll_container = findViewById(R.id.ll_container);ll_container.addView(virtualHumanView);
VirtualHumanViewType.stretch | 拉伸图像 |
VirtualHumanViewType.fit | 裁切图像 |
VirtualHumanViewType.fill | 保留黑边(透明边) |
参数名称 | 数据类型 | 参数类型 | 说明 |
virtualHumanView | VirtualHumanView | 必要 |
controller.setRenderView(virtualHumanView);
参数名称 | 数据类型 | 参数类型 | 说明 |
decodedBytes | Byte[] | 是 | PCM 的音频数据。 |
isFinal | Boolean | 是 | 是否是音频尾帧。 |
metaData | String | 否 | 传入对应音频数据的标记,当播报该音频分片时会有对应事件10003/10004。 |
controller.appendAudioData(decodedBytes, isFinal);controller.appendAudioData(decodedBytes, isFinal, metaData);
controller.interrupt();
controller.pause();
controller.resume();


1、参考上文创建数智人控制器controller = new VirtualHumanController(DemoActivity.this, vhParam);int ret = controller.initHuman();// 初始化数智人if (ret == 0) {2、 不调用setRenderView,直接开始渲染controller.startHuman();} else {Log.i(TAG, "init fail=" + ret);}3、监听错误回调errorCallback的返回值,假如在一段时间内出现了20012这个错误码,说明该设备性能不足,不能流畅运行
implementation 'com.parse.bolts:bolts-tasks:1.4.0'。vhParam.bindDevice 参数移除。controller.setRenderView(virtualHumanView); 改成如下写法:int ret = controller.initHuman();if (ret == 0) {controller.setRenderView(virtualHumanView);controller.startHuman();} else {Log.i(TAG, "init fail=" + ret);}
文档反馈