API接入文档
与我司商务合作后,我司会给客户appId和appSecret。请妥善保存appSecret
客户通过appId和appSecret获取token,将token和source(值为sdk)放入header头中可以请求对应的接口。
通过appId和appSecret请求/live-manager/open/accessToken接口可以获得token。
sdk得到token加上source(值为sdk)和其他请求数据集合后,会先进行安全校验等验证,一系列验证通过后便会处理完成这次发送过来的数据请求,并自动刷新token有效时间。平台返回的参数格式如下:
字段 | 类型 | 是否必须 | 备注 |
---|---|---|---|
code | Integer | Y | 返回的状态码,为200表示成功 |
msg | string | N | 成功/错误的描述信息 |
data | object | N | 返回的具体内容 |
success | string | N | 成功/错误标识位 |
错误码 | 描述 |
---|---|
200 | 正常 |
500 | 失败 |
100501 | token不能为空 |
100502 | toke失效 |
100503 | appid或者appscrect无效 |
100504 | 用户秘钥尚未生效 |
100505 | 用户秘钥到期 |
接口地址:/live-manager/open/accessToken
请求方式:POST
请求数据类型:application/json
响应数据类型:*/*
接口描述:传入appId和appSecret
请求参数:
参数名称 | 参数说明 | 数据类型 | 是否必填 | schema |
---|---|---|---|---|
appId | appId | string | Y | |
appSecret | appSecret | string | Y |
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | Response«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 | schema |
---|---|---|---|
code | Integer | ||
data | TokenVO | ||
msg | string | ||
success | boolean |
TokenVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 |
---|---|---|---|---|
token | token | string | Y | |
expirationTime | token有效期(秒) | Long | Y | |
startTime | 秘钥生效时间 | date | Y | |
endTime | 秘钥失效时间 | date | Y | |
mqttUser | mqtt用户名 | string | N | 开播时与服务交互使用 |
mqttPassword | mqtt密码 | string | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"token": "16A69FBA33D7B7EE563114476C0F979853FE3FF5B618DDCEAA764E3EE7BF46A25A032D2F8EE7C64EB0EC578C5C42F9ADF2D2F8EE7C64EB0EC578C5C42F9ADF2",
"expirationTime": 3600,
"startTime": "2023-07-01 18:01:14",
"endTime": "2023-07-31 18:01:19",
"mqttUser": "user1",
"mqttPassword": "password1"
}
}
接口地址:
/live-manager/openApi/liveInfo/create
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
cutinFlag | 是否插播 | boolean | body | Y | ||
liveName | 直播间名称 | string | body | Y | ||
robotList | 主播列表 | RobotVO | body | N | List,可为空 |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | Y |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | ||
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | N | 0-其他,1-站姿,2-坐姿 | |
duration | 时长(单位s) | Integer | N | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 场景模板视频 | string | N | 注:videoCoverUrl(场景模板视频)为了方便后面创建会话时用到这里建议填上 |
请求示例:
{
"cutinFlag": true,
"liveName": "我的直播间",
"robotList": [
{ "id":12312,
"robotCode": "123123",
"robotName": " 主播名",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4"
},
{
"sceneCode": "123123122",
"sceneName": "场景名2",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_481.mp4"
}
]
},
{
"robotCode": "12333",
"robotName": " 主播名1",
"sceneList": [
{
"sceneCode": "12312333",
"sceneName": "场景名3",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_482.mp4"
}
]
}
]
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | 直播间ID | integer |
message | string | |
success | boolean |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": 12312
}
接口地址:
/live-manager/openApi/liveInfo/update
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
id | 直播间id | integer | body | Y | ||
cutinFlag | 是否插播 | boolean | body | N | null 不更新 | |
liveName | 直播间名称 | string | body | N | null 不更新 | |
robotList | 主播列表 | List(RobotVO) | body | N | List为空 清空 null 不变更 |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | Y |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | ||
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | N | 0-其他,1-站姿,2-坐姿 | |
duration | 时长(单位s) | Integer | N | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 场景模板视频 | string | Y |
请求示例:
{
"id": 12312,
"cutinFlag": true,
"liveName": "我的直播间",
"robotList": [
{
"id":123123,
"robotCode": "123123",
"robotName": " 主播名",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4"
},
{
"sceneCode": "123123122",
"sceneName": "场景名2",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_481.mp4"
}
]
},
{
"robotCode": "12333",
"robotName": " 主播名1",
"sceneList": [
{
"sceneCode": "12312333",
"sceneName": "场景名3",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_482.mp4"
}
]
}
]
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | 更新是否成功 | boolean |
message | string | |
success | boolean |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": true
}
接口地址:
/live-manager/openApi/liveInfo/query
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
id | 直播间id | integer | query | Y |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | LiveInfoVO | |
message | string | |
success | boolean |
LiveInfoVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 直播间id | integer | Y | ||
cutinFlag | 是否插播 | boolean | N | ||
liveName | 直播间名称 | string | N | ||
robotList | 主播列表 | List(RobotVO) | N |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | Y |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | ||
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | N | 0-其他,1-站姿,2-坐姿 | |
duration | 时长(单位s) | Integer | N | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 场景模板视频 | string | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"id": 12312,
"cutinFlag": true,
"liveName": "我的直播间",
"robotList": [
{ "id":12312,
"robotCode": "123123",
"robotName": " 主播名",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4",
},
{
"sceneCode": "123123122",
"sceneName": "场景名2",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_481.mp4",
}
]
},
{
"id":123122,
"robotCode": "12333",
"robotName": " 主播名1",
"sceneList": [
{
"sceneCode": "12312333",
"sceneName": "场景名3",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_482.mp4",
}
]
}
]
}
}
接口地址:
/live-manager/openApi/liveInfo/queryByPage
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必须 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
page | page | integer | query | N | 默认值1 | |
pageSize | pageSize | integer | query | N | 默认值10 |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
records | 结果 | List(LiveInfoVO) | |||
total | 总数量 | Integer | Y | ||
pages | 页数 | Integer | Y | ||
size | 每页数量 | Integer | Y |
LiveInfoVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 直播间id | integer | Y | ||
cutinFlag | 是否插播 | boolean | N | ||
liveName | 直播间名称 | string | N | ||
robotList | 主播列表 | List(RobotVO) | N |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | Y |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | ||
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | N | 0-其他,1-站姿,2-坐姿 | 0 1 2 |
duration | 时长(单位s) | Integer | Y | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 场景模板视频 | string | N |
响应示例**:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"id": 12312,
"cutinFlag": true,
"liveName": "我的直播间",
"robotList": [
{ "id":12312,
"robotCode": "123123",
"robotName": " 主播名",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4",
},
{
"sceneCode": "123123122",
"sceneName": "场景名2",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_481.mp4",
}
]
},
{ "id":123122,
"robotCode": "12333",
"robotName": " 主播名1",
"sceneList": [
{
"sceneCode": "12312333",
"sceneName": "场景名3",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_482.mp4",
}
]
}
]
}
}
接口地址:
/live-manager/openApi/customizedMaterial/upload
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
liveId | 直播间ID | integer | body | Y | 直播间ID ,调用3.2 创建直播间接口获取 | |
materialType | 素材类型 | string | body | Y | AUDIO:音频 TEXT:文本 | AUDIO TEXT |
changeVoiceSpeaker | 变音 | string | body | N | 需要变音时必填 | |
materialDescription | 素材描述 | string | body | N | 建议填写 | |
materialUrl | 素材地址 | string | body | N | materialType为AUDIO 时必填 需要48K | |
text | 文本内容 | string | body | N | materialType为TEXT 时必填 | |
ttsSource | tts来源 | integer | body | N | materialType为TEXT 时必填 | |
ttsSpeaker | tts音色 | string | body | N | materialType为TEXT 时必填 | |
volume | tts音量 | float | body | N | materialType为TEXT 时必填 范围-20.0~20.0 | |
intonation | tts语调 | float | body | N | materialType为TEXT 时必填 范围-20.0~20.0 | |
speedRate | tts语速 | float | body | N | materialType为TEXT 时必填 范围-20.0~20.0 | |
f0upKey | tts情绪 | Integer | body | N | 范围-20~20 |
请求示例:
文本类型
{
"changeVoiceSpeaker": "11",
"intonation": 2.0,
"liveId": 1234,
"materialDescription": "这是一段文本话术",
"materialType": "TEXT",
"speedRate": 10,
"text": "今天我们要售卖的产品是XXXX",
"ttsSource": 10,
"ttsSpeaker": "12",
"volume": 0,
"f0upKey":12
}
音频类型
{
"changeVoiceSpeaker": "11",
"liveId": 1234,
"materialDescription": "这是一段音频",
"materialType": "AUDIO",
"materialUrl": "https://www.guiji.ai/demo/material/asdasdasd.wav"
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | 素材id(播放列表传入) | integer |
message | string | |
success | boolean |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": 12312
}
接口地址:
/live-manager/openApi/customizedMaterial/query
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
liveId | 直播间ID | integer | body | Y | 直播间ID | |
materialType | 素材类型 | string | body | N | AUDIO:音频 TEXT:文本 | AUDIO TEXT |
page | 页数 | integer | body | N | 默认1 | |
pageSize | 每页数量 | integer | body | N | 默认10 |
请求示例:
{
"liveId": 12320,
"page":1,
"pageSize":10
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
records | 结果 | MaterialVo | List | ||
total | 总数量 | Integer | Y | AUDIO TEXT | |
current | 当前页数 | Integer | Y | ||
size | 每页数量 | Integer | Y |
MaterialVo
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 素材id | integer | Y | ||
materialType | 素材类型 | string | N | AUDIO:音频 TEXT:文本 | AUDIO TEXT |
materialDescription | 素材描述 | string | N | ||
text | 文本 | string | N | ||
materialUrl | 素材地址 | string | N | ||
liveId | 直播间id | integer | Y | ||
duration | 视频时长 | long | Y | 文本时为0 单位 毫秒 |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"records": [
{
"id": 3123,
"materialType": "TEXT",
"materialDescription": "一段文本",
"text": "合成音色:平台音色/定制音色、音色类别、音色id,封面图、音色名称、示例音频、音色标签、语言支持(枚举)、ssml标签",
"duration": 0,
"liveId": 12320,
"createdTime": "2023-07-12 17:15:11"
},
{
"id": 312376,
"materialType": "AUDIO",
"materialDescription": "一段音频的描述",
"materialUrl": "https://www.guiji.ai/demo/material/asdasdasd.wav",
"duration": 14040,
"liveId": 12320,
"createdTime": "2023-07-12 17:17:46"
}
],
"total": 2,
"size": 10,
"current": 1
}
}
接口地址:
/live-manager/openApi/speaker/platformList
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
page | 页数 | integer | query | N | 默认1 | |
pageSize | 每页数量 | integer | query | N | 默认10 |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
records | 结果 | TtsModelVo | List | ||
total | 总数量 | Integer | Y | ||
size | 每页数量 | Integer | Y | ||
current | 当前页数 | Integer | Y |
TtsModelVo
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | id | integer | Y | ||
ttsName | 音色名称 | string | Y | ||
ttsIntroduction | 音色标签 | string | Y | ||
ttsSpeaker | 发言人标识 | string | Y | ||
ttsCategory | 模型类别 | string | Y | ||
ttsAudition | 示例音频 | string | Y | ||
ttsCover | tts封面链接 | string | Y | ||
ttsSource | tts来源 | integer | Y | ||
languages | 语种 | List | Y | cn:中文 en :英文 | cn en |
ssmlFlag | ssml标签支持 | boolean | Y | ||
f0upKeyFlag | 是否支持情绪 | boolean | Y | ||
userCategory | 音色分类 | string | Y |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"total": 1,
"current": 1,
"pageSize": 10,
"records": [
{
"id": 330,
"ttsName": "Abby",
"ttsIntroduction": "女声|英语|美式|自然|大方",
"ttsSpeaker": "144",
"ttsCategory": "女声、英语",
"ttsAudition": "https://tts.guiji.ai/source/fangyan/eng_abby.wav",
"ttsCover": "https://tts.guiji.ai/tts-market/22874.jpg",
"ttsSource": 10,
"languages": ["en"],
"ssmlFlag":true,
"f0upKeyFlag":true,
"userCategory":"女声"
}
]
}
}
接口地址:
/live-manager/openApi/speaker/customizedList
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | List(TtsModelVo) | |
message | string | |
success | boolean |
TtsModelVo
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
ttsName | 音色名称 | string | Y | ||
ttsIntroduction | 音色标签 | string | Y | ||
ttsSpeaker | 发言人标识 | string | Y | ||
ttsCategory | 模型类别 | string | Y | ||
ttsAudition | 示例音频 | string | Y | ||
ttsCover | tts封面链接 | string | Y | ||
ttsSource | tts来源 | integer | Y | ||
languages | 语种 | List | Y | cn:中文 en :英文 | cn en |
ssmlFlag | ssml标签支持 | boolean | Y | ||
f0upKeyFlag | 是否支持情绪 | boolean | Y | ||
userCategory | 音色分类 | string | Y |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": [
{
"ttsName": "Abby",
"ttsIntroduction": "女声|英语|美式|自然|大方",
"ttsSpeaker": "144",
"ttsCategory": "女声、英语",
"ttsAudition": "https://tts.guiji.ai/source/fangyan/eng_abby.wav",
"ttsCover": "https://tts.guiji.ai/tts-market/22874.jpg",
"ttsSource": 10,
"languages": ["en"],
"ssmlFlag":true,
"f0upKeyFlag":true,
"userCategory":"女声"
}
]
}
接口地址:
/live-manager/openApi/robot/platformList
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | List(RobotVO) | |
message | string | |
success | boolean |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | N |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | 数字人场景code,mqtt连接后CreateNewSession必传 | |
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | Y | 0-其他,1-站姿,2-坐姿 | 0 1 2 |
duration | 时长(单位s) | Integer | Y | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 模版视频地址 | string | Y | ||
sceneType | 类型 | Integer | Y | 0:基础版 (对应绿幕类型) 1:VIP版 (对应其他类型) 2:直播(默认使用) | |
coverUrl | 封面 | string | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": [
{ "id":12312,
"robotCode": "123123",
"robotName": " 主播名",
"coverUrl":"https://robot.guiji.ai/demo/22874.jpg",
"robotDesc":"描述",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"proportion":"9:16",
"posture":"2",
"duration":71,
"exampleUrl":"https://www.guiji.ai/demo/83db133015cdbd388492c7c19f261b.mp4",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4",
"sceneType": 0,
"coverUrl": "https://www.guiji.ai/demo/fde067b459f3228536ff97b4945787b9.png"
}
]
}
]
}
接口地址:
/live-manager/openApi/robot/customizedList
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | List(RobotVO) | |
message | string | |
success | boolean |
RobotVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | 主播id | integer | Y | ||
coverUrl | 封面 | string | N | ||
robotDesc | 描述 | string | N | ||
robotCode | 主播code | string | Y | ||
robotName | 主播名称 | string | Y | ||
sceneList | 场景列表 | List(SceneVO) | N |
SceneVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
sceneCode | 场景code | string | Y | 数字人场景code,mqtt连接后CreateNewSession必传 | |
proportion | 主播比例 | string | N | 16:9 9:16 | |
posture | 姿势 | string | Y | 0-其他,1-站姿,2-坐姿 | 0 1 2 |
duration | 时长(单位s) | Integer | Y | ||
sceneName | 场景名称 | string | Y | ||
exampleUrl | 预览视频 | string | N | ||
videoCoverUrl | 模版视频地址 | string | Y | ||
sceneType | 类型 | Integer | Y | 0:基础版 (对应绿幕类型) 1:VIP版 (对应其他类型) 2:直播(默认使用) | |
coverUrl | 封面 | string | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": [
{ "id":12312,
"robotCode": "123123",
"robotName": " 主播名",
"coverUrl":"https://robot.guiji.ai/demo/22874.jpg",
"robotDesc":"描述",
"sceneList": [
{
"sceneCode": "123123123",
"sceneName": "场景名1",
"proportion":"9:16",
"posture":"2",
"duration":71,
"exampleUrl":"https://www.guiji.ai/demo/83db133015cdbd388492c7c19f261b.mp4",
"videoCoverUrl": "https://www.guiji.ai/demo/2079b894f08646daf3fa98481142e227_1080x1920_0_480.mp4",
"sceneType": 0,
"coverUrl": "https://www.guiji.ai/demo/fde067b459f3228536ff97b4945787b9.png"
}
]
}
]
}
接口地址:
/live-manager/openApi/voice/changeVoiceList
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
该接口需要提前联系客服开通变音权限才能查询到相应数据
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
page | 页数 | integer | query | N | 默认1 | |
pageSize | 每页数量 | integer | query | N | 默认10 |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
records | 结果 | List(ChangeVoiceVO) | |||
total | 总数量 | Integer | Y | ||
current | 当前页数 | Integer | Y | ||
size | 每页数量 | Integer | Y |
ChangeVoiceVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | id | 音色id | Y | ||
speakerCode | 音色code | String | Y | ||
speakerName | 音色名称 | String | Y | ||
ttsAudition | 示例音频 | String | Y | ||
ttsCover | 头像 | String |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"current":1,
"records": [
{
"id":12312,
"speakerCode": "123123",
"speakerName": " 主播名1",
"ttsCover":"https://robot.guiji.ai/demo/22874.jpg",
"ttsAudition":"https://tts.guiji.ai/source/fangyan/eng_abby.wav",
},
{
"id":123122,
"speakerCode": "1231223",
"speakerName": " 主播名2",
"ttsCover":"https://robot.guiji.ai/demo/228274.jpg",
"ttsAudition":"https://tts.guiji.ai/source/fangyan/eng_2abby.wav",
}
],
"total": 0,
"size": 10,
"current": 1
}
}
接口地址:
/live-manager/openApi/speaker/syncSynthesisWavAndChangeVoice
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
该接口需要提前联系客服开通变音权限才能正常使用
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
changeVoiceSpeaker | 变音 | string | body | N | 需要变音时必填 | |
ttsSource | tts来源 | integer | body | Y | 范围-20~20 | |
ttsSpeaker | tts音色 | string | body | Y | 范围-20~20 | |
volume | tts音量 | float | body | Y | 范围-20~20 | |
intonation | tts语调 | float | body | Y | 范围-20~20 | |
speedRate | tts语速 | float | body | Y | 范围-20~20 | |
f0upKey | tts情绪 | Integer | body | N | 范围-20~20 |
请求示例:
{
"changeVoiceSpeaker": "11",
"intonation": 2.0,
"speedRate": 10,
"ttsSource": 10,
"ttsSpeaker": "12",
"volume": 0
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | TTSResultVO | |
message | string | |
success | boolean |
TTSResultVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
filePath | 文件地址 | string | Y | ||
duration | 时长 | long | Y |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"duration":71,
"filePath ":"https://www.guiji.ai/demo/83db133015cdbd388492c7c19f261b.wav"
}
}
接口地址:
/live-manager/openApi/materialCategory/query?code=XXXXXXXX
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
code | 素材分类编码 | String | body | N |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | List(MaterialCategoryVO) | |
message | string | |
success | boolean |
MaterialCategoryVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | id | Integer | Y | ||
parentCode | 上级分类编码 | String | N | ||
name | 素材分类名 | String | Y | ||
code | 素材分类编码 | String | Y |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": [
{
"id":123,
"parentCode":"12312312",
"name":"视频",
"code":"10000"
},
{
"id": 5,
"parentCode": null,
"name": "实时挂件",
"code": "50000"
},
]
}
接口地址:
/live-manager/openApi/material/query?code=XXXXXXXX
&name=XXXXX
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
code | 素材分类编码 | String | body | N | code和parentCode不能同时为空 | |
parentCode | 上级分类编码 | String | body | N | code和parentCode不能同时为空 | |
name | 搜索词 | String | body | N | ||
page | 页数 | Integer | body | N | 默认1 | |
pageSize | 每页数量 | Integer | body | N | 默认10 |
请求示例:
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
records | 结果 | List(MaterialCategoryVO) | |||
total | 总数量 | Integer | Y | ||
current | 当前页数 | Integer | Y | ||
size | 每页数量 | Integer | Y |
MaterialCategoryVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | id | Integer | Y | ||
categoryCode | 素材分类编码 | String | N | ||
name | 素材分类名 | String | Y | ||
code | 素材编码 | String | Y | ||
fileUrl | 文件地址 | String | Y | ||
fileType | 文件类型 | String | Y | ||
coverUrl | 封面图地址 | String | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"records": [
{
"id": 13,
"code": "10001",
"name": "大拇指点赞",
"categoryCode": "10000",
"fileUrl": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/大拇指点赞.gif",
"fileType": "gif",
"coverUrl": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/大拇指点赞.gif"
},
{
"id": 14,
"code": "10002",
"name": "点击小黄车",
"categoryCode": "10000",
"fileUrl": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/点击小黄车.gif",
"fileType": "gif",
"coverUrl": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/点击小黄车.gif"
}
],
"total": 17,
"size": 10,
"current": 1
}
}
接口地址:
/live-manager/openApi/liveRecord/query
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 请求类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|---|
source | source | string | header | Y | ||
page | 页数 | integer | query | N | 默认1 | |
pageSize | 每页数量 | integer | query | N | 默认10 |
请求示例:
-
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PageVO | |
message | string | |
success | boolean |
PageVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
list | 结果 | List(LiveRecordVo) | |||
total | 总数量 | Integer | Y | ||
pages | 页数 | Integer | Y | ||
pageSize | 每页数量 | Integer | Y |
LiveRecordVo
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
id | id | Integer | Y | ||
liveName | 直播间名称 | String | Y | ||
modeName | 主播列表 | String | Y | ||
liveStatusName | 直播状态 | String | Y | 直播中 未开播 | |
cropName | 所属企业 | String | Y | ||
beginTime | 创建时间 | String | Y | ||
totalDurationStr | 直播时长 | String | N | ||
sessionId | sessionId | String | N |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"records": [
{
"id": 17810,
"sessionId": "a2b92ae2-d73d-4614-b2a3-c07a9cecc3ae",
"beginTime": "2023-07-20 19:55",
"liveId": 1246107,
"cropName": "硅基智能",
"liveName": "数字人直播_07-20 18:25",
"modeName": "书绵",
"liveStatusName": "未开播",
"duration": 0.37
},
{
"id": 17809,
"sessionId": "31c7a2cc-17ee-45e0-8282-38934374fa32",
"beginTime": "2023-07-20 19:40",
"liveId": 1246111,
"cropName": "硅基智能",
"liveName": "数字人直播_07-20 19:33",
"modeName": "书绵",
"liveStatusName": "未开播",
"duration": 1.07
},
{
"id": 17808,
"sessionId": "93250819-ca83-4516-8e96-aada7f872d27",
"beginTime": "2023-07-20 19:39",
"liveId": 1246111,
"cropName": "硅基智能",
"liveName": "数字人直播_07-20 19:33",
"modeName": "玉暖",
"liveStatusName": "未开播",
"duration": 0.02
}
],
"total": 1146,
"size": 3,
"current": 1
}
}
接口地址:
/live-manager/openApi/live/getPath
请求方式:
GET
请求数据类型:
application/x-www-form-urlencoded
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
liveId | 直播间ID | integer | Y | ||
sessionId | sessionId | String | Y | ||
duration | 时长 | Integer | Y | 单位 秒 |
请求示例:
{
"liveId":1123123,
"sessionId":"2221b2a-2168-4ef4-919a-21fcd420c27e",
"duration":180
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | string | |
data | PathVO | |
message | string | |
success | boolean |
PathVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
message | 消息 | String | Y | ||
ok | 是否成功 | Boolean | Y | ||
info | 消息 | String | Y | ||
data | PlayaddrVO | Y |
PlayaddrVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
rtmp | rtmp地址 | RtmpVO | N | ||
rtsp | rtsp地址 | RtspVO | N | ||
http_flv | http_flv地址 | HttpFlvVO | N |
RtmpVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
lan | lan地址 | string | N | ||
wan | wan地址 | string | N | 外网地址 |
RtspVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
lan | lan地址 | string | N | ||
wan | wan地址 | string | N | 外网地址 |
HttpFlvVO
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
lan | lan地址 | string | N | ||
wan | wan地址 | string | N | 外网地址 |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"message": "success",
"ok": true,
"info": "set res drawOptions ok!",
"data": {
"playaddr": {
"rtmp": {
"lan": "rtmp://192.168.0.1:1935/xxxxx/xxxx",
"wan": "rtmp://172.16.103.14:1935/xxxxx/xxxx"
},
"rtsp": {
"lan": "rtsp://192.168.0.1:554/xxxxx/xxxx",
"wan": "rtsp://172.16.103.14:554/xxxxx/xxxx"
},
"http_flv": {
"lan": "http://192.168.0.1:8080/xxxxx/xxxx",
"wan": "http://172.16.103.14:8080/xxxxx/xxxx"
}
}
}
}
}
接口地址:
/live-manager/openApi/live/createLiveSession
请求方式:
POST
请求数据类型:
application/json
响应数据类型:
*/*
接口描述:
请求参数:
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
liveId | 直播间id | integer | Y | ||
name | 会话名称 | string | N |
请求示例:
{
"liveId":1,
"name": "测试会话"
}
响应状态:
状态码 | 说明 | schema |
---|---|---|
200 | OK | DMResponse«string» |
201 | Created | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found |
响应参数:
参数名称 | 参数说明 | 类型 |
---|---|---|
code | Integer | |
data | sessionVo | |
msg | string | |
success | boolean |
sessionVo
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 | 枚举 |
---|---|---|---|---|---|
liveId | 直播间id | Integer | |||
sessionId | 会话uuid | string | Y | ||
expirationTime | 会话销毁时间(无交互)秒 | Long | Y | ||
topicSub | 会话订阅主题(mqtt) | string | Y | sender,下文均称为sender | |
topicPub | 会话推送主题(mqtt) | string | Y |
响应示例:
{
"code": 200,
"msg": "处理成功",
"success": true,
"data": {
"liveId": 1,
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"expirationTime": 30,
"topicSub": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea",
"topicPub": "live-proxy-0"
}
}
Step 1.客户端通过mqtt协议向渲染组件发起会话请求,渲染组建准备资源完毕后返回成功。
Step 2.客户端使用ExecSessionResList协议请求开启rtmp推流服务。
Step 3.客户端去对应的拉流地址获取到音视频流之后进行解码、展示。
Step 4.客户端发送其他交互指令控制数字人。
Step 5.直播结束后客户端发送DestroySession事件给服务端,服务端销毁释放资源。
流程图如下:
sequenceDiagram
Title: 直播交互序列图
client->>server: CreateNewSession
# server-->>push-pcm: pull pcm
# push-pcm-->>server: send pcm
server-->client: make sess complete!
client->>server: ExecSessionResList 请求开启rtmp拉流
server-->>client: 服务端SessionState状态返回rtmp拉流地址
Note right of client: 客户段拉视频流
client->>server: 其他交互信令(播放列表调整,数字人切换,图层素材调整,心跳消息)
server-->>client: 其他信令返回
server-->>client: 服务段状态通知
client->>server: DestroySession
fore:前置图层,通常放置浮动图片等元素
center:中间图层,通常放置数字人和一些开播固定元素
back: 后置图层,通常放置背景等元素
为保证元素不因随意设置的width和height导致拉伸变形等,接口会对用户提交的width和height做适配保证元素本身的宽高比不变。
* params中的sessionId 代表会话ID
* 要求在id同层增加sessionId字段,和sender字段(值为topicSub)
接收请求:
{
"params": {
"sessionId":"xxxxxx-xxxxxx-xxxxxx-xxxxxx"
},
"id": xxxx,
"method": "xxxxx",
"sessionId":"xxxxxx-xxxxxx-xxxxxx-xxxxxx",
"topicSub": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea"
}
成功:
{
"id": xxxx,
"result": {
"sessionId":"xxxxxx-xxxxxx-xxxxxx-xxxxxx",
"message": "xxxxxxx,
}
}
失败:
{
"id": xxxx,
"error": {
"sessionId":"xxxxxx-xxxxxx-xxxxxx-xxxxxx",
"message": "xxxxxx",
"code": -xxxxx
}
}
请求参数:
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 |
---|---|---|---|---|
id | 请求id | Integer | Y | 相同的会话Id的情况下不能重复 |
method | 方法 | String | Y | CreateNewSession 固定值 |
sessionId | 会话Id | String | Y | 创建直播会话返回的sessionId |
liveId | 直播间id | Integer | Y | |
token | token | String | Y | |
livePlatform | 平台 | Integer | Y | 3(api平台调用) |
params | 请求参数 | json | Y | |
sender | 请求方ID | String | Y | topicSub值 |
参数名称 | 参数说明 | 数据类型 | 是否必填 | 备注 |
---|---|---|---|---|
sessionId | 会话Id | String | Y | 相同的会话Id的情况下不能重复 |
rule | 规则 | String | Y | DTHumanLivestreamWithAudioRelay 固定值 |
mode | 运行方式 | String | Y | checkheartbeat 固定值 |
videoSize | 视频大小 | Integer | Y | "width": 宽度 "height": 高度 |
token | token | String | Y | |
resList | 元素列表 | Integer | Y | 具体值我司提供(固定值) |
请求示例:
{
"id": 9,
"method": "CreateNewSession",
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"liveId": 1246464,
"token": "16A69FBA33D7B7EE563114476C0F979853FE3FF5B618DDCEAA764E3EE7BF46A25A032D2F8EE7C64EB0EC578C5C42F9ADF2D2F8EE7C64EB0EC578C5C42F9ADF2",
"livePlatform": 3,
"params": {
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"rule": "DTHumanLivestreamWithAudioRelay",
"mode": "checkheartbeat",
"videoSize": {
"width": 1080,
"height": 1920
},
"resList": [
{
"type": "center",
"resOptions": {
"name": "rtmp",
"type": "rtmp"
}
},
{
"type": "center",
"resOptions": {
"type": "aivoicedistort",
"name": "aivoicedistort",
"distortState": false,
"speekerId": 0
}
},
{
"type": "center", --数字人图层(必传)
"resOptions": {
"type": "dthuman", --固定值
"name": "dthuman", --固定值
"audioDriven": {
"mode": "livestream", --固定值
"udCodeUsed": "369590278856773", --sceneCode(数字人场景code,从3.10查询到的sceneCode值)
"randomPlay": false, --可以不传
"templates": [
{ --场景信息
"sequence": ["https://digital-public.obs.cn-east-3.myhuaweicloud.com/model/mp4/2646e2528e16b0a2fa7bf9eb1bab55ed_1080x1920_0_300.mp4"
], --videoCoverUrl(从3.10查询到的videoCoverUrl值)
"udCode": "369590278856773", --sceneCode(数字人场景code,从3.10查询到的sceneCode值)
"matting": 0 --要不要抠图 0有背景 1扣绿
}
],
"quarter": 0 --固定值
}
},
"drawOptions": {
"x": 0,
"y": 0,
"width": 1080,
"height": 1920
}
},
{
"type": "fore", --图层
"resOptions": {
"type": "image",
"name": "image",
"url": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/加入我粉丝团.png"
},
"drawOptions": {
"x": 28,
"y": 94,
"width": 386,
"height": 332
}
},
{
"type": "fore",
"resOptions": {
"type": "player", --视频(测试时可以去掉此视频图层)
"name": "video",
"url": "https://digital-public-dev.obs.cn-east-3.myhuaweicloud.com/video-server/mp4/1608031115871264770.mp4",
"mute": true, -- 是否禁音
"loop": -1 --重复次数 -1:无限重复 不填/0/1 一次 N:N次
},
"drawOptions": {
"x": 760,
"y": 908,
"width": 250,
"height": 585
}
},
{
"type": "back",
"resOptions": {
"name": "background", --背景固定
"type": "image",
"url": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/紫色水晶.png",
"exclusive": {
"SameNameInGroup": true --背景固定
}
},
"drawOptions": {
"x": 0,
"y": 0,
"width": 1080,
"height": 1920,
"zidx": -1 --层级
}
}
],
"playlist": [
312612 --素材id必传(从3.6上传素材返回的素材id)
]
},
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea" --(同3.18接口返回的topicSub值)
}
响应示例:
{
"id":1,
"sessionId":"d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"result":{
"message":"make sess complete!",
"sessionId":"d910232b-c8b2-4243-a2fb-8ba9c84e31ec"
}
}
请求示例:
{
"id": 14,
"method": "ModifySessionResList", --固定值
"params": {
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"rmvRes": {
"resList": []
},
"addRes": {
"resList": [
{ -- 参考创建会话
"type": "back",
"resOptions": {
"name": "background",
"type": "image",
"url": "https://digital-public.obs.cn-east-3.myhuaweicloud.com/manager/version/琉璃梦幻.png",
"exclusive": {
"SameNameInGroup": true
},
"transport": "tcp"
},
"drawOptions": {
"x": 0,
"y": 0,
"width": 1080,
"height": 1920,
"zidx": -1
}
}
]
}
},
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea" -- (同3.18接口返回的topicSub值)
}
请求示例:
{
"id": 11,
"method": "DestroySession", --固定值
"params": {
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"cause": "Client destroy"
},
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea"
}
响应示例:
{
"id":2,
"result":{
"sessionId":"c7c24e5c-b7d6-427f-9e0c-88589d3830ae",
"ok":true,
"info":"close sess ok"
}
}
请求示例:
{
"id": 13,
"method": "ExecSessionResList",
"params": {
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"executeList": [
{
"name": "dthuman",
"options": {
"method": "switchTemplate", --固定值
"args": {
"drivenMode": "audioDriven", --固定值
"audioDriven": {
"udCode": "369590278856773", --sceneCode(数字人场景code,从3.10查询到的sceneCode值)
},
"drawOptions": {
"x": 240,
"y": 570,
"width": 1080,
"height": 1920
}
}
}
}
]
},
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea" -- (同3.18接口返回的topicSub值)
}
请求示例:
{
"id": 10,
"method": "pushPlayListManager",
"params": {
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"action": "insertPlayListAtSilent", --addPlayList在播放列表尾部添加音频(1) / insertPlayList 在播放列表中间添加音频(2) / delPlayListIndex 删除播放列表中的某个音频(3) / getPlayList获取播放列表(4) / insertPlayListAtSilent 在当前音频中间静音播放插入音频(5)
"oldPcmId": 6, --添加或者删除的播放列表的索引位置的元素(非必传)
"index": 1, --添加或者删除的播放列表的索引位置(2,3必填)
"pcmIds": [
312613 --要插入的播放列表(从3.6上传素材返回的素材id)(1,2,5必填)
]
},
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea" -- (同3.18接口返回的topicSub值)
}
响应示例:
{
"id":2,
"sessionId": "ccfb2800-932e-4321-b5f3-8008fca46860",
"result":{
"sessionId":"c7c24e5c-b7d6-427f-9e0c-88589d3830ae",
"ok":true,
"message":"" //失败原因
"data": [6,8,9,2] //执行成功后的播放列表
}
}
*1) HeartBeat 心跳通知(注:此消息为会话保持的机制,客户端需要对此消息进行样例中的回复,回复的id需要一致):
收到服务端消息:
{
"id":15,
"method":"HeartBeat",
"params":{
"sessionId":":---:d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"state":"Running"
}
}
回复服务端:
{
"id": 15,
"result": {
"sessionId": ":---:d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"message": "Heartbeat received."
},
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea" -- (同3.18接口返回的topicSub值)
}
*-2) SessionState 状态通知:
收到服务端消息-Session销毁(断开连接,需要重新创建会话):
{
"id":73,
"method":"SessionState",
"params":{
"sessionId":"ae6b8037-86db-4047-af3c-a8b82bb1d0b1",
"state":"Destroy",
"cause":"iceConnectionState reconnect timeout by failed or disconnected "
}
}
收到服务端消息-拉流地址通知,表示平台已经往中继server推流,远端可以从中继server开始拉流:
{
"id":73,
"method":"SessionState",
"params":{
"sessionId":"ae6b8037-86db-4047-af3c-a8b82bb1d0b1",
"state":"StreamPlay",
"playaddr":{
"rtmp": {
"lan":"rtmp://192.168.0.1:1935/xxxxx/xxxx",
"wan":"rtmp://172.16.103.14:1935/xxxxx/xxxx"
},
"rtsp": {
"lan":"rtsp://192.168.0.1:554/xxxxx/xxxx",
"wan":"rtsp://172.16.103.14:554/xxxxx/xxxx"
},
"http-flv": {
"lan":"http://192.168.0.1:8080/xxxxx/xxxx",
"wan":"http://172.16.103.14:8080/xxxxx/xxxx"
}
}
}
}
收到服务端消息-Show:代表图层开始显示了:
# 数字人 只需关注该类型
{
"id":27,
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"method":"SessionState",
"params":{
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"state":"Show",
"info":"Do you see me ? dthuman",
"udCode":"xxxxxxxxxxx",
"id":"dthuman#1",
"name":"dthuman",
"type":"dthuman" -- dthuman:数字人 其他类型:player:播放器 imge:图层等
}
}
收到服务端消息-音频文件播放的状态:
{
"id":27,
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"method":"SessionState",
"params":{
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"status":"begin", // begin /end 开始或者结束
"type":"playList", //playlist insertlis音频的类型是播放列表的还是插播的
"nowPcmId":1, //当前播放的音频序号
"playList":"[6,9,12,33]" //待播放的音频列表或者插播列表
}
}
推流到第三方平台:
{
"id":13,
"method":"ExecSessionResList",
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea",
"params":{
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"executeList":[
{
"name":"rtmp",
"options":{
"method":"setpushstreams",
"args": {
"pushurls":["rtmp://xxxx", "rtmp://xxxxx"] --推流地址,可传多个
}
}
}
]
}
}
停止推流到第三方平台:
{
"id":13,
"method":"ExecSessionResList",
"sessionId": "d910232b-c8b2-4243-a2fb-8ba9c84e31ec",
"sender": "1000043/topicSendClient0a7382ed-9191-4f02-9997-28d7a7832aea",
"params":{
"sessionId":"802be68e-9a5e-49d0-8ba0-64e45da8550c",
"executeList":[
{
"name":"rtmp",
"options":{
"method":"closepushstreams",
"args": {
"pushurls":["rtmp://xxxx", "rtmp://xxxxx"]
}
}
}
]
}
}