API接入文档

# 一、 接入准备

# 1.1 获取Accesskey

与我司商务合作后,我司会给客户appId和appSecret。请妥善保存appSecret

# 1.2 开发以及联调测试

客户通过appId和appSecret获取token,将token和source(值为sdk)放入header头中可以请求对应的接口。

# 二、 API对接方式

# 2.1 构造签名获取token

通过appId和appSecret请求/live-manager/open/accessToken接口可以获得token。

# 2.2 公共返回参数

sdk得到token加上source(值为sdk)和其他请求数据集合后,会先进行安全校验等验证,一系列验证通过后便会处理完成这次发送过来的数据请求,并自动刷新token有效时间。平台返回的参数格式如下:

字段 类型 是否必须 备注
code Integer Y 返回的状态码,为200表示成功
msg string N 成功/错误的描述信息
data object N 返回的具体内容
success string N 成功/错误标识位

# 2.3 公共错误码

错误码 描述
200 正常
500 失败
100501 token不能为空
100502 toke失效
100503 appid或者appscrect无效
100504 用户秘钥尚未生效
100505 用户秘钥到期

# 三、 API接口

# 3.1 获取token

接口地址:/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"    
    }
}

# 3.2 创建直播间

接口地址:

/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
}

# 3.3 更新直播间

接口地址:

/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
}

# 3.4 查询直播间

接口地址:

/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",
                    }
                ]
            }
        ]
    }
}

# 3.5 查询直播间列表

接口地址:

/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",
                    }
                ]
            }
        ]
    }
}

# 3.6 素材上传(播放话术上传)

接口地址:

/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
}

# 3.7 素材查询

接口地址:

/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
  }
}

# 3.8 平台音色查询

接口地址:

/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":"女声"
            }
        ]
    }
}

# 3.9 定制音色查询

接口地址:

/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":"女声"
            }
        ]
    
}

# 3.10 平台主播查询

接口地址:

/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"
                    }
                ]
            }
        ]
}

# 3.11 定制主播查询

接口地址:

/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"
                    }
                ]
            }
        ]
}

# 3.12 变音音色查询

接口地址:

/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
    }
}

# 3.13 变音试听

接口地址:

/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"
    }
}

# 3.14 公共素材分类查询

接口地址:

/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"
        },
        
    ]
        
}

# 3.15 公共素材查询

接口地址:

/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
  }
}

# 3.16 直播记录查询

接口地址:

/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

  }
}

# 3.17 获取拉流地址(4.2.3开启会话,收到成功事件之后可开启)

接口地址:

/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"
                }
            }
        }
    }
}

# 3.18 创建直播会话

接口地址:

/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"
    }
}

# 四、 开启直播

# 4.1 RTMP拉流方式数字人实时渲染

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

# 4.2 交互控制指令 - 协议 (若无特殊说明,协议描述以服务端视角)

# 4.2.1 术语定义:

# 图层定义

​ fore:前置图层,通常放置浮动图片等元素

​ center:中间图层,通常放置数字人和一些开播固定元素

​ back: 后置图层,通常放置背景等元素

# 元素位置设置说明

​ 为保证元素不因随意设置的width和height导致拉伸变形等,接口会对用户提交的width和height做适配保证元素本身的宽高比不变。

image.png

# 4.2.2 基础参数结构:

* 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
	}
}

# 4.2.3 MakeSession 开启会话

请求参数:

参数名称 参数说明 数据类型 是否必填 备注
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"
	}
}

# 4.2.4 ModifySessionResList素材调整

请求示例:

{
    "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值)
}

# 4.2.5 DestroySession 关闭会话

请求示例:

{
    "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"
	}	
}

# 4.2.6 ExecSessionResList数字人切换

请求示例:

{
    "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值)
}

# 4.2.7 驱动数字人音频列表的管理

请求示例:

{
    "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] //执行成功后的播放列表
	}	
}

# 4.2.8 服务端状态推送 - 协议 (若无特殊说明,协议描述以客户端视角)

*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]" //待播放的音频列表或者插播列表
	}
}

# 4.2.9 设置推流地址

推流到第三方平台:
{
  "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"]
                    }
                    
                }
            }
        ]
    }
}