# 互动直播

平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力,同时支持用户与2D数字人进行实时语音交互。 平台保留互动直播历史版本接口,建议用户按照在线文档内容接入新版本直播相关服务,历史版本接口即将安排下线,历史文档参考: 文档链接 (opens new window)

# 功能介绍

虚拟数字人直播服务集成了图形图像、语音等算法能力,提供给客户的API服务,方便客户快速创作直播内容并进行直播。主要面对的行业包括政务、金融、教培、传媒等,平台提供能够支持用户与2D数字人进行实时语音交互的数字人产品能力,目前互动数字人直播支持文本、语音两种交互方式,同时在数字人说话中可以支持通过特定话术进行打断,实现更加友好的双工语音对话体验,以期给用户带来个性化服务,提升用户使用体验,提高效率和竞争力。

# API 说明

用户调用平台全部API服务,皆需要访问服务接入点:aigc.softsugar.com,并在请求头中加上token信息;WS接口需将token信息拼写到URL上。

# 直播时序图

Live Process

# 新建直播间

# 接口描述

创建一路数字人直播实例,通过传入指定的参数系统进行初始化,并返回会话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/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
}

# 直播接管(可中断)

# 接口描述

发送一段播报文本或者播报音频文件给到服务端,数字人会基于文本/音频停止既定播报内容,实时进行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"]
  }
}

# 麦克风接管

# 接口描述

注意:该接口为WebSocket接口,数据请求使用 json, 编码使用 UTF8.
发送麦克风语音,数字人会基于实时语音生成画面并渲染视频流给到用户,麦克风开启状态中即便不说话,也会收音。

# 请求地址

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

# 请求样例(上行消息)

# 连接建立

wss://host/api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType=BROWSER&sessionId=123&Authorization=Bearer MTZiMjQzMzg4ZTYyMTlkNTBjZWU0ODAxODg5N2MyY2NmMmQzNzNhOC04YzNiLTRlMjEtYmY3Mi0yNzA2YzFkMjg4ODA

# 准备开始
	{
		"code": 0,
		"message": "begin"
	}
# 语音数据
二进制语音数据
# 发送结束
	{
		"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
		}
   }

# 直播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="
}

# 直播脚本json定义说明

# 简介

直播脚本即2D数字人直播时需要的内容定义,包含使用的人物形象,发音人音色,播报内容,直播间前后景图片,以及主播各类美颜参数等。

# json参数说明
名称 类型 取值示例 必填 说明
version String "0.0.1" 直播json配置文件版本号
recycle Integer 0 直播重复次数,0为一直循环,值大于0,为循环次数,如指定1,则只播放1遍,如指定6,则循环播放6遍
stream_mode Boolean True 是否采用流式播放(快速开播)
resolution Int Array [1080,1920] 推流分辨率,最大支持1080 × 1920,最小不能小于10× 10,默认 1080 × 1920
bit_rate Float 3.5 推流码率(Mbps),最大值7,最小值1,默认 3.5
sentence_break Boolean True 默认开启按标点打断功能,非必填项,如果不想启用按照标点打断(想直接打断),传false
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 数字人形象比例
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格式的驱动音频文件
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"
        }
      ],
      "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:初始化失败
34: 接管入队完成
36:接管播放开始
37:接管播放完成
39:接管异常
commandTraceId String False 接管任务TraceId
commandFinishTime String False 打断完成时间 (yyyy-MM-dd HH:mm:ss)
taskResult String False 报错信息
userData String False 用户信息

以上即为平台可以提供的视频直播全部能力。

最后更新: 2024/4/7 上午10:21:50