一、集成步骤
1. 在项目中使用时,您需要把 ivhfilamentsdk-release-X.X.X.aar (X.X.X 请替换为实际最新版本号) 放入 App 模块下的 libs 文件夹中,并在 build.gradle 文件中添加导入。
implementation files('libs/ivhfilamentsdk-release-X.X.X.aar')
2. ivhfilamentsdk 强依赖于 okhttp3 库,您需要手动将相关依赖导入。
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
3. 在项目的 proguard-rules.pro 中添加如下混淆规则:
-keep class com.google.android.filament.proguard.UsedBy*-keep @com.google.android.filament.proguard.UsedBy* class * {<init>();}-keepclassmembers class * {@com.google.android.filament.proguard.UsedBy* *;}-keep class com.google.android.filament.utils.** { *; }-keepclassmembers class com.google.android.filament.utils.** { *; }
4. 在 app/src/main/AndroidManifest.xml 文件中添加如下代码,获取相应的设备权限。
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
5. 在需要插入数智人渲染的 layout 布局中添加数智人端渲染组件。
<com.tencent.ivhfilamentsdk.Ivhandroid:id="@+id/ivh"android:layout_width="match_parent"android:layout_height="match_parent"/>
6. 在 Activity 中获取自定义组件,传入自己项目的模型及项目信息配置等进行初始化。
var mIvh = findViewById(R.id.ivh)var mIvhParams = IvhParams()mIvhParams.modelPath = "xx.glb"mIvhParams.configPath = "xx.json"mIvhParams.appkey = "xxx"mIvhParams.accesstoken = "xxx"mIvhParams.virtualmanProjectId = "xxx"mIvh.init(mIvhParams,object : WebSocketListener(){ ...... })
二、接口说明
1. init(params: IvhParams, listener: WebSocketListener)
数智人端渲染初始化
params 说明
属性名称 | 必选 | 类型 | 说明 |
modelPath | 是 | String | 本地 glb 模型的文件路径 |
configPath | 是 | String | 本地 glb 模型配置的文件路径 |
appkey | 是 | String | 数智人平台账号 appkey |
accesstoken | 是 | String | 数智人平台账号 accesstoken |
virtualmanProjectId | 是 | String | 数智人项目 id |
httpOrigin | 否 | String | 自定义时指定 HTTP 协议的域名 |
wsOrigin | 否 | String | 自定义时指定 socket 协议的域名 |
isIntellAction | 否 | Boolean | 是否开启智能动作,默认开启 |
listener 说明
名称 | 类型 | 方法和说明 |
onOpen | void | onOpen(WebSocket webSocket, Response response)<br>当 WebSocket 已被远程方接受并可以开始传输消息时调用。 |
onMessage | void | onMessage(WebSocket webSocket, String text)<br>当收到文本(类型)消息时调用。 |
onClosing | void | onClosing(WebSocket webSocket, int code, String reason)<br>当远程方指示不再传输传入消息时调用。 |
onFailure | void | onFailure(WebSocket webSocket, Throwable t, Response response)<br>当 WebSocket 因读取或写入网络时发生错误而关闭时调用。 |
2. on("事件名称",callback: (String,String) -> Unit)
目前支持的事件
事件名 | 说明 | 返回值 |
init | 初始化结束 | init,end |
action | 动作执行情况 | 动作名,start/end |
mouth | 口型播报状态 | mouth,start/end。 |
sentence | 分句事件 | seqNo,start/end。(非离线才有) |
error | 发生异常 | 错误类型,相关详情 |
debug | 返回请求耗时 | 返回 socket/http 请求的耗时,单位 ms |
3. pause()
休眠, 暂停渲染数智人画面。
4. resume()
唤醒, 恢复渲染数智人画面。
5. destroy()
销毁渲染数智人。
6. getAnimationList(): Array\\<String\\>
获取当前模型的动作列表。
7. playAction(String)
播放指定动作,传入执行的动作名称。
8. playActions(Array\\<String\\>)
播放指定的一组动作<br> PS:批量执行动作需要关闭智能动作,以防智能动作打乱指定动作的播放顺序。
9. stopAction()
如果当前动作不是静默,会停止动作切回静默。
10. enableAudio()
启用音频播放,默认开启。
11. disableAudio()
禁用音频播报。
12. stop()
停止播报文本 + 动作。
13. setPosition(x: Float,y: Float,z: Float)
位置调整,xyz 轴的位置。
14. setRotationAngle(deg: Float)
设置旋转角度。
15. getActionConfig(key: String,callback: (String?) -> Unit )
获取场景指令配置。
key 是交互平台里配置的场景指令标识,callback 返回是 json 形式的字符串,如果获取不到为空。
16. getRotationAngle(): Float
获取当前模型已经旋转的角度。
17. play(text: String, option: MutableMap\\<String, \\*\\>?)
驱动文本/对话。
text 针对 option 里的 driverType 类型说明
driverType 取值 | text |
text | 要驱动的文本, 支持 ssml 标签 |
stream_text | 要驱动的流式文本, 不支持 ssml 标签, 支持 markdown 语法 |
chat | 提问的文本 |
option 说明
属性名称 | 必选 | 类型 | 说明 |
driverType | 否 | String | text:文本驱动, stream_text:流式文本驱动, chat: 对话 |
streamId | 否 | String | 32 位 uuid, 不带"-", 大模型多端同步记录的话, 需要自己传入 |
seq | 否 | Int | 当为流式驱动时,必传。从 1 开始 |
isFinal | 否 | Boolean | 当为流式驱动时,必传。为 true 代表流式结束 |
18. playOffline()
离线时口型固定循环播放。
19. stopOffline()
离线口型循环停止。