星尘交互数字人Web SDK 标准化文档

更新时间:

星尘数字人Web SDK交互文档详情。

概述

星尘Xingchen-Avatar-SDK是通义星尘推出的一个实时流媒体数字人Web SDK(JavaScript 库),具备低延迟、高性能、高并发、跨平台等优势, 结合阿里云的RTC、语音交互、渲染引擎、脸部和肢体驱动等技术,提供多种数字人解决方案,帮助企业和开发者快速集成数字人,打造数字人各种场景应用。

产品优势

  • 高性能低延迟

  • 轻松集成、标准化输出

  • 多种数字人解决方案提供支持

产品能力

  • 云端渲染数字人

  • 云端渲染数字人是通过阿里云RTC提供视频流订阅,SDK在浏览器上拉取视频流呈现数字人的解决方案。

  • 云端渲染数字人具备完整的语音交互、脸部和肢体驱动能力,提供数字人打断、多种对话模式。

  • 端测渲染(端到端)数字人

  • 端测渲染数字人是通过阿里云RTC提供音频和模型脸部肢体动作数据,SDK在浏览器上通过拉取数据并使用WebGL渲染数字人的解决方案。

  • 端测渲染(端到端)数据人同样具备完整的语音交互、脸部和肢体驱动能力,同样提供数字人打断、多种对话模式。

  • 单独输出数字人

  • 单独输出数字人是基于标准WebSocket能力,接入方提供第三方LLM返回的二进制音频数据,SDK根据第三方提供的音频数据在浏览器上使用WebGL渲染数字人的解决方案。

  • 单独输出数字人由于依托于接入方提供的二进制音频数据,所以不具备完整的语音交互。但是会根据第三方的二进制音频数据做出同样的脸部和肢体驱动。

接入前须知

  • 受浏览器底层WebSocket、底层录音权限、WebRTC等限制,本地开发环境仅支持使用localhost运行。生产环境上页面协议请使用HTTPS,否则会出现录音权限获取失败、拉流播放失败等问题。

  • 云端渲染数字人、端测渲染(端到端)数字人的语音交互模式主要有三种模式:push2talk模式、tap2talk模式、duplex双工模式

  • 在push2talk模式下,用户需要像类似钉钉发送语音消息那样,通过发送一段音频,来触发语音交互

  • 在tap2talk模式下,SDK内部的语音服务会实时识别用户的语音输入。但是用户想打断数字人,需要通过额外事件来触发,比如点击屏幕,或者点击某按钮。

  • 在duplex双工模式下,SDK内部的语音服务会实时识别用户的语音输入。数字人在说话状态下,仍可以接受用户的语音打断信号。

    • 在duplex双工模式,容易受到外部环境音的影响导致触发频繁打断,请在相对安静的环境下使用双工模式。

  • 星尘官网上的ApiKey并没有包含前缀Bearer 头,在初始化SDK的时候,请开发者自行添加前缀头,'Bearer ' + ApiKey, 具体可见如下示例项目中的代码或快速集成说明。

接入方法

Npm集成

请根据自己使用的包管理器,选择对应的命令,安装xingchen-avatar-sdk依赖包

当前版本是1.0.0-alpha.8

// npm包管理器
npm i xingchen-avatar-sdk@1.0.0-alpha.8
// pnpm包管理器
pnpm i xingchen-avatar-sdk@1.0.0-alpha.8
// yarn包管理器
yarn add xingchen-avatar-sdk@1.0.0-alpha.8

云端渲染数字人

示例项目

本示例项目使用Vue框架。并且提供了信息录入的界面,包含数字人生成和退出的入口,并且支持push2talk、tap2talk、duplex三种语音交互模式下切换。

下载

从OSS上下载示例项目cloud-avatar.zip压缩包,并进行解压

文件结构

解压后的示例项目文件架构如下:

cloud-avatar
├─index.html
├─package.json
├─vite.config.js
├─src
|  ├─App.vue
|  ├─main.js
|  └style.css

安装依赖并运行示例项目

在解压后的文件夹中执行如下命令:

// 安装依赖
npm install
// 启动
npm run dev

运行后,在浏览器上打开localhost:5173即可看到示例项目的启动界面

image

在页面上录入对应的信息,然后点击生成数字人,即可在浏览器右侧看到数字人。

image.jpeg

首次启动示例项目并生成数字人后,语音交互模式默认以duplex双工模式的启动。

如果想要切换模式,点击页面左侧底部的切换按钮进行切换。每次切换模式后,都要重新生成数字人。

快速集成

设置挂载元素

云端渲染数字人底层通过阿里云RTC进行音视频流的传输,需要挂载在一个video元素上。所以开发者要在页面html中先添加video容器元素。

<video class='container' muted></video>

新建云端渲染数字人实例

云端渲染数字人支持三种语音交互模式,分别是duplex双工、tap2talk、push2talk。这三种语音交互模式的取值可以通过SDK中的TYVoiceChatMode枚举值获取。

import { createCloudAvatar, type CloudAvatar, TYVoiceChatMode, TYAvatarType, TYVoiceChatState, TYError, type TYVoiceChatMessage, TYVoiceChatMessageType, TYVolumeSourceType, nanoid } from 'xingchen-avatar-sdk'
// 创建云端渲染数字人实例
const avatar = createCloudAvatar({
  type: TYAvatarType.CloudAvatar,
  // 设置语音交互模式
  mode: TYVoiceChatMode.duplex,
  // 输入从星尘官网上获取的数字人ID
  avatarId: '',
  // 输入从星尘官网上获取的AvatarModelId
  avatarModelId: '',
  // 输入从星尘官网上获取的语音ID
  voiceId: '',
  // 输入从星尘官网上获取的应用ID
  characterId: '',
  // 预留字段,先临时写死123
  appId: '123',
  // 预留字段,每次初始化生成一个随机值
  userId: nanoid(),
  extras: {
    // 开发者一般不需要设置此配置,设置后会影响到SDK内部的LLM语音模型
    parameters: {
      // LLM语言模型的回复多样性
      topP: 0.1,
      // LLM语言模型的回复发散度
      temperature: 1.0,
    }
  }
}, {
  headers: {
    // 输入从星尘官网上获取的ApiKey
    Authorization: 'Bearer ' + '在此处填入ApiKey'
  }
})

请注意:默认情况下,若 SDK 完成交互后未进行持续对话,系统将在一分钟后自动断开链接,以确保资源的高效利用和安全性。若您因业务需求,需对链接的心跳模式进行自定义修改,可在创建实例的第一个参数中额外配置 “keepAlive” 参数,从而灵活调整链接的维持状态。

interface {
  // true表示每隔30s持续发送心跳,永远不间断
  // 传入数值number类型(单位是毫秒),那么表示在传入的时间范围内,持续心跳,超过指定的时间后,将停止心跳。
  keepAlive: boolean | number
}
const avatar = createCloudAvatar({
  // 其他参数保持上面的实例
  // ......
  keepAlive: true
}, {
  headers: {
    // 输入从星尘官网上获取的ApiKey
    Authorization: 'Bearer ' + '在此处填入ApiKey'
  }
})

绑定回调

并不是所有回调都需要绑定,建议开发者根据业务开发需求进行绑定即可。

  • onFirstFrameReceived

在数字人首页画面出现的时候触发此回调

avatar.onFirstFrameReceived(() => {
  console.log('数字人渲染完毕')
})
  • onReadyToSpeech

在数字人可以开始进行语音交互的时候触发此回调

avatar.onReadyToSpeech(() => {
  console.log('可以进行语音交互了')
})

  • onErrorReceived

在数字人内部出现错误的时候触发此回调, 更多错误码详情见此教程的错误码列表

avatar.onErrorReceived((err:TYError) => {
  console.log('数字人内部发生错误:' + err.code + ' ' + err.message)
})

  • onStateChanged

在数字人内部状态发生变化的时候触发此回调,详情见SDK中的TYVoiceChatState类型声明。

云端数字人拥有三种状态:Listening(倾听)、Thinking(思考中)、Responding(反馈中)

// 数字人状态
avatar.onStateChanged((tyState: TYVoiceChatState) => {
  console.log('当前数字人状态' + tyState)
})

  • onVolumeChanged

在数字人或者用户说话音量发生变化的时候触发此回调。回调返回的数据中,source为TYVolumeSourceType.mic的数据表示用户自己说话的音量,source为TYVolumeSourceType.player的数据表示数字人的音量。详情见SDK中的TYVolume和TYVolumeSourceType类型声明。

请注意:SDK已将数字人的音量做了归一化处理,数值大小范围为0~1

avatar.onVolumeChanged((data: TYVolume) => {
  if(data.source === TYVolumeSourceType.mic) {
    console.log('用户音量:' + data.volume)
  } else {
    console.log('数字人音量:' + data.volume)
  }
})

  • onMessageReceived

在识别出数字人对话文本或用户对话文本的时候触发此回调,详情见SDK中的TYVoiceChatMessage和TYVoiceChatMessageType类型声明。

 avatar.onMessageReceived((msg: TYVoiceChatMessage) => {
  if(msg.type === TYVoiceChatMessageType.speaking) {
    console.log("用户的对话文本内容", msg.text)
  } else {
    console.log("数字人的反馈文本内容", msg.text)
  }
})

初始化

云端渲染数字人底层通过阿里云RTC进行音视频流的传输,所以需要挂载在一个video元素上。

// 或者传入video元素
avatar.setupRTCView('.container')
avatar.start()

暂停收音/恢复收音

云端渲染数字人默认会自动开启收音。暂停收音和恢复收音功能均可以在三种语音交互模式下有效,但一般主要用于duplex双工语音交互场景。

在开启双工语音交互模式下,数字人容易受到外界环境音影响,开发者可以通过暂停收音的方法,让数字人免受外界环境音影响。

// true:暂停收音
// false(默认值):恢复收音
avatar.muteLocalMic(mute: boolean)

发送语音和结束语音

发送语音和结束语音主要用于push2talk模式下,用户调用API,告知SDK开始发送语音和结束语音。

// 发送语音
avatar.sendSpeech()
// 结束语音
avatar.stopSpeech()

打断

打断方法常用于push2talk和tap2talk语音交互模式下,而在双工模式下,SDK内部的语音服务本身就能识别用户新的语音输入进行打断。

请注意:用户主动打断必须是在Responding反馈状态下进行打断。如果在Listening、Thinking状态下进行打断,那么后端服务将不会响应处理。

avatar.interrupt()

指定应答内容

在默认情况下,用户输入的语音如果出现违规的情况下, 数字人是不会做出反馈的。指定应答内容可以让数字人使用传入的文本作为回复。

请注意:如果强制反馈的文本也出现违规的情况,那么数字人同样不会做出反馈。IRequestToRespondType.prompt表示把文本送到SDK内部的LLM服务进行回答IRequestToRespondType.transcript表示把文本直接转成语音

avatar.requestToRespond(type: IRequestToRespondType, text: string)

退出

在离开数字人页面或更换数字人角色的时候,都要调用此方法。否则页面中会存在多个数字人实例,导致互相影响。

avatar.exit()

端测渲染(端到端)数字人

端测渲染(端到端)数字人的Api和云端渲染数字人的Api基本保持一致,最大区别是端测渲染(端到端)是在浏览器上通过WebGL进行渲染数字人,而非通过RTC拉视频流的方式显示数字人。

示例项目

本示例项目使用Vue框架。并且提供了信息录入的界面,包含数字人生成和退出的入口,并且支持push2talk、tap2talk、duplex三种语音交互模式下切换。

下载

从OSS上下载示例项目local-avatar.zip压缩包,并进行解压

文件结构

解压后的示例项目文件架构如下:

local-avatar
├─index.html
├─package.json
├─vite.config.js
├─src
|  ├─App.vue
|  ├─main.js
|  └style.css

安装依赖并运行示例项目

在解压后的文件夹中执行如下命令:

// 安装依赖
npm install
// 启动
npm run dev

运行后,在浏览器上打开localhost:5173即可看到示例项目的启动界面

image.jpeg

在页面上录入对应的信息,然后点击生成数字人,即可在浏览器右侧看到数字人。

image.jpeg

首次启动示例项目并生成数字人后,语音交互模式默认以duplex双工模式的启动。

如果想要切换模式,点击页面左侧底部的切换按钮进行切换。每次切换模式后,都要重新生成数字人。

快速集成

设置挂载元素

端测渲染(端到端)数字人底层通过WebGL加载模型并绘制数字人,所以开发者要在页面html中先添加div容器元素。

<div class='container'></div>

新建端测渲染(端到端)数字人实例

端到端数字人支持三种语音交互模式,分别是duplex双工、tap2talk、push2talk。这三种语音交互模式的取值可以通过SDK中的TYVoiceChatMode枚举值获取。

请注意:端测渲染(端到端)数字人的数字人ID和数字人AvatarModelId 不一样

import { createLocalAvatar, TYVoiceChatMode, TYAvatarType, type LocalAvatar, type TYError, type TYVolume, TYVolumeSourceType, TYVoiceChatMessage, TYVoiceChatMessageType, nanoid } from 'xingchen-avatar-sdk'
// 创建云端数字人实例
avatar = createLocalAvatar({
    type: TYAvatarType.LocalAvatar,
    mode: TYVoiceChatMode.duplex,
    // 输入从星尘官网上获取的数字人ID
    avatarId: '',
    // 输入从星尘官网上获取的AvatarModelId
    avatarModelId: '',
    // 输入从星尘官网上获取的语音ID
    voiceId: '',
    // 输入从星尘官网上获取的应用ID
    characterId: '',
    // 预留字段,先临时写死123
    appId: '123',
    // 预留字段,每次初始化生成一个随机值
    userId: nanoid(),
    extras: {
      // 开发者一般不需要设置此配置,设置后会影响到SDK内部的LLM语音模型
      parameters: {
        // LLM语言模型的回复多样性
        topP: 0.1,
        // LLM语言模型的回复发散度
        temperature: 1.0,
      }
    }
  }, {
    headers: {
      // 输入从星尘官网上获取的ApiKey
      Authorization: 'Bearer ' + '在此处填入ApiKey'
    }
  })

请注意:默认情况下,若 SDK 完成交互后未进行持续对话,系统将在一分钟后自动断开链接,以确保资源的高效利用和安全性。若您因业务需求,需对链接的心跳模式进行自定义修改,可在创建实例的第一个参数中额外配置 “keepAlive” 参数,从而灵活调整链接的维持状态。

interface {
  // true表示每隔30s持续发送心跳,永远不间断
  // 传入数值number类型(单位是毫秒),那么表示在传入的时间范围内,持续心跳,超过指定的时间后,将停止心跳。
  keepAlive: boolean | number
}
const avatar = createCloudAvatar({
  // 其他参数保持上面的实例
  // ......
  keepAlive: true
}, {
  headers: {
    // 输入从星尘官网上获取的ApiKey
    Authorization: 'Bearer ' + '在此处填入ApiKey'
  }
})

绑定回调

并不是所有回调都需要绑定,建议开发者根据业务开发需求进行绑定即可。

  • onFirstFrameReceived

在数字人首页画面出现的时候触发此回调

avatar.onFirstFrameReceived(() => {
  console.log('数字人渲染完毕')
})
  • onReadyToSpeech

在数字人可以开始进行语音交互的时候触发此回调

avatar.onReadyToSpeech(() => {
  console.log('可以进行语音交互了')
})
  • onErrorReceived

在数字人内部出现错误的时候触发此回调, 更多错误码详情见此教程的错误码列表

avatar.onErrorReceived((err:TYError) => {
  console.log('数字人内部发生错误:' + err.code + ' ' + err.message)
})

  • onStateChanged

在数字人内部状态发生变化的时候触发此回调,详情见SDK中的TYVoiceChatState类型声明。

端到端数字人比云端渲染数字人多了一个Idle静默状态,拥有4种状态:Idle(静默)、Listening(倾听)、Thinking(思考中)、Responding(反馈中)

// 数字人状态
avatar.onStateChanged((tyState: TYVoiceChatState) => {
  console.log('当前数字人状态' + tyState)
})

  • onVolumeChanged

在数字人或者用户说话音量发生变化的时候触发此回调。回调返回的数据中,source为TYVolumeSourceType.mic的数据表示用户自己说话的音量,source为TYVolumeSourceType.player的数据表示数字人的音量。详情见SDK中的TYVolume和TYVolumeSourceType类型声明。

请注意:SDK已将数字人的音量做了归一化处理,数值大小范围为0~1

在端测渲染(端到端)数字人中,SDK内部始终将数字人反馈的音量设置为标准播放音量1,所以只能监听到用户音量的变化回调。

avatar.onVolumeChanged((data: TYVolume) => {
    console.log('用户音量:' + data.volume)
})

  • onMessageReceived

在识别出数字人对话文本或用户对话文本的时候触发此回调,详情见SDK中的TYVoiceChatMessage和TYVoiceChatMessageType类型声明。

 avatar.onMessageReceived((msg: TYVoiceChatMessage) => {
  if(msg.type === TYVoiceChatMessageType.speaking) {
    console.log("用户的对话文本内容", msg.text)
  } else {
    console.log("数字人的反馈文本内容", msg.text)
  }
})

初始化

端测渲染(端到端)数字人底层通过WebGL加载模型并绘制数字人,需要挂载在一个div元素上。

// 或者传入div容器元素
avatar.setupRTCView('.container')
avatar.start()

在端测渲染(端到端)数字人中,提供了三种渲染模式来渲染数字人,分别是高性能、标准性能、低性能。高性能一般用于电脑,标准渲染模式用于高端手机,低性能用于嵌入式设备。默认会启动标准的渲染模式,如果想使用高性能或低性能的渲染模式,请在调用start初始化渲染的时候,传入额外的配置。

import { IRenderMode } from 'xingchen-avatar-sdk'
// 或者传入div容器元素
avatar.setupRTCView('.container')
avatar.start({
  ext: {
    // 是否开启阴影效果,默认是true。开启阴影效果同样会影响性能
    enableShadow: false,
    // 渲染模式
    renderMode: IRenderMode.Low
  }
})

暂停收音/恢复收音

端到端数字人默认会自动开启收音。暂停收音和恢复收音功能均可以在三种语音交互模式下有效,但一般主要用于duplex双工语音交互场景。

在开启双工语音交互模式下,数字人容易受到外界环境音影响,开发者可以通过暂停收音的方法,让数字人免受外界环境音影响。

// true:暂停收音
// false(默认值):恢复收音
avatar.muteLocalMic(mute: boolean)

发送语音和结束语音

发送语音和结束语音主要用于push2talk模式下,用户调用API,告知SDK开始发送语音和结束语音。

// 发送语音
avatar.sendSpeech()
// 结束语音
avatar.stopSpeech()

打断

打断方法常用于push2talk和tap2talk语音交互模式下,而在双工模式下,SDK内部的语音服务本身就能识别用户新的语音输入进行打断。

请注意:用户主动打断必须是在Responding反馈状态下进行打断。如果在Listening、Thinking状态下进行打断,那么后端服务将不会响应处理。在Idle静默状态下,进行打断,端测渲染将会进入Listening状态。

avatar.interrupt()

指定应答内容

在默认情况下,用户输入的语音如果出现违规的情况下, 数字人是不会做出反馈的。指定应答内容可以让数字人使用传入的文本作为回复。

请注意:如果强制反馈的文本也出现违规的情况,那么数字人同样不会做出反馈。IRequestToRespondType.prompt表示把文本送到SDK内部的LLM服务进行回答IRequestToRespondType.transcript表示把文本直接转成语音

avatar.requestToRespond(type: IRequestToRespondType, text: string)

退出

在离开数字人页面或更换数字人角色的时候,都要调用此方法。否则页面中会存在多个数字人实例,导致互相影响。

avatar.exit()

单独输出数字人

示例项目

本示例项目使用Vue框架。并且提供了信息录入的界面,包含数字人生成和退出的入口,并且支持通过试听音频和录音功能模拟开发者输入第三方LLM下发的二进制音频流。

下载

从OSS上下载示例项目pure-avatar.zip压缩包,并进行解压

文件结构

解压后的示例项目文件架构如下:

pure-avatar
├─index.html
├─package.json
├─vite.config.js
├─src
|  ├─App.vue
|  ├─main.js
|  └style.css

安装依赖并运行示例项目

在解压后的文件夹中执行如下命令:

// 安装依赖
npm install
// 启动
npm run dev

运行后,在浏览器上打开localhost:5173即可看到示例项目的启动界面

image.jpeg

在页面上录入对应的信息,然后点击生成数字人,即可在浏览器右侧看到数字人。

image.jpeg

首次启动示例项目并生成数字人后,数字人会处于静默状态,需要点击试听音频或录音后,数字人才会做出反馈

快速集成

设置挂载元素

单独输出数字人底层通过标准WebSocket协议接收第三方LLM传入的二进制音频流,并在浏览器上通过WebGL加载模型并绘制数字人。所以开发者要在页面html中先添加div容器元素。

<div class='container'></div>

新建单独输出数字人实例

云端渲染数字人支持三种语音交互模式,分别是duplex双工、tap2talk、push2talk。这三种语音交互模式的取值可以通过SDK中的TYVoiceChatMode枚举值获取。

请注意:端测渲染(端到端)数字人的数字人ID和数字人AvatarModelId 不一样

import { createPureAvatar, type PureAvatar, type TYVoiceChatState, type TYError } from 'xingchen-avatar-sdk'
// 创建单独输出数字人实例
const avatar = createPureAvatar({
  // 输入从星尘官网上获取的数字人ID
  avatarId: '',
  // 输入从星尘官网上获取的AvatarModelId
  modelId: '',
  // 输入从星尘官网上获取的ApiKey
  xFagToken: `Bearer ` + '在此处输入ApiKey'
})

请注意:默认情况下,若 SDK 完成交互后未进行持续对话,系统将在一分钟后自动断开链接,以确保资源的高效利用和安全性。若您因业务需求,需对链接的心跳模式进行自定义修改,可在创建实例的第一个参数中额外配置 “keepAlive” 参数,从而灵活调整链接的维持状态。

interface {
  // true表示每隔30s持续发送心跳,永远不间断
  // 传入数值number类型(单位是毫秒),那么表示在传入的时间范围内,持续心跳,超过指定的时间后,将停止心跳。
  keepAlive: boolean | number
}
const avatar = createPureAvatar({
  // 其他参数请参考上面的实例
  // ......
  keepAlive: true
})

绑定回调

并不是所有回调都需要绑定,建议开发者根据业务开发需求进行绑定即可。

  • onFirstFrameReceived

在数字人首页画面出现的时候触发此回调

avatar.onFirstFrameReceived(() => {
  console.log('数字人渲染完毕')
})
  • onErrorReceived

在数字人内部出现错误的时候触发此回调, 更多错误码详情见此教程的错误码列表

avatar.onErrorReceived((err:TYError) => {
  console.log('数字人内部发生错误:' + err.code + ' ' + err.message)
})
  • onStateChanged

在数字人内部状态发生变化的时候触发此回调,详情见SDK中的TYVoiceChatState类型声明。

单独输出数字人和端测渲染(端到端)数字人一样,拥有4种状态:Idle(静默)、Listening(倾听)、Thinking(思考中)、Responding(反馈中)

// 数字人状态
avatar.onStateChanged((tyState: TYVoiceChatState) => {
  console.log('当前数字人状态' + tyState)
})

初始化

云端渲染数字人底层通过阿里云RTC进行音视频流的传输,所以需要挂载在一个video元素上。

// 或者传入div元素
avatar.setupRTCView('.container')
avatar.start()

在单独输出数字人中,同样提供了三种渲染模式来渲染数字人,分别是高性能、标准性能、低性能。高性能一般用于电脑,标准渲染模式用于高端手机,低性能用于嵌入式设备。默认会启动标准的渲染模式,如果想使用高性能或低性能的渲染模式,请在调用start初始化渲染的时候,传入额外的配置。

import { IRenderMode } from 'xingchen-avatar-sdk'
// 或者传入div容器元素
// 或者传入div元素
avatar.setupRTCView('.container')
avatar.start({
  ext: {
    // 是否开启阴影效果,默认是true。开启阴影效果同样会影响性能
    enableShadow: false,
    // 渲染模式
    renderMode: IRenderMode.Low
  }
})

发送语音

在单独输出数字人下,开发者通过sendSpeech接口,可以将第三方LLM下发的二进制音频流给到SDK内部的语音服务,驱动页面上数字人做出响应。

请注意:目前单独输出数字人只能接受16 kHZ采样速率的二进制音频流

interface ISpeech {
  // 二进制音频流
  audioData: Int8Array | Uint8Array
  // 用于告知SDK,当前二进制音频流是否为第三方LLM每轮对话反馈的最后一片音频数据。true表示最后一片,false表示不是最后一片
  endOfTask: boolean
  // 任意随机值,但是第三方LLM每轮对话反馈的音频片段,都要使用同一个taskId
  taskId: string
}
// 发送语音
avatar.sendSpeech(options:ISpeech)

打断

请注意:用户主动打断必须是在Responding反馈状态下进行打断。如果在Listening、Thinking状态下进行打断,那么后端服务将不会响应处理。在Idle静默状态下,进行打断,端测渲染将会进入Listening状态。

avatar.interrupt()

切换数字人状态

用户在使用第三方LLM语音交互服务的时候,需要将数字人切换到对应的状态。例如:Listening(倾听)、思考(Thinking). 详情见SDK中的TYVoiceChatState类型声明。

avatar.changeState(state: TYVoiceChatState)

退出

在离开数字人页面或更换数字人角色的时候,都要调用此方法。否则页面中会存在多个数字人实例,导致互相影响。

avatar.exit()

附录

接口说明

SDK提供了标准的TypeScript Api类型声明文件,详情可以在安装依赖包中的xingchenAvatar.d.ts文件中进行查看。

网页版API文档,请参考Xingchen-Avatar-Sdk API

错误码

网关服务错误

云端渲染、端测渲染(端到端)数字人错误码

详细枚举值见SDK中的枚举值GatewayErrorCode

错误码

错误名称

错误说明

解决方案

400

aca.error.invalid.param

初始化参数错误,参考返回的错误信息

重新在星尘官网确认相关参数

401

用户未认证

ApiKey错误

1、在星尘官网上确认自己的apiKey是否正确

2、确认SDK初始化的ApiKey有没有加'Bearer '

465

aca.error.not.paas.whitelist

没有开通白名单

联系邮箱tongyixingchen@service.aliyun.com

403

aca.error.avatar.permission.error

没有形象的使用权限

请确认账号是否拥有形象使用权限

403

aca.error.voice.permission.error

没有声音的使用权限

请确认账号是否拥有声音使用权限

422

aca.error.videochat.initialize.limit

数字人资源不足

请联系产品运营同学进行错误排查

431

aca.error.videochat.quota.exceeded

超过运行状态数限制

同一个账号同时开启的会话有数量限制,需要更多请联系产品运营同学

500

aca.error.internal.exception

内部服务错误

请联系产品运营同学进行错误排查

501

aca.error.gateway.exception

服务端验证ApiKey失败

1、在星尘官网上确认自己的ApiKey是否正确

2、确认SDK初始化的ApiKey有没有加 'Bearer '

600

获取数字人资产失败

请联系产品运营同学进行错误排查

RTC错误

详细枚举值见SDK中的枚举值RTCErrorCode

错误码

错误说明

是否断连

解决方案

1000

RTC初始化参数错误

检查SDK内部调用星尘initialize初始化的接口返回

1001

RTC鉴权失败

检查SDK内部调用星尘initialize初始化的接口返回

1002

RTC加入频道错误

检查SDK内部调用星尘initialize初始化的接口返回

1003

RTC数据丢包

请联系产品运营同学进行错误排查

1004

RTC 数据通道崩溃

请联系产品运营同学进行错误排查

WebSocket错误

详细枚举值见SDK中的枚举值WSErrorCode

错误码

错误说明

是否断连

解决方案

400

连接初始化参数不对

重新校对单独输出数字人的初始化参数

500

服务内部错误

数字人执行退出操作,重新初始化数字人实例

700

websocket连接断开

数字人执行退出操作,重新初始化数字人实例

系统错误

详细枚举值见SDK中的枚举值SystemErrorCode

错误码

错误说明

是否断连

解决方案

1100

浏览器底层不支持RTC

  • 升级浏览器到最新的版本

  • 更换浏览器到Chrome、Edge、Safari

  • H5 webview环境下添加WebRTC支持

1101

浏览器底层RTC不支持SEI功能

  • 升级浏览器到最新的版本

  • 更换浏览器到Chrome、Edge、Safari

  • H5 webview环境下添加WebRTC支持

1102

浏览器相机未授权

刷新页面,授权浏览器相机采集

1103

浏览器麦克风未授权

刷新页面,授权浏览器麦克风采集

1104

浏览器音频推流失败

  • 升级浏览器到最新的版本

  • 更换浏览器到Chrome、Edge、Safari

  • H5 webview环境下添加WebRTC支持

1105

浏览器视频推流失败

  • 升级浏览器到最新的版本

  • 更换浏览器到Chrome、Edge、Safari

  • H5 webview环境下添加WebRTC支持

1106

未知错误

  • 升级当前浏览器到最新的版本

  • 更换浏览器到最新的Chrome、Edge、Safari

  • H5 webview环境下添加WebRTC支持

语音服务错误

详细枚举值见SDK中的枚举值VoiceChatErrorCode

错误码

错误说明

是否断连

解决方案

40000000

客户端错误

数字人执行退出操作,重新初始化数字人实例

40000001

参数不合规、检查参数

40000002

指令不支持,如指令名称错误

40000003

指令不合规,如指令格式错误

40000004

连接错误

40010000

拒绝访问

40010001

未授权

40020000

语音输入或输出违规

继续对话

40030000

对话静默超时

数字人执行退出操作,重新初始化数字人实例

50000000

服务内部错误

50000001

服务内部错误

50010000

语音识别内部错误

继续对话

50020000

大模型内部错误

50030000

语音合成内部错误

50040000

数字人内部错误

数字人执行退出操作,重新初始化数字人实例

50040001

数字人初始化失败

50040002

数字人初始化超时

URL协议限制

环境

协议

云端渲染数字人

端测渲染(端到端)数字人

单独输出数字人

线上生产环境

HTTPS

支持

支持

支持

HTTP

不支持

不支持

不支持

本地开发环境

http://localhost:[端口]

支持

支持

支持

http://[本地IP]:[端口]

不支持

不支持

不支持

兼容性

  • 目前SDK均不支持在原生的小程序开发上使用,但是可以尝试通过webview的方式打开自己的业务网页。开发者使用自己的业务网页时需要在域名根目录上添加小程序的校验文件,校验文件配置方案请参考各小程序平台的接入方式。

  • 云端渲染数字人和端测渲染(端到端)数字人,底层均依赖阿里云RTC的能力。具体兼容性请参考:阿里云ARTC Web SDK

  • 单独输出数字人底层依赖标准WebSocket协议。具体兼容性请参考:WebSocket 兼容性