# 互动直播
平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力,同时支持用户与2D数字人进行实时语音交互。 平台保留互动直播历史版本接口,建议用户按照在线文档内容接入新版本直播相关服务,历史版本接口即将安排下线,历史文档参考: 文档链接 (opens new window)
# 功能介绍
虚拟数字人直播服务集成了图形图像、语音等算法能力,提供给客户的API服务,方便客户快速创作直播内容并进行直播。主要面对的行业包括政务、金融、教培、传媒等,平台提供能够支持用户与2D数字人进行实时语音交互的数字人产品能力,目前互动数字人直播支持文本、语音两种交互方式,同时在数字人说话中可以支持通过特定话术进行打断,实现更加友好的双工语音对话体验,以期给用户带来个性化服务,提升用户使用体验,提高效率和竞争力。
# API 说明
用户调用平台全部API服务,皆需要访问服务接入点:aigc.softsugar.com,并在请求头中加上token信息;WS接口需将token信息拼写到URL上。
# 直播时序图
# 新建直播间
# 接口描述
创建一路数字人直播实例,通过传入指定的参数系统进行初始化,并返回会话ID等信息供后续使用。如果初始化耗时过长将返回状态32,后续由回调或客户端查询进行完成状态的的更新。当状态为35时表示视频流初始化完成,可以操作开启直播。
web sample使用的播放方法为集成第三方SDK服务,具体可参考:三方SDK使用说明 (opens new window)。
注意:创建直播间即开始计时。
# 请求地址
POST
/api/2dvh/v2/material/live/channel/create
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
param | String | True | 直播视频生成参数(该参数为json转义后的字符串) |
urtcUseExternalApp | Boolean | False | 是否使用用户声网rtc appId,如果不使用,将使用平台统一的rtc appId(默认否) |
urtcToken | String | False | 用户rtc鉴权token (使用用户rtc app时必填) |
urtcUid | String | False | 用户rtc鉴权uid (使用用户rtc app时必填,必须是大小不超过32uint的纯数字 ) |
urtcAppId | String | False | 用户rtc APP ID (使用用户rtc app时必填) |
urtcChannelId | String | False | 用户rtc Channel ID (使用用户rtc app时必填, 长度不得超过 64 位 ) |
userData | String | False | 用户信息(回调时原样返回) |
# 请求样例
{
"param": "{\"version\":\"0.0.1\",\"recycle\":0,\"stream_mode\":true,\"sceneList\":[{\"digital_role\":{\"id\":1,\"face_feature_id\":\"0325_nina_s3_beauty\",\"name\":\"小李\",\"url\":\"https://dwg-aigc-paas-test.oss-cn-hangzhou.aliyuncs.com/materials/77/0325_nina_s3_beauty.zip\",\"position\":{\"x\":10,\"y\":60},\"scale\":1},\"tts_config\":{\"id\":\"nina\",\"name\":\"nina\",\"vendor_id\":3,\"language\":\"zh-CN\",\"pitch_offset\":0.0,\"speed_ratio\":1,\"volume\":400},\"tts_query\":{\"content\":\"商汤科技是一家行业领先的人工智能软件公司,以坚持原创,让AI引领人类进步为使命。\",\"ssml\":false},\"audios\":[{\"url\":\"http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/softsugar.mp3\"}],\"backgrounds\":[{\"type\":0,\"name\":\"背景\",\"url\":\"https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/background.png\",\"rect\":[0,0,1080,1920],\"cycle\":true,\"start\":0,\"duration\":-1}],\"foregrounds\":[{\"type\":0,\"name\":\"前景1\",\"url\":\"https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/frontgroud.png\",\"rect\":[0,0,310,88],\"start\":0,\"duration\":100}],\"effects\":{\"version\":\"1.0\",\"beautify\":{}}}]}"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | False | 直播开启是否成功 |
- sessionId | String | True | 会话的唯一标识 |
- sessionToken | String | True | 麦克风接管使用的token信息 |
- status | Integer | True | 任务状态:32:视频流创建中, 35:视频流创建完成,9:异常,97:系统路数不足,98:客户路数不足 |
- rtcAppId | String | False | RTC APP ID (状态为32无此值) |
- rtcChannelId | String | False | RTC Channel ID (状态为32无此值) ,长度不得超过 64 位 |
- rtcUid | String | False | RTC UID (状态为32无此值),必须是大小不超过32uint的纯数字 |
- rtcToken | String | False | RTC Token (状态为32无此值) |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"sessionId": "sessionId",
"sessionToken": "sessionToken",
"status": 35,
"rtcAppId": "rtcAppId",
"rtcChannelId": "rtcChannelId",
"rtcUid": "rtcUid",
"rtcToken": "rtcToken"
}
}
# 直播状态监测
# 接口描述
用于保持直播持续,推荐每隔60秒调用一次该接口。心跳丢失时间超过阈值将被动关闭直播。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/heartbeat
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
# 请求样例
{
"sessionId": "sessionId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | False | data object ,异常时通常为空 |
# 响应样例
{
"code": 0,
"message": "success"
}
# 开启直播
# 接口描述
启动一路数字人直播间实例,通过传入指定的参数,可以开启一路数字人直播推流实例,可通过三方RTC拉流SDK产品进行拉流使用。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/start
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
# 请求样例
{
"sessionId": "sessionId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Boolean | False | 直播开启是否成功 |
# 响应样例
{
"code": 0,
"message": "success",
"data": true
}
# 直播接管(可中断)
# 接口描述
发送一段播报文本或者播报音频文件给到服务端,数字人会基于文本/音频停止既定播报内容,实时进行TTS生成、表情动作驱动,并渲染视频流给到用户。
# 请求地址
POST
/api/2dvh/v2/material/live/channel/command
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
param | String | True | 接管内容(该参数为json转义后的字符串) |
# 请求样例
{
"sessionId": "sessionId",
"param": "{\"tts_query\": {\"content\": \"有一颗蛋在地上滚。滚过树林,滚过花园,又从斜坡滚了下去,最后滚进一个鸭巢里。鸭妈妈并没有发现不对劲,继续孵蛋。有一天,蛋破了。第一颗蛋孵出的是一只有蓝点的小鸭,叫蜡笔。第二颗蛋孵出的是一只有条纹的小鸭,叫斑马。第三颗蛋孵出的是一只黄色的小鸭,叫月光。第四颗蛋孵出的是一只全身蓝绿色的小怪鸭,嘴里还不停的发出咕叽咕叽的叫声,所以就叫做咕叽咕叽.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- isSuccess | Boolean | True | 接管是否成功 |
- commandTraceId | String | False | 接管任务TraceId(取消接管时需传递) |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"isSuccess": true,
"commandTraceId": "commandTraceId"
}
}
# 直播接管排队(可中断)
# 接口描述
可排队的直播接管,如果当前有接管中的任务,则将该接管加入队列,并按顺序进行接管。当前正在接管中的任务位置序号为1。
可插入的范围为:1- N,含义为将按照插入的位置序号顺序+1进行播报。例如:插入位置序号为1,则为排队队列的第2条播放内容,将在当前正在播放的任务结束后播放该条内容,后续的排队任务自动调整顺序。
接管加入队列状态分为2种(33:接管入队初始化中;34:接管加入队列完成),如果返回状态为33表示初始化时间(下载文件等)超过阈值(当前为10s)。后续入队状态将通过异步回调的方式通知。
如果接管包含的文件内容较大,例如图片文件较大或声音文件较大等,需要较长时间下载。目前系统会将需要下载的内容都下载完成后才进入排队队列,返回接管加入队列完成。
为保证程序处理正常,接管排队队列长度建议不超过15个。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/command/queue
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
priority | Integer | False | 插入排队期望位置序号,如无或者超过当前队列最大长度则插入队尾 |
param | String | True | 接管内容(该参数为json转义后的字符串) |
# 请求样例
{
"sessionId": "sessionId",
"priority": 1,
"param": "{\"tts_query\": {\"content\": \"有一颗蛋在地上滚。滚过树林,滚过花园,又从斜坡滚了下去,最后滚进一个鸭巢里。鸭妈妈并没有发现不对劲,继续孵蛋。有一天,蛋破了。第一颗蛋孵出的是一只有蓝点的小鸭,叫蜡笔。第二颗蛋孵出的是一只有条纹的小鸭,叫斑马。第三颗蛋孵出的是一只黄色的小鸭,叫月光。第四颗蛋孵出的是一只全身蓝绿色的小怪鸭,嘴里还不停的发出咕叽咕叽的叫声,所以就叫做咕叽咕叽.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- commandStatus | Integer | True | 接管队列状态(33:接管入队初始化中;34:接管加入队列完成) |
- commandTraceId | String | True | 接管任务TraceId(取消接管时需传递) |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"commandStatus": 34,
"commandTraceId": "commandTraceId"
}
}
# 直播接管重排队
调整接管队列中某个接管任务的顺序。
# 接口描述
# 请求地址
POST
/api/2dvh/v1/material/live/channel/command/queue/reorder
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
commandTraceId | String | True | 接管任务TraceId(接管时返回) |
priority | Integer | True | 插入排队期望优先级 |
# 请求样例
{
"sessionId": "sessionId",
"commandTraceId": "commandTraceId",
"priority": 1
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- isSuccess | Boolean | True | 是否成功 |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"isSuccess": true
}
}
# 直播接管取消
# 接口描述
取消已发送的文字或音频文件接管请求。如果想要一次取消多个,trace ID之间用英文“;”隔开。 如果为"-1",将全部内容取消(包括接管中的和队列中的)。 若文字/音频正在接管中,调用麦克风接管需要取消全部后开启。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/command/cancel
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
commandTraceId | String | True | 接管任务TraceId(接管时返回),取消多个,英文“;”隔开。"-1":全部取消 |
# 请求样例
{
"sessionId": "sessionId",
"commandTraceId": "commandTraceId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- isSuccess | Boolean | True | 接管取消是否成功 |
- commandFinishTime | String | False | 完成时间 (yyyy-MM-dd HH:mm:ss) |
- message | String | False | 失败原因 |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"isSuccess": true
}
}
# 直播接管排队查询
# 接口描述
获取所有的直播队列,返回内容为,按照直播顺序排序的trace ID 列表。当前正在播放或准备播放的内容为第一条。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/command/queue/list
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
# 请求样例
{
"sessionId": "sessionId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- commandTraceIds | Array | False | 接管任务TraceId数组 |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"commandTraceIds": ["commandTraceId1","commandTraceId2","commandTraceId3","commandTraceId4"]
}
}
# 直播口水话接管
# 接口描述
互动数字人场景直播口水话接管,不可排队,当前有接管话术时无法进行口水话接管。
# 请求地址
POST
/api/2dvh/v2/material/live/channel/command/quick
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
param | String | True | 接管内容(该参数为json转义后的字符串) |
# 请求样例
{
"sessionId": "sessionId",
"param": "{\"quick_response\": true, \"order\": -1 ,\"quick_response_id\": \"234323\"}"
}
# param参数说明
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
quick_response | Boolean | True | 需填值"true" |
order | Integer | True | 序号,-1为随机 |
quick_response_id | String | False | 口水词库id |
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | True | |
- isSuccess | Boolean | True | 接管是否成功 |
- commandTraceId | String | False | 接管任务TraceId |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"isSuccess": true,
"commandTraceId": "commandTraceId"
}
}
# 直播接管排队(流式文字输入/流式语音输入)
# 接口描述
注意:该接口为WebSocket接口,数据请求使用 json,编码使用 UTF8。其中流式声音要求传输格式为PCM格式,码率要求为16000, 单声道,16bit采样率。 发送流式语音信息(如来自麦克风,TTS流式接口等),数字人会基于实时语音进行接管操作,中断当时直播内容,生成新的画面并渲染视频流给到用户。
每一帧有大小需小于4k。 此外,所有http发起的接管,都会在此socket通道中返回对应的状态消息。正常情况下,每一次接管,都会依次下发“接管入队完成”, “开始接管“,“接管完成”。
# 请求地址
WebSocket
/api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType={clientType}&sessionId={sessionId}&Authorization={Token}
# 请求头
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
clientType | String | True | 连接端类型:BROWSER:生产端 |
sessionId | String | True | 建立连接后返回唯一会话id |
Authorization | String | True | 该token为创建直播间返回的sessionToken |
# 请求样例(上行消息)
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 消息编码 |
message | String | True | 建立连接后返回唯一会话id |
commandTraceId | String | True | 接管ID。与http接管相似,但需调用方主动传入唯一ID,在直播内有效。并可以通过取消接管接口取消该次接管。仅在code=0,code=10,code=11,code=99时有效 |
priority | Integer | False | 优先级,仅在code=0或10时有效(合法值区间1~n或-1,如果传入不合法,插入到队列最后,-1是自动排到队尾) |
# 连接建立
wss://host/api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType=BROWSER&sessionId=123&Authorization=MTZiMjQzMzg4ZTYyMTlkNTBjZWU0ODAxODg5N2MyY2NmMmQzNzNhOC04YzNiLTRlMjEtYmY3Mi0yNzA2YzFkMjg4ODA
# 流式PCM音频
# 开始接收流式PCM音频通知
{
"code": 0,
"message": "begin",
"commandTraceId": "xxxyyyzzz111333",
"priority": 1
}
# 语音数据
二进制语音数据,流式声音要求传输格式为PCM格式,码率要求为16000, 单声道,16bit采样率。
# 发送结束
{
"code": 99,
"message": "eof",
"commandTraceId": "xxxyyyzzz111333"
}
# 流式文本
# 开始接收流式文本通知
{
"code": 10,
"message": "begin",
"commandTraceId": "aaaaxxxyyyzzz111222333",
"priority": 1
}
# 流式文本内容,文本在message字段中传输
{
"code": 11,
"message": "流式文本内容1",
"commandTraceId": "aaaaxxxyyyzzz111222333"
}
# 流式文本内容,文本在message字段中传输
{
"code": 11,
"message": "流式文本内容2",
"commandTraceId": "aaaaxxxyyyzzz111222333"
}
# 发送结束
{
"code": 99,
"message": "eof",
"commandTraceId": "aaaaxxxyyyzzz111222333"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | String | True | 消息类型编码 |
message | String | True | 详细信息 |
# 响应样例(下行消息)
# 认证失败
{
"code": 1,
"message": "认证失败"
}
# 服务端已准备好接收
{
"code": 2,
"message": "准备发送数据"
}
# http形式发起的接管(文字接管/音频接管)完成/取消接管完成通知
{
"code": 18,
"message": "接管/取消接管完成",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# 未匹配或算法连接中断
{
"code": 4,
"message": "停止发送数据"
}
# 未知原因失败
{
"code": 5,
"message": "发送数据失败"
}
# 没有对应的直播信息
{
"code": 6,
"message": "服务端未准备好接收"
}
# 发送的流式接管出现错误,接管冲突给前端发拒绝消息
{
"code": 7,
"message": "算法端接管冲突被拒绝"
}
# http形式发起的接管(文字接管/音频接管)开始播放接管通知
{
"code": 19,
"message": "开始播放接管",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# http形式发起的接管(文字接管/音频接管)接管入队完成通知
{
"code": 20,
"message": "接管入队完成",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# webSocket形式发起的接管(文字接管/音频接管)的消息接收成功通知(目前只响应消息 99 eof)
{
"code": -1,
"message": "接管消息ACK",
"data": {
"sessionId": "xxxxx",
"code": 99,
"commandTraceId": "yyyyyy",
"timestamp": 1740998208131
}
}
#
# 流式语音接管(已废弃)
# 接口描述
注意:该接口为WebSocket接口,数据请求使用 json,编码使用 UTF8。其中流式声音要求传输格式为PCM格式,码率要求为16000, 单声道,16bit采样率。 发送流式语音信息(如来自麦克风,TTS流式接口等),数字人会基于实时语音进行接管操作,中断当时直播内容,生成新的画面并渲染视频流给到用户。
此外,所有http发起的接管,都会在此socket通道中返回对应的状态消息。正常情况下,每一次接管,都会依次下发“接管入队完成”, “开始接管“,“接管完成”。
# 请求地址
WebSocket
/api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType={clientType}&sessionId={sessionId}&Authorization={Token}
# 请求头
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
clientType | String | True | 连接端类型:BROWSER:生产端 |
sessionId | String | True | 建立连接后返回唯一会话id |
Authorization | String | True | 该token为创建直播间返回的sessionToken |
# 请求样例(上行消息)
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 消息编码 |
message | String | True | 建立连接后返回唯一会话id |
# 连接建立
wss://host/api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType=BROWSER&sessionId=123&Authorization=MTZiMjQzMzg4ZTYyMTlkNTBjZWU0ODAxODg5N2MyY2NmMmQzNzNhOC04YzNiLTRlMjEtYmY3Mi0yNzA2YzFkMjg4ODA
# 流式PCM音频
# 开始接收流式PCM音频通知
{
"code": 0,
"message": "begin"
}
# 语音数据
二进制语音数据,流式声音要求传输格式为PCM格式,码率要求为16000, 单声道,16bit采样率。
# 发送结束
{
"code": 99,
"message": "eof"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | String | True | 消息类型编码 |
message | String | True | 详细信息 |
# 响应样例(下行消息)
# 认证失败
{
"code": 1,
"message": "认证失败"
}
# 服务端已准备好接收
{
"code": 2,
"message": "准备发送数据"
}
# http形式发起的接管(文字接管/音频接管)完成/取消接管完成通知
{
"code": 18,
"message": "接管/取消接管完成",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# 未匹配或算法连接中断
{
"code": 4,
"message": "停止发送数据"
}
# 未知原因失败
{
"code": 5,
"message": "发送数据失败"
}
# 没有对应的直播信息
{
"code": 6,
"message": "服务端未准备好接收"
}
# 发送的流式接管出现错误,接管冲突给前端发拒绝消息
{
"code": 7,
"message": "算法端接管冲突被拒绝"
}
# http形式发起的接管(文字接管/音频接管)开始播放接管通知
{
"code": 19,
"message": "开始播放接管",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# http形式发起的接管(文字接管/音频接管)接管入队完成通知
{
"code": 20,
"message": "接管入队完成",
"data": {
"sessionId": "xxxxx",
"commandTraceId": "yyyyyy",
"timestamp": 1234567890
}
}
# webSocket形式发起的接管(文字接管/音频接管)的消息接收成功通知(目前只响应消息 99 eof)
{
"code": -1,
"message": "接管消息ACK",
"data": {
"sessionId": "xxxxx",
"code": 99,
"commandTraceId": "yyyyyy",
"timestamp": 1740998208131
}
}
# 直播NLP问答
# 接口描述
直播前可以预设多个问答库和问答底稿内容,具体方法需通过平台web端界面 (opens new window)设置;直播时可以设置本场直播匹配的问答库ID(一场直播仅支持匹配一个问答库),直播过程中可根据观众提问的问题在匹配的问答库中进行检索,若命中答案则返回对应的答案内容,用户可选择通过直播接管的形式播放对应答案。
# 请求地址
POST
/api/2dvh/v1/nlp/model/reply
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
appId | String | True | 问答库ID,注意需使用字符串格式的问答库ID,非界面展示的自增ID |
device | String | True | 访问设备信息,根据请求发起终端选择,取值范围为:ios / android / windows / macos |
language | String | True | 语言,当前仅支持中文,取值固定为"zh" |
query | String | True | 发起查询的问题内容 |
session | String | True | 用户自定义字段,要求为数字/字母/-组合,多轮对话使用同一session,将视为连续问题,可根据上下文信息匹配最佳答案结果 |
trace | String | True | 用户自定义字段,要求为数字/字母/-组合,用于追踪查询信息 |
# 请求样例
{
"appId": "app_id",
"device": "macos",
"language": "zh",
"query": "你好",
"session": "456tf6c2-846c-4b8b-8ga9-e866fgr678a2",
"trace": "451ee6c2-838c-4b8b-8ba9-e86c2d1692c7"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
answer | String | True | 问题答案 |
device_id | String | True | 访问设备信息 |
language | String | True | 语言,当前仅支持"zh" |
query | String | True | 查询的问题内容 |
session | String | True | 查询时Session ID |
trace | String | True | 查询时Trace ID |
error_message | String | True | 错误信息 |
# 响应样例
{
"answer": "卫生间在您右手边",
"device_id": "DeviceID",
"error_message": "",
"language": "LanguageCode",
"query": "我想去厕所",
"session": "SessionID",
"trace": "TraceID"
}
# 关闭直播
# 接口描述
关闭一路状态为进行中的数字人直播间实例,停止数字人推流关闭直播,释放相关资源。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/close
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
# 请求样例
{
"sessionId": "sessionId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Boolean | False | 直播是否关闭成功 |
# 响应样例
{
"code": 0,
"message": "success",
"data": true
}
# 查询会话状态
# 接口描述
支持查询指定sessionId的直播间实例的运行状态,传入sessionId参数,返回该直播间的运行状态信息。
# 请求地址
GET
/api/2dvh/v1/material/live/channel/stat?sessionId={sessionId}
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
# 请求样例
http://{domainname}/api/2dvh/v1/material/live/channel/stat?sessionId=8bfeb2bd58474547a87520643cc2d8df
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | False | 任务信息 |
- status | Integer | True | 任务状态:2:直播中,32:视频流创建中, 35:视频流创建完成,5:直播主动关闭,50:其他关闭(如长时间无心跳,网络链接中断等),9:异常,99:初始化失败 |
- sessionToken | String | False | 麦克风接管使用的token信息 |
- rtcAppId | String | False | RTC APP ID (状态为2和35有此值) |
- rtcChannelId | String | False | RTC Channel ID (状态为2和35有此值) |
- rtcUid | String | False | RTC UID (状态为2和35有此值) |
- rtcToken | String | False | RTC Token (状态为2和35有此值) |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"sessionToken": "sessionToken",
"status": 35,
"rtcAppId": "rtcAppId",
"rtcChannelId": "rtcChannelId",
"rtcUid": "rtcUid",
"rtcToken": "rtcToken"
}
}
# 查询进行中会话列表
# 接口描述
查询当前用户下所有进行中的直播间实例列表,该接口仅返回运行中的实例,已关闭的实例不会返回。
# 请求地址
GET
/api/2dvh/v1/material/live/channel/running/list
# 请求头
无
# 请求参数
无
# 请求样例
无
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Object | False | 任务信息 |
- sessionId | String | True | 会话的唯一标识 |
- status | Integer | True | 任务状态:2:直播中;32:视频流创建中;35:视频流创建完成 |
- startTime | String | False | 直播开始时间 (yyyy-MM-dd HH:mm:ss) |
# 响应样例
{
"code": 0,
"message": "success",
"data": [{
"sessionId": "sessionId",
"status": 2
},
{
"sessionId": "sessionId",
"status": 32
}
]
}
# 查询历史会话列表
# 接口描述
查询当前用户下所有历史的直播间实例列表,该接口仅返回历史已完成的的实例,进行中的实例不会返回。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/history/list
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | False | 直播会话的唯一标识 |
status | Integer | False | 任务状态: 5:已完成,50:其他关闭(如长时间无心跳,网络链接中断等),9:异常,99:初始化失败,97:系统路数不足,98:客户路数不足 |
pageNo | int | False | 当前页码 (默认 1) |
pageSize | int | False | 每页条数 (默认 10) |
sortName | String | False | 排序字段名 |
sortValue | String | False | 排序顺序: asc, desc |
# 请求样例
{
"pageSize": 10,
"pageNo": 1
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Number | True | 0 - 成功, 其他- 异常 |
message | String | True | 异常详细信息 |
data | Object | False | data object ,异常时通常为空 |
- pagination | pagination | True | 分页信息(参照共通说明) |
- result | Object | True | 任务列表(参照下面说明) |
直播任务列表
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 直播会话的唯一标识 |
status | Integer | True | 任务状态: 5:直播主动关闭,50:其他关闭(如长时间无心跳,网络链接中断等),9:异常,99:初始化失败 |
startTime | String | True | 直播开始时间(yyyy-MM-dd HH:mm:ss) |
endTime | String | True | 直播截止时间 (yyyy-MM-dd HH:mm:ss) |
# 响应样例
{
"code": 0,
"message": "success",
"data": {
"pagination": {
"pageNo": 1,
"numberPages": 1,
"numberRecords": 2,
"pageSize": 2,
"startIndex": 0
},
"result": [
{
"sessionId": "sessionId",
"startTime": "2023-02-17 16:53:26",
"endTime": "2023-02-18 10:03:21",
"status": 5
},
{
"sessionId": "sessionId",
"startTime": "2023-02-17 16:56:26",
"endTime": "2023-02-17 17:43:19",
"status": 9
}
]
}
}
# 获取RTC Token
# 接口描述
获取rtc token。在权限过期前 30 秒,SDK 会触发 token-privilege-will-expire 回调。收到该回调后,客户端需要从服务器获取新的 Token 并调用 renewToken 方法将新生成的 Token 传给 SDK。
# 请求地址
POST
/api/2dvh/v1/material/rtc/token/audience
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
rtcChannelId | String | True | RTC Channel ID |
# 请求样例
{
"sessionId": "sessionId",
"rtcChannelId": "rtcChannelId"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | String | False | rtc token |
# 响应样例
{
"code": 0,
"message": "success",
"data": "007eJxTYGD8ItJX2zMjMu2BfJybs/H+9+66e3wXr2p+eTt877SnV3cqMKSZGKRamJomGRqnGZhYmhhamlikGJmaJ6WmGRuYpqQahHteTjmwgoHh8I7fcYwMjAwsQAziM4FJZjDJAiYVGCwNLM3NTdJSLVLMgMZYJFqapqalWZhZJpqnGSabp6YxMhgBADEzLqA="
}
# 更新URTC Token
# 接口描述
更新urtc token。客户平台需要在token过期前获取新Token并通知给PAAS平台。
# 请求地址
POST
/api/2dvh/v1/material/rtc/token/host/renew
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
urtcToken | String | True | 用户rtc鉴权token |
# 请求样例
{
"sessionId": "sessionId",
"urtcToken": "urtcToken"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | String | False | 通常为空 |
# 响应样例
{
"code": 0,
"message": "success",
"data": ""
}
# 直播接管(即将下线,请使用"直播接管(可中断)")
# 接口描述
发送一段播报文本或者播报音频文件给到服务端,数字人会基于文本/音频停止既定播报内容,实时进行TTS生成、表情动作驱动,并渲染视频流给到用户。
# 请求地址
POST
/api/2dvh/v1/material/live/channel/command
# 请求头
Content-Type:
application/json
# 请求参数
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 会话的唯一标识 |
param | String | True | 接管内容(该参数为json转义后的字符串) |
# 请求样例
{
"sessionId": "sessionId",
"param": "{\"tts_query\": {\"content\": \"有一颗蛋在地上滚。滚过树林,滚过花园,又从斜坡滚了下去,最后滚进一个鸭巢里。鸭妈妈并没有发现不对劲,继续孵蛋。有一天,蛋破了。第一颗蛋孵出的是一只有蓝点的小鸭,叫蜡笔。第二颗蛋孵出的是一只有条纹的小鸭,叫斑马。第三颗蛋孵出的是一只黄色的小鸭,叫月光。第四颗蛋孵出的是一只全身蓝绿色的小怪鸭,嘴里还不停的发出咕叽咕叽的叫声,所以就叫做咕叽咕叽.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}
# 响应元素
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
code | Integer | True | 0 - 成功, 其他 - 异常 |
message | String | True | 异常详细信息 |
data | Boolean | False | 接管是否成功 |
# 响应样例
{
"code": 0,
"message": "success",
"data": true
}
# 直播脚本json定义说明
# 简介
直播脚本即2D数字人直播时需要的内容定义,包含使用的人物形象,发音人音色,播报内容,直播间前后景图片,以及主播各类美颜参数等。
# json参数说明
名称 | 类型 | 取值示例 | 必填 | 说明 |
---|---|---|---|---|
version | String | "0.0.2" | 是 | 直播json配置文件版本号 |
recycle | Integer | 0 | 是 | 直播重复次数,0为一直循环,值大于0,为循环次数,如指定1,则只播放1遍,如指定6,则循环播放6遍 |
stream_mode | Boolean | True | 是 | 是否采用流式播放(快速开播)。满足最低开播条件后马上开播,不等开播脚本的资源全部到位。 |
resolution | Int Array | [1080,1920] | 否 | >= 0.0.2: 声网推流及内部blend画布分辨率,最大支持1080p,最小不能小于1010 0.0.1: 声网推流分辨率,最大支持1080p,最小不能小于1010 |
bit_rate | Float | 3.5 | 否 | 声网推流码率,最大值7,最小值需大于0(Mbps)。实际推流码率是否可以达到设置的码率与当前分辨率有关。 |
live_type | String | "live" , "interactive" | 否 | 定义当前直播的类型,可以不填,默认为"live"普通直播模式,"interactive"为互动模式。互动模式下支持口水话(quick_response)定义。 |
sentence_break | Boolean | True | 否 | 默认开启按标点打断功能,非必填项,如果不想启用按照标点打断(想直接打断),传false |
streaming_param | Object | 否 | 推流参数相关设置 | |
h264_profile | Integer | 100 | 否 | 声网PROFILE设置,默认是100,一般情况下不建议修改 |
key_frame_interval | Integer | 0 | 否 | 声网I帧间隔设置,单位为秒。默认是0,不更改I帧。一般情况下不建议修改 |
agora_live_mode | Boolean | False | 否 | 是否设置声网LIVE模式,默认false,即rtc模式。true为live模式。 |
sceneList | Object Array | 包含内容如下 | 是 | 场景数组列表,暂时还未支持多场景,只有第一个数组元素有效 |
digital role | Object | 包含内容如下 | ||
id | Integer | 1 | 否 | 数字人id |
face_feature_id | String | "1" | 是 | 数字人face feature id |
name | String | "小李" | 否 | 数字人名称 |
url | String | "https://xxx/role.zip" | 是 | 数字人形象zip包 |
position | Object | 包含内容如下 | 否 | 数字人形象图片的起始像素位置,以1080*1920分辨率大小画布的左上角为原点,向右为x方向,向下为y方向 |
x | Integer | 0 | 是 | x方向坐标值 |
y | Integer | 0 | 是 | y方向坐标值 |
scale | Float | 1.0 | 否 | 数字人形象比例 |
alpha | Boolean | false | 否 | 设置是否数字人推流为ALPHA透明背景模式。默认false,不推送透明通道。 |
tts_config | Object | 包含内容如下 | 是 | tts配置 |
qid | String | "8wfZav:AEA_Z10Mqp9GCwDGMrz8xIzi3VScxNzUtLCh" | 否 | 非必填项,使用qid可以代替id/vendor_id,即(id/vendor_id)可以不填,但id和qid不能同时为空。 |
id | String | "zh-CN-XiaoxuanNeural" | 是 | 发音人id |
name | String | "晓萱" | 是 | 发音人名称 |
vendor_id | Integer | 4 | 是 | 供应商id |
language | String | "zh-CN" | 是 | 语言码 |
pitch_offset | Float | 0.0 | 是 | 音调,数值越大越尖锐,越低越低沉,支持范围 [-60, 60] |
speed_ratio | Float | 1 | 是 | 语速,数值越大语速越慢,支持范围 [0.5, 2] |
volume | Integer | 100 | 是 | 音量,数值越大声音越大,支持范围 [1, 400] |
tts_query | Object | 包含内容如下 | 否 | tts语音合成 |
content | String | "尊敬的观众朋友们,大家好!非常荣幸能够在这个美好的时刻与大家相聚,欢迎收看今天的直播节目。" | 是 | 待合成语音的文本内容,字数不得少于10个字,所有语言的发音人都可以合成英文query;所有语言的发音人都可以合成自己语言的query;粤语、沪语等中文方言发音人可以合成中文query |
ssml | Boolean | false | 否 | 是否使用ssml,开启后query可以使用USSML和SSML ,推荐使用USSML |
audios | Object Array | 包含内容如下 | 否 | 音频驱动,tts_query和audios都存在时,tts_query优先 |
url | String | "https://xxx/audio.mp3" | 是 | 数组,支持多条mp3格式的驱动音频文件 |
quick_response | Object Array | 包含内容如下 | 否 | 仅用于互动数字人下快速回复使用,使用接管接口发送快速回复数组中的序号,从0开始。-1代表随机选一条。 TTS文本和音频文件只支持一个,同时存在时TTS优先。口水词要么全部是TTS请求,要么全部是音频请求,请不要混用。 |
tts_query | Object | 否 | 口水词的请求文本。TTS文本和音频文件只支持一个,同时存在时TTS优先。口水词要么全部是TTS请求,要么全部是音频请求,请不要混用。 | |
content | String | "您好,尊贵的客户" | 是 | 口水词的文本内容 |
ssml | Boolean | false | 否 | 是否使用ssml请求 |
audio | String | "https://xxx/audio.mp3" | 否 | 口水词的音频接管文件地址。TTS文本和音频文件只支持一个,同时存在时TTS优先。口水词要么全部是TTS请求,要么全部是音频请求,请不要混用。 |
quick_response_preload_list | Object Array | ["001", "002", "003", "004"] | 否 | 快速回复预加载素材ID列表,与quick_response同时存在时,素材ID列表优先 |
opening_words | String | "xxxxx" | 否 | 仅用于互动数字人下开场白使用 |
backgrounds | Object Array | 包含内容如下 | 否 | 背景 |
type | Integer | 0 | 是 | 0:图片,1:视频,支持mp4格式,分辨率暂无要求,不同分辨率的视频/图片按照短边撑满,长边居中截取形式处理 |
name | String | "背景" | 是 | 背景名称 |
url | String | "https://xxx/bg.png" | 是 | 背景文件url |
rect | Int Array | [0,0,1080,1920] | 是 | 背景起始位置和大小,以1080*1920分辨率画布为参考 |
cycle | Boolean | false | 是 | 针对视频有效,false:单次播放,true:循环播放 |
start | Integer | 0 | 是 | 背景开始时间,以ms为单位 |
duration | Integer | -1 | 是 | 背景持续时间,以ms为单位,-1为默认值,表示随视频一直存在 |
foregrounds | Object Array | 包含内容如下 | 否 | |
type | Integer | 0 | 是 | 0:图片 |
name | String | "前景" | 是 | |
url | String | "https://xxx/fg.png" | 是 | 前景文件url,支持png或jpg |
rect | Int Array | [0,0,1080,1920] | 是 | 起始位置和大小,以1080*1920分辨率画布为参考 |
start | Integer | 0 | 是 | 前景开始时间,以ms为单位 |
duration | Integer | -1 | 是 | 前景持续时间,以ms为单位,-1为默认值,表示随视频一直存在 |
effects | Object | 包含内容如下 | 否 | |
version | String | "1.0" | 是 | 特效引擎版本 |
beautify | Object | 包含内容如下 | 否 | 美颜 |
whitenStrength | Float | 0.3 | 否 | [0,1.0] 美白, 默认值 0.30, 0.0 不做美白 |
whiten_mode | Integer | 0 | 否 | 美白模式:0(偏粉白), 1(自然白), 2(只有皮肤区域自然白) |
reddenStrength | Float | 0.36 | 否 | [0,1.0]红润, 默认值 0.36, 0.0 不做红润 |
smoothStrength | Float | 0.74 | 否 | [0,1.0]磨皮, 默认值 0.74, 0.0 不做磨皮 |
smooth_mode | Integer | 0 | 否 | 磨皮模式:0(脸部区域磨皮), 1(全图磨皮), 2(脸部区域精细磨皮) |
shrinkRatio | Float | 0.11 | 否 | [0,1.0]瘦脸, 默认值 0.11, 0.0 不做瘦脸效果 |
enlargeRatio | Float | 0.13 | 否 | [0,1.0]大眼, 默认值 0.13, 0.0 不做大眼效果 |
smallRatio | Float | 0.10 | 否 | [0,1.0]小脸, 默认值 0.10, 0.0 不做小脸效果 |
narrowFace | Float | 0.0 | 否 | [0,1.0] 窄脸, 默认值 0.0, 0.0 不做窄脸 |
roundEyesRatio | Float | 0.0 | 否 | [0,1.0] 圆眼, 默认值 0.0, 0.0不做圆眼 |
thinFaceShapeRatio | Float | 0.0 | 否 | [0,1.0]瘦脸型, 默认值 0.0, 0.0 不做瘦脸型效果 |
chinLength | Float | 0.0 | 否 | [-1, 1]下巴长短, 默认值为 0.0,[-1, 0]为短下巴,[0, 1]为长下巴 |
hairlineHeightRatio | Float | 0.0 | 否 | [-1, 1]发际线, 默认值为 0.0,[-1, 0] 为低发际线,[0, 1]为高发际线 |
appleMusle | Float | 0.0 | 否 | [0, 1.0]苹果肌,默认值为 0.0,0.0 不做苹果肌 |
narrowNoseRatio | Float | 0.0 | 否 | [0, 1.0]瘦鼻,瘦鼻翼,默认值为 0.0,0.0 不做瘦鼻 |
noseLengthRatio | Float | 0.0 | 否 | [-1, 1]长鼻, 默认值为 0.0, [-1, 0]为短 鼻,[0, 1]为长鼻 |
profileRhinoplasty | Float | 0.0 | 否 | [0, 1.0]侧脸隆鼻,默认值为 0.0,0.0 不做侧脸隆鼻效果 |
mouthSize | Float | 0.0 | 否 | [-1, 1]嘴巴大小,默认值为 0.0,[-1, 0]为放大嘴巴,[0, 1]为缩小嘴巴 |
philtrumLengthRatio | Float | 0.0 | 否 | [-1, 1]人中长短, 默认值为 0.0,[-1, 0]为长人中,[0, 1]为短人中 |
eyeDistanceRatio | Float | 0.0 | 否 | [-1, 1]调整眼距,默认值为 0.0,[-1, 0]为减小眼距,[0, 1]为增加眼距 |
eyeAngleRatio | Float | 0.0 | 否 | [-1, 1]眼睛角度,默认值为 0.0,[-1, 0]为左眼逆时针旋转,[0, 1]为 左眼顺时针旋转,右眼与左眼相对 |
openCanthus | Float | 0.0 | 否 | [0, 1.0]开眼角,默认值为 0.0, 0.0 不做开眼角 |
shrinkJawbone | Float | 0.0 | 否 | [0, 1.0]瘦下颔骨比例,默认值 0.0, 0.0 不做瘦颧骨 |
shrinkRoundFace | Float | 0.0 | 否 | [0, 1.0]圆脸瘦脸,默认值 0.0, 0.0 不做瘦脸 |
shrinkLongFace | Float | 0.0 | 否 | [0, 1.0]长脸瘦脸,默认值 0.0, 0.0 不做瘦脸 |
shrinkGoddessFace | Float | 0.0 | 否 | [0, 1.0]女神瘦脸,默认值 0.0, 0.0 不做瘦脸 |
shrinkNaturalFace | Float | 0.0 | 否 | [0, 1.0]自然瘦脸,默认值 0.0, 0.0 不做瘦脸 |
shrinkWholeHead | Float | 0.0 | 否 | [0, 1.0]整体缩放小头,默认值 0.0, 0.0 不做整体缩放小头效果 |
contrastStrength | Float | 0.05 | 否 | [0,1.0]对比度, 默认值 0.05, 0.0 不做对比度处理 |
saturationStrength | Float | 0.1 | 否 | [0,1.0]饱和度, 默认值 0.10, 0.0 不做饱和度处理 |
sharpen | Float | 0.0 | 否 | [0, 1.0]锐化, 默认值 0.0, 0.0 不做锐化 |
clear | Float | 0.0 | 否 | [0, 1.0]清晰强度,默认值 0.0,0.0 不做清晰 |
# json文件样例
{
"version": "0.0.1",
"recycle": 0,
"resolution": [1080,1920],
"bit_rate": 5,
"stream_mode": true,
"sceneList": [
{
"digital_role": {
"id": 1,
"face_feature_id": "0325_nina_s3_beauty",
"name": "小李",
"url": "https://dwg-aigc-paas-test.oss-cn-hangzhou.aliyuncs.com/materials/77/0325_nina_s3_beauty.zip",
"position": {
"x": 10,
"y": 60
},
"scale": 1
},
"tts_config": {
"id": "zh-CN-XiaoxuanNeural",
"name": "xiaoxuan",
"vendor_id": 4,
"language": "zh-CN",
"pitch_offset": 0.0 ,
"speed_ratio": 1,
"volume": 400
},
"tts_query": {
"content": "商汤科技是一家行业领先的人工智能软件公司,以坚持原创,让AI引领人类进步为使命。",
"ssml": false
},
"audios": [
{
"url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/softsugar.mp3"
}
],
"quick_response": [
"我正在考虑一下,稍后给你答复。",
"让我想一想,稍后回复你消息。",
"我需要时间来仔细考虑一下这个问题。",
"这个问题有点复杂,我需要稍后回复你。",
"我需要一些时间来准备一个详细的回答。",
"让我稍微思考一下,然后再回复你。",
"我会在稍后给你一个详细的答复,请稍等。",
"我会仔细思考这个问题,然后回复你。",
"我需要一些时间来彻底理解这个问题。",
"我会考虑一下,稍后再告诉你我的看法。"],
"opening_words": "大家好,欢迎进入直播间",
"backgrounds": [
{
"type": 0,
"name": "背景",
"url": "https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/background.png",
"rect": [
0,
0,
1080,
1920
],
"cycle": true,
"start": 0,
"duration": -1
}
],
"foregrounds": [
{
"type": 0,
"name": "前景1",
"url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/frontgroud.png",
"rect": [
0,
0,
310,
88
],
"start": 0,
"duration": 100
}
],
"effects": {
"version": "1.0",
"beautify": {
"whitenStrength": 1.0,
"whiten_mode": 0,
"reddenStrength": 0.36,
"smoothStrength": 1.0,
"smooth_mode": 0,
"shrinkRatio": 1.0,
"enlargeRatio": 1.0,
"smallRatio": 0.1,
"narrowFace": 1.0,
"roundEyesRatio": 0.0,
"thinFaceShapeRatio": 0.0,
"chinLength": 0.0,
"hairlineHeightRatio": 0.0,
"appleMusle": 0.0,
"narrowNoseRatio": 0.0,
"noseLengthRatio": 0.0,
"profileRhinoplasty": 0.0,
"mouthSize": 0.0,
"philtrumLengthRatio": 0.0,
"eyeDistanceRatio": 0.0,
"eyeAngleRatio": 0.0,
"openCanthus": 0.0,
"brightEyeStrength": 0.0,
"removeDarkCircleStrength": 0.0,
"removeNasolabialFoldsStrength": 0.0,
"whiteTeeth": 0.0,
"shrinkCheekbone": 0.0,
"thinnerHead": 0.0,
"openExternalCanthus": 0.0,
"shrinkJawbone": 0.0,
"shrinkRoundFace": 0.0,
"shrinkLongFace": 0.0,
"shrinkGoddessFace": 0.0,
"shrinkNaturalFace": 0.0,
"shrinkWholeHead": 0.0,
"contrastStrength": 0.05,
"saturationStrength": 0.1,
"sharpen": 0.0,
"clear": 0.0
}
}
}
]
}
# 直播接管json定义说明
# 简介
直播接管即2D数字人直播时支持通过文字或音频文件停止当前既定的直播内容,改为播报用户指定的内容,同时支持接管期间替换画面中的前景/背景图片。
# json参数说明
名称 | 类型 | 取值示例 | 必填 | 说明 |
---|---|---|---|---|
tts_query | Object | 否 | tts语音合成 | |
content | String | "尊敬的观众朋友们,大家好!非常荣幸能够在这个美好的时刻与大家相聚,欢迎收看今天的直播节目。" | 是 | 待合成语音的文本内容,字数不得少于10个字 |
ssml | Boolean | false | 否 | 是否使用ssml,开启后query可以使用USSML和SSML ,推荐使用USSML |
audio | String | "https://xxx/audio.mp3" | 否 | mp3格式的驱动音频文件,tts_query和audio都存在时,tts_query优先,忽略audio |
foregrounds | Object Array | 包含内容如下 | 否 | 前景图片,需使用可中断的接管服务接口。 |
url | String | "https://xxx/fg.png" | 是 | 前景图片url,支持png或jpg |
rect | Int Array | [0,0,1080,1920] | 是 | 起始位置和大小,以1080*1920分辨率画布为参考 |
start | Integer | 0 | 是 | 前景图片开始出现时间,以ms为单位 ,若设置的接管图片出现时间点晚于TTS播报完成时间,则接管图片不显示,显示无图片效果;若设置的接管图片持续时间超过TTS播报持续时间,则接管图片显示至接管完成的最后时刻;若设置的接管图片持续时间短于TTS播报持续时间,则剩余接管时间内显示无图片效果 |
duration | Integer | -1 | 是 | 前景图片持续时间,以ms为单位,-1为默认值,表示随接管持续一直存在 |
backgrounds | Object | 包含内容如下 | 否 | 背景图片,需使用可中断的接管服务接口。 |
url | String | "https://xxx/bg.png" | 是 | 背景图片url,支持png或jpg |
rect | Int Array | [0,0,1080,1920] | 是 | 起始位置和大小,以1080*1920分辨率画布为参考,图片按照短边撑满,长边居中截取形式处理 |
start | Integer | 0 | 是 | 背景图片开始出现时间,以ms为单位,若设置的接管图片出现时间点晚于TTS播报完成时间,则接管图片不显示,显示无图片效果;若设置的接管图片持续时间超过TTS播报持续时间,则接管图片显示至接管完成的最后时刻;若设置的接管图片持续时间短于TTS播报持续时间,则剩余接管时间内显示无图片效果 |
duration | Integer | -1 | 是 | 背景图片持续时间,以ms为单位,-1为默认值,表示随接管持续一直存在 |
# json文件样例
{
"tts_query": {
"content": "尊敬的观众朋友们,大家好!下面插播一段新闻.",
"ssml": false
},
"audio": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/softsugar.mp3",
"backgrounds":
{
"url": "https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/background.png",
"rect": [
0,
0,
1080,
1920
],
"start": 0,
"duration": -1
},
"foregrounds": [
{
"url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/frontgroud.png",
"rect": [
0,
0,
310,
88
],
"start": 0,
"duration": 100
}
]
}
# 直播状态回调参数
使用API时,系统将通过填写的直播状态回调地址,返回直播状态等信息,若需要直播状态回调功能,则需联系管理员在创建账户时提供直播状态回调地址。
直播间状态发生状态变更,且状态变为35:视频流创建完成,5:直播主动关闭,50:其他关闭(如长时间无心跳,网络链接中断等),9:异常,99:初始化失败(http请求为200,先收到状态32:初始化进行中的情况下) 时将进行回调。
直播接管完成和取消完成(34:接管入队完成,36:接管播放开始,37:接管播放完成,39:接管异常)时将进行回调(不含麦克风接管)。
如果用户配置了AuthKey将返回鉴权信息timestamp和signature,具体参考<HTTP回调事件通知>。
提供的接口实现中HTTP Method为POST,Content-Type应为application/json
。
字段 | 类型 | 必填 | 描述 |
---|---|---|---|
sessionId | String | True | 直播会话的唯一标识 |
rtcAppId | String | False | RTC APP ID (状态为35时有此值) |
rtcChannelId | String | False | RTC Channel ID (状态为35时有此值) |
rtcUid | String | False | RTC UID (状态为35时有此值) |
rtcToken | String | False | RTC Token (状态为35时有此值) |
status | Integer | True | 状态: 35:视频流创建完成 5:直播主动关闭 50:其他关闭(如长时间无心跳,网络链接中断等) 9:异常 99:初始化失败 96:urtcToken过期 34: 接管入队完成 36:接管播放开始 37:接管播放完成 39:接管异常 |
commandTraceId | String | False | 接管任务TraceId |
commandFinishTime | String | False | 打断完成时间 (yyyy-MM-dd HH:mm:ss) |
taskResult | String | False | 报错信息 |
userData | String | False | 用户信息 |
以上即为平台可以提供的视频直播全部能力。