# 互動直播

平臺提供能够支持將數字人流媒體內容推送到用戶指定的直播平臺的數字人産品能力,同時支持用戶與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/v2/material/live/channel/command

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
param String True 接管內容(該參數爲json轉義後的字符串)

# 請求樣例

{
  "sessionId": "sessionId",
  "param": "{\"tts_query\": {\"content\": \"有一顆蛋在地上滾。滾過樹林,滾過花園,又從斜坡滾了下去,最後滾進一個鴨巢裏。鴨媽媽幷沒有發現不對勁,繼續孵蛋。有一天,蛋破了。第一顆蛋孵出的是一只有藍點的小鴨,叫蠟筆。第二顆蛋孵出的是一只有條紋的小鴨,叫斑馬。第三顆蛋孵出的是一隻黃色的小鴨,叫月光。第四顆蛋孵出的是一隻全身藍綠色的小怪鴨,嘴裏還不停的發出咕嘰咕嘰的叫聲,所以就叫做咕嘰咕嘰.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - isSuccess Boolean True 接管是否成功
  - commandTraceId String False 接管任務TraceId(取消接管時需傳遞)

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "isSuccess": true,
    "commandTraceId": "commandTraceId"
  }
}

# 直播接管排隊(可中斷)

# 接口描述

可排隊的直播接管,如果當前有接管中的任務,則將該接管加入隊列,幷按順序進行接管。當前正在接管中的任務位置序號爲1。
可插入的範圍爲:1- N,含義爲將按照插入的位置序號順序+1進行播報。例如:插入位置序號爲1,則爲排隊隊列的第2條播放內容,將在當前正在播放的任務結束後播放該條內容,後續的排隊任務自動調整順序。
接管加入隊列狀態分爲2種(33:接管入隊初始化中;34:接管加入隊列完成),如果返回狀態爲33表示初始化時間(下載文件等)超過閾值(當前爲10s)。後續入隊狀態將通過异步回調的方式通知。
如果接管包含的文件內容較大,例如圖片文件較大或聲音文件較大等,需要較長時間下載。目前系統會將需要下載的內容都下載完成後才進入排隊隊列,返回接管加入隊列完成。
爲保證程序處理正常,接管排隊隊列長度建議不超過15個。

# 請求地址

POST /api/2dvh/v1/material/live/channel/command/queue

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
priority Integer False 插入排隊期望位置序號,如無或者超過當前隊列最大長度則插入隊尾
param String True 接管內容(該參數爲json轉義後的字符串)

# 請求樣例

{
  "sessionId": "sessionId",
  "priority": 1,
  "param": "{\"tts_query\": {\"content\": \"有一顆蛋在地上滾。滾過樹林,滾過花園,又從斜坡滾了下去,最後滾進一個鴨巢裏。鴨媽媽幷沒有發現不對勁,繼續孵蛋。有一天,蛋破了。第一顆蛋孵出的是一只有藍點的小鴨,叫蠟筆。第二顆蛋孵出的是一只有條紋的小鴨,叫斑馬。第三顆蛋孵出的是一隻黃色的小鴨,叫月光。第四顆蛋孵出的是一隻全身藍綠色的小怪鴨,嘴裏還不停的發出咕嘰咕嘰的叫聲,所以就叫做咕嘰咕嘰.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - commandStatus Integer True 接管隊列狀態(33:接管入隊初始化中;34:接管加入隊列完成)
  - commandTraceId String True 接管任務TraceId(取消接管時需傳遞)

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "commandStatus": 34,
    "commandTraceId": "commandTraceId"
  }
}

# 直播接管重排隊

調整接管隊列中某個接管任務的順序。

# 接口描述

# 請求地址

POST /api/2dvh/v1/material/live/channel/command/queue/reorder

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
commandTraceId String True 接管任務TraceId(接管時返回)
priority Integer True 插入排隊期望優先級

# 請求樣例

{
  "sessionId": "sessionId",
  "commandTraceId": "commandTraceId",
  "priority": 1
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - isSuccess Boolean True 是否成功

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "isSuccess": true
  }
}

# 直播接管取消

# 接口描述

取消已發送的文字或音頻文件接管請求。如果想要一次取消多個,trace ID之間用英文“;”隔開。 如果爲"-1",將全部內容取消(包括接管中的和隊列中的)。 若文字/音頻正在接管中,調用麥克風接管需要取消全部後開啓。

# 請求地址

POST /api/2dvh/v1/material/live/channel/command/cancel

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
commandTraceId String True 接管任務TraceId(接管時返回),取消多個,英文“;”隔開。"-1":全部取消

# 請求樣例

{
  "sessionId": "sessionId",
  "commandTraceId": "commandTraceId"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - isSuccess Boolean True 接管取消是否成功
  - commandFinishTime String False 完成時間 (yyyy-MM-dd HH:mm:ss)
  - message String False 失敗原因

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "isSuccess": true
  }
}

# 直播接管排隊查詢

# 接口描述

獲取所有的直播隊列,返回內容爲,按照直播順序排序的trace ID 列表。當前正在播放或準備播放的內容爲第一條。

# 請求地址

POST /api/2dvh/v1/material/live/channel/command/queue/list

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識

# 請求樣例

{
  "sessionId": "sessionId"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - commandTraceIds Array False 接管任務TraceId數組

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "commandTraceIds": ["commandTraceId1","commandTraceId2","commandTraceId3","commandTraceId4"]
  }
}

# 直播口水話接管

# 接口描述

互動數字人場景直播口水話接管,不可排隊,當前有接管話術時無法進行口水話接管。

# 請求地址

POST /api/2dvh/v2/material/live/channel/command/quick

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
param String True 接管內容(該參數爲json轉義後的字符串)

# 請求樣例

{
  "sessionId": "sessionId",
  "param": "{\"quick_response\": true,   \"order\": -1 ,\"quick_response_id\":  \"234323\"}"
}

# param參數說明

字段 類型 必填 描述
quick_response Boolean True 需填值"true"
order Integer True 序號,-1爲隨機
quick_response_id String False 口水詞庫id

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object True
  - isSuccess Boolean True 接管是否成功
  - commandTraceId String False 接管任務TraceId

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": {
    "isSuccess": true,
    "commandTraceId": "commandTraceId"
  }
}

# 流式語音接管

# 接口描述

注意:該接口爲WebSocket接口,數據請求使用 json,編碼使用 UTF8。其中流式聲音要求傳輸格式爲PCM格式,碼率要求爲16000, 單聲道,16bit采樣率。 發送流式語音信息(如來自麥克風,TTS流式接口等),數字人會基于實時語音進行接管操作,中斷當時直播內容,生成新的畫面幷渲染視頻流給到用戶。

此外,所有http發起的接管,都會在此socket通道中返回對應的狀態消息。正常情况下,每一次接管,都會依次下發“接管入隊完成”, “開始接管“,“接管完成”。

# 請求地址

WebSocket /api/live-takeover-cc/v1/material/live/channel/command/microphone?clientType={clientType}&sessionId={sessionId}&Authorization={Token}

# 請求頭

# 請求參數

字段 類型 必填 描述
clientType String True 連接端類型:BROWSER:生産端
sessionId String True 建立連接後返回唯一會話id
Authorization String True 該token爲創建直播間返回的sessionToken

# 請求樣例(上行消息)

# 連接建立

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

# 準備開始
	{
		"code": 0,
		"message": "begin"
	}
# 語音數據
二進制語音數據,流式聲音要求傳輸格式爲PCM格式,碼率要求爲16000, 單聲道,16bit采樣率。
# 發送結束
	{
		"code": 99,
		"message": "eof"
	}

# 響應元素

字段 類型 必填 描述
code String True 消息類型編碼
message String True 詳細信息

# 響應樣例(下行消息)

# 認證失敗
   {
		"code": 1,
		"message": "認證失敗"
   }
# 服務端已準備好接收
   {
       "code": 2,
	   "message": "服務端已準備好接收"
   }
# http形式發起的接管(文字接管/音頻接管)完成/取消接管完成通知
   {
       "code": 18,
	   "message": "接管/取消接管完成",
	   "data": {
			"sessionId": "xxxxx",
			"commandTraceId": "yyyyyy",
			"timestamp": 1234567890
		}
   }
# 未匹配或算法連接中斷
   {
       "code": 4,
	   "message": "停止發送語音數據"
   }
# 未知原因失敗
   {
		"code": 5,
		"message": "發送語音數據失敗"
	}
# 沒有對應的直播信息
   {
       "code": 6,
	   "message": "服務端未準備好接收"
   }
# 服務端其他形式的接管中,接管衝突給前端發拒絕消息
   {
		"code": 7,
		"message": "算法端接管衝突被拒絕"
   }
# http形式發起的接管(文字接管/音頻接管)開始播放接管通知
   {
		"code": 19,
		"message": "開始播放接管",
		"data": {
			"sessionId": "xxxxx",
			"commandTraceId": "yyyyyy",
			"timestamp": 1234567890
		}
   }
# http形式發起的接管(文字接管/音頻接管)接管入隊完成通知
   {
		"code": 20,
		"message": "接管入隊完成",
		"data": {
			"sessionId": "xxxxx",
			"commandTraceId": "yyyyyy",
			"timestamp": 1234567890
		}
   }

# 直播NLP問答

# 接口描述

直播前可以預設多個問答庫和問答底稿內容,具體方法需通過平臺web端界面 (opens new window)設置;直播時可以設置本場直播匹配的問答庫ID(一場直播僅支持匹配一個問答庫),直播過程中可根據觀衆提問的問題在匹配的問答庫中進行檢索,若命中答案則返回對應的答案內容,用戶可選擇通過直播接管的形式播放對應答案。

# 請求地址

POST /api/2dvh/v1/nlp/model/reply

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
appId String True 問答庫ID,注意需使用字符串格式的問答庫ID,非界面展示的自增ID
device String True 訪問設備信息,根據請求發起終端選擇,取值範圍爲:ios / android / windows / macos
language String True 語言,當前僅支持中文,取值固定爲"zh"
query String True 發起查詢的問題內容
session String True 用戶自定義字段,要求爲數字/字母/-組合,多輪對話使用同一session,將視爲連續問題,可根據上下文信息匹配最佳答案結果
trace String True 用戶自定義字段,要求爲數字/字母/-組合,用于追踪查詢信息

# 請求樣例

{
  "appId": "app_id",
  "device": "macos",
  "language": "zh",
  "query": "你好",
  "session": "456tf6c2-846c-4b8b-8ga9-e866fgr678a2",
  "trace": "451ee6c2-838c-4b8b-8ba9-e86c2d1692c7"
}

# 響應元素

字段 類型 必填 描述
answer String True 問題答案
device_id String True 訪問設備信息
language String True 語言,當前僅支持"zh"
query String True 查詢的問題內容
session String True 查詢時Session ID
trace String True 查詢時Trace ID
error_message String True 錯誤信息

# 響應樣例

{
	"answer": "衛生間在您右手邊",
	"device_id": "DeviceID",
	"error_message": "",
	"language": "LanguageCode",
	"query": "我想去厠所",
	"session": "SessionID",
	"trace": "TraceID"
}

# 關閉直播

# 接口描述

關閉一路狀態爲進行中的數字人直播間實例,停止數字人推流關閉直播,釋放相關資源。

# 請求地址

POST /api/2dvh/v1/material/live/channel/close

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識

# 請求樣例

{
   "sessionId": "sessionId"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Boolean False 直播是否關閉成功

# 響應樣例

{
    "code": 0,
    "message": "success",
    "data": true
}

# 查詢會話狀態

# 接口描述

支持查詢指定sessionId的直播間實例的運行狀態,傳入sessionId參數,返回該直播間的運行狀態信息。

# 請求地址

GET /api/2dvh/v1/material/live/channel/stat?sessionId={sessionId}

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識

# 請求樣例

http://{domainname}/api/2dvh/v1/material/live/channel/stat?sessionId=8bfeb2bd58474547a87520643cc2d8df

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object False 任務信息
  - status Integer True 任務狀態:2:直播中,32:視頻流創建中, 35:視頻流創建完成,5:直播主動關閉,50:其他關閉(如長時間無心跳,網絡鏈接中斷等),9:异常,99:初始化失敗
  - sessionToken String False 麥克風接管使用的token信息
  - rtcAppId String False RTC APP ID (狀態爲2和35有此值)
  - rtcChannelId String False RTC Channel ID (狀態爲2和35有此值)
  - rtcUid String False RTC UID (狀態爲2和35有此值)
  - rtcToken String False RTC Token (狀態爲2和35有此值)

# 響應樣例

{
    "code": 0,
    "message": "success",
    "data": {
          "sessionToken": "sessionToken",
          "status": 35,
          "rtcAppId": "rtcAppId",
          "rtcChannelId": "rtcChannelId",
          "rtcUid": "rtcUid",
          "rtcToken": "rtcToken"
        }
}

# 查詢進行中會話列表

# 接口描述

查詢當前用戶下所有進行中的直播間實例列表,該接口僅返回運行中的實例,已關閉的實例不會返回。

# 請求地址

GET /api/2dvh/v1/material/live/channel/running/list

# 請求頭

# 請求參數

# 請求樣例

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Object False 任務信息
  - sessionId String True 會話的唯一標識
  - status Integer True 任務狀態:2:直播中;32:視頻流創建中;35:視頻流創建完成
  - startTime String False 直播開始時間 (yyyy-MM-dd HH:mm:ss)

# 響應樣例

{
	"code": 0,
	"message": "success",
	"data": [{
			"sessionId": "sessionId",
			"status": 2
		},
		{
			"sessionId": "sessionId",
			"status": 32
		}
	]
}

# 查詢歷史會話列表

# 接口描述

查詢當前用戶下所有歷史的直播間實例列表,該接口僅返回歷史已完成的的實例,進行中的實例不會返回。

# 請求地址

POST /api/2dvh/v1/material/live/channel/history/list

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String False 直播會話的唯一標識
status Integer False 任務狀態: 5:已完成,50:其他關閉(如長時間無心跳,網絡鏈接中斷等),9:异常,99:初始化失敗,97:系統路數不足,98:客戶路數不足
pageNo int False 當前頁碼 (默認 1)
pageSize int False 每頁條數 (默認 10)
sortName String False 排序字段名
sortValue String False 排序順序: asc, desc

# 請求樣例

{
  "pageSize": 10,
  "pageNo": 1
}

# 響應元素

字段 類型 必填 描述
code Number True 0 - 成功, 其他- 异常
message String True 异常詳細信息
data Object False data object ,异常時通常爲空
  - pagination pagination True 分頁信息(參照共通說明)
  - result Object True 任務列表(參照下面說明)

直播任務列表

字段 類型 必填 描述
sessionId String True 直播會話的唯一標識
status Integer True 任務狀態: 5:直播主動關閉,50:其他關閉(如長時間無心跳,網絡鏈接中斷等),9:异常,99:初始化失敗
startTime String True 直播開始時間(yyyy-MM-dd HH:mm:ss)
endTime String True 直播截止時間 (yyyy-MM-dd HH:mm:ss)

# 響應樣例

{
  "code": 0,
  "message": "success",
  "data": {
    "pagination": {
      "pageNo": 1,
      "numberPages": 1,
      "numberRecords": 2,
      "pageSize": 2,
      "startIndex": 0
    },
    "result": [
      {
        "sessionId": "sessionId",
        "startTime": "2023-02-17 16:53:26",
        "endTime": "2023-02-18 10:03:21",
        "status": 5
      },
      {
        "sessionId": "sessionId",
        "startTime": "2023-02-17 16:56:26",
        "endTime": "2023-02-17 17:43:19",
        "status": 9
      }
    ]
  }
}

# 獲取RTC Token

# 接口描述

獲取rtc token。在權限過期前 30 秒,SDK 會觸發 token-privilege-will-expire 回調。收到該回調後,客戶端需要從服務器獲取新的 Token 幷調用 renewToken 方法將新生成的 Token 傳給 SDK。

# 請求地址

POST /api/2dvh/v1/material/rtc/token/audience

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
rtcChannelId String True RTC Channel ID

# 請求樣例

{
    "sessionId": "sessionId",
    "rtcChannelId": "rtcChannelId"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data String False rtc token

# 響應樣例

{
    "code": 0,
    "message": "success",
    "data": "007eJxTYGD8ItJX2zMjMu2BfJybs/H+9+66e3wXr2p+eTt877SnV3cqMKSZGKRamJomGRqnGZhYmhhamlikGJmaJ6WmGRuYpqQahHteTjmwgoHh8I7fcYwMjAwsQAziM4FJZjDJAiYVGCwNLM3NTdJSLVLMgMZYJFqapqalWZhZJpqnGSabp6YxMhgBADEzLqA="
}

# 更新URTC Token

# 接口描述

更新urtc token。客戶平臺需要在token過期前獲取新Token幷通知給PAAS平臺。

# 請求地址

POST /api/2dvh/v1/material/rtc/token/host/renew

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
urtcToken String True 用戶rtc鑒權token

# 請求樣例

{
    "sessionId": "sessionId",
    "urtcToken": "urtcToken"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data String False 通常爲空

# 響應樣例

{
    "code": 0,
    "message": "success",
    "data": ""
}

# 直播接管(即將下綫,請使用"直播接管(可中斷)")

# 接口描述

發送一段播報文本或者播報音頻文件給到服務端,數字人會基于文本/音頻停止既定播報內容,實時進行TTS生成、表情動作驅動,幷渲染視頻流給到用戶。

# 請求地址

POST /api/2dvh/v1/material/live/channel/command

# 請求頭

Content-Type: application/json

# 請求參數

字段 類型 必填 描述
sessionId String True 會話的唯一標識
param String True 接管內容(該參數爲json轉義後的字符串)

# 請求樣例

{
  "sessionId": "sessionId",
  "param": "{\"tts_query\": {\"content\": \"有一顆蛋在地上滾。滾過樹林,滾過花園,又從斜坡滾了下去,最後滾進一個鴨巢裏。鴨媽媽幷沒有發現不對勁,繼續孵蛋。有一天,蛋破了。第一顆蛋孵出的是一只有藍點的小鴨,叫蠟筆。第二顆蛋孵出的是一只有條紋的小鴨,叫斑馬。第三顆蛋孵出的是一隻黃色的小鴨,叫月光。第四顆蛋孵出的是一隻全身藍綠色的小怪鴨,嘴裏還不停的發出咕嘰咕嘰的叫聲,所以就叫做咕嘰咕嘰.\",\"ssml\": false},\"audio\": \"/data/common/song.mp3\"}"
}

# 響應元素

字段 類型 必填 描述
code Integer True 0 - 成功, 其他 - 异常
message String True 异常詳細信息
data Boolean False 接管是否成功

# 響應樣例

{   
  "code": 0,
  "message": "success",
  "data": true
}

# 直播脚本json定義說明

# 簡介

直播脚本即2D數字人直播時需要的內容定義,包含使用的人物形象,發音人音色,播報內容,直播間前後景圖片,以及主播各類美顔參數等。

# json參數說明
名稱 類型 取值示例 必填 說明
version String "0.0.2" 直播json配置文件版本號
recycle Integer 0 直播重複次數,0爲一直循環,值大于0,爲循環次數,如指定1,則只播放1遍,如指定6,則循環播放6遍
stream_mode Boolean True 是否采用流式播放(快速開播)。滿足最低開播條件後馬上開播,不等開播脚本的資源全部到位。
resolution Int Array [1080,1920] >= 0.0.2: 聲網推流及內部blend畫布分辨率,最大支持1080p,最小不能小于1010
0.0.1: 聲網推流分辨率,最大支持1080p,最小不能小于10
10
bit_rate Float 3.5 聲網推流碼率,最大值7,最小值需大于0(Mbps)。實際推流碼率是否可以達到設置的碼率與當前分辨率有關。
live_type String "live" , "interactive" 定義當前直播的類型,可以不填,默認爲"live"普通直播模式,"interactive"爲互動模式。互動模式下支持口水話(quick_response)定義。
sentence_break Boolean True 默認開啓按標點打斷功能,非必填項,如果不想啓用按照標點打斷(想直接打斷),傳false
streaming_param Object 推流參數相關設置
 h264_profile Integer 100 聲網PROFILE設置,默認是100,一般情况下不建議修改
 key_frame_interval Integer 0 聲網I幀間隔設置,單位爲秒。默認是0,不更改I幀。一般情况下不建議修改
 agora_live_mode Boolean False 是否設置聲網LIVE模式,默認false,即rtc模式。true爲live模式。
sceneList Object Array 包含內容如下 場景數組列表,暫時還未支持多場景,只有第一個數組元素有效
digital role Object 包含內容如下
 id Integer 1 數字人id
 face_feature_id String "1" 數字人face feature id
 name String "小李" 數字人名稱
 url String "https://xxx/role.zip" 數字人形象zip包
 position Object 包含內容如下 數字人形象圖片的起始像素位置,以1080*1920分辨率大小畫布的左上角爲原點,向右爲x方向,向下爲y方向
  x Integer 0 x方向坐標值
  y Integer 0 y方向坐標值
 scale Float 1.0 數字人形象比例
 alpha Boolean false 設置是否數字人推流爲ALPHA透明背景模式。默認false,不推送透明通道。
tts_config Object 包含內容如下 tts配置
 qid String "8wfZav:AEA_Z10Mqp9GCwDGMrz8xIzi3VScxNzUtLCh" 非必填項,使用qid可以代替id/vendor_id,即(id/vendor_id)可以不填,但id和qid不能同時爲空。
 id String "zh-CN-XiaoxuanNeural" 發音人id
 name String "曉萱" 發音人名稱
 vendor_id Integer 4 供應商id
 language String "zh-CN" 語言碼
 pitch_offset Float 0.0 音調,數值越大越尖銳,越低越低沉,支持範圍 [-60, 60]
 speed_ratio Float 1 語速,數值越大語速越慢,支持範圍 [0.5, 2]
 volume Integer 100 音量,數值越大聲音越大,支持範圍 [1, 400]
tts_query Object 包含內容如下 tts語音合成
 content String "尊敬的觀衆朋友們,大家好!非常榮幸能够在這個美好的時刻與大家相聚,歡迎收看今天的直播節目。" 待合成語音的文本內容,字數不得少于10個字,所有語言的發音人都可以合成英文query;所有語言的發音人都可以合成自己語言的query;粵語、滬語等中文方言發音人可以合成中文query
 ssml Boolean false 是否使用ssml,開啓後query可以使用USSML和SSML ,推薦使用USSML
audios Object Array 包含內容如下 音頻驅動,tts_query和audios都存在時,tts_query優先
 url String "https://xxx/audio.mp3" 數組,支持多條mp3格式的驅動音頻文件
quick_response Object Array 包含內容如下 僅用于互動數字人下快速回復使用,使用接管接口發送快速回復數組中的序號,從0開始。-1代表隨機選一條。
TTS文本和音頻文件只支持一個,同時存在時TTS優先。口水詞要麽全部是TTS請求,要麽全部是音頻請求,請不要混用。
 tts_query Object 口水詞的請求文本。TTS文本和音頻文件只支持一個,同時存在時TTS優先。口水詞要麽全部是TTS請求,要麽全部是音頻請求,請不要混用。
  content String "您好,尊貴的客戶" 口水詞的文本內容
  ssml Boolean false 是否使用ssml請求
 audio String "https://xxx/audio.mp3" 口水詞的音頻接管文件地址。TTS文本和音頻文件只支持一個,同時存在時TTS優先。口水詞要麽全部是TTS請求,要麽全部是音頻請求,請不要混用。
quick_response_preload_list Object Array ["001", "002", "003", "004"] 快速回復預加載素材ID列表,與quick_response同時存在時,素材ID列表優先
opening_words String "xxxxx" 僅用于互動數字人下開場白使用
backgrounds Object Array 包含內容如下 背景
 type Integer 0 0:圖片,1:視頻,支持mp4格式,分辨率暫無要求,不同分辨率的視頻/圖片按照短邊撑滿,長邊居中截取形式處理
 name String "背景" 背景名稱
 url String "https://xxx/bg.png" 背景文件url
 rect Int Array [0,0,1080,1920] 背景起始位置和大小,以1080*1920分辨率畫布爲參考
 cycle Boolean false 針對視頻有效,false:單次播放,true:循環播放
 start Integer 0 背景開始時間,以ms爲單位
 duration Integer -1 背景持續時間,以ms爲單位,-1爲默認值,表示隨視頻一直存在
foregrounds Object Array 包含內容如下
 type Integer 0 0:圖片
 name String "前景"
 url String "https://xxx/fg.png" 前景文件url,支持png或jpg
 rect Int Array [0,0,1080,1920] 起始位置和大小,以1080*1920分辨率畫布爲參考
 start Integer 0 前景開始時間,以ms爲單位
 duration Integer -1 前景持續時間,以ms爲單位,-1爲默認值,表示隨視頻一直存在
effects Object 包含內容如下
version String "1.0" 特效引擎版本
beautify Object 包含內容如下 美顔
  whitenStrength Float 0.3 [0,1.0] 美白, 默認值 0.30, 0.0 不做美白
  whiten_mode Integer 0 美白模式:0(偏粉白), 1(自然白), 2(只有皮膚區域自然白)
  reddenStrength Float 0.36 [0,1.0]紅潤, 默認值 0.36, 0.0 不做紅潤
  smoothStrength Float 0.74 [0,1.0]磨皮, 默認值 0.74, 0.0 不做磨皮
  smooth_mode Integer 0 磨皮模式:0(臉部區域磨皮), 1(全圖磨皮), 2(臉部區域精細磨皮)
  shrinkRatio Float 0.11 [0,1.0]瘦臉, 默認值 0.11, 0.0 不做瘦臉效果
  enlargeRatio Float 0.13 [0,1.0]大眼, 默認值 0.13, 0.0 不做大眼效果
  smallRatio Float 0.10 [0,1.0]小臉, 默認值 0.10, 0.0 不做小臉效果
  narrowFace Float 0.0 [0,1.0] 窄臉, 默認值 0.0, 0.0 不做窄臉
  roundEyesRatio Float 0.0 [0,1.0] 圓眼, 默認值 0.0, 0.0不做圓眼
  thinFaceShapeRatio Float 0.0 [0,1.0]瘦臉型, 默認值 0.0, 0.0 不做瘦臉型效果
  chinLength Float 0.0 [-1, 1]下巴長短, 默認值爲 0.0,[-1, 0]爲短下巴,[0, 1]爲長下巴
  hairlineHeightRatio Float 0.0 [-1, 1]髮際綫, 默認值爲 0.0,[-1, 0] 爲低髮際綫,[0, 1]爲高髮際綫
  appleMusle Float 0.0 [0, 1.0]蘋果肌,默認值爲 0.0,0.0 不做蘋果肌
  narrowNoseRatio Float 0.0 [0, 1.0]瘦鼻,瘦鼻翼,默認值爲 0.0,0.0 不做瘦鼻
  noseLengthRatio Float 0.0 [-1, 1]長鼻, 默認值爲 0.0, [-1, 0]爲短 鼻,[0, 1]爲長鼻
  profileRhinoplasty Float 0.0 [0, 1.0]側臉隆鼻,默認值爲 0.0,0.0 不做側臉隆鼻效果
  mouthSize Float 0.0 [-1, 1]嘴巴大小,默認值爲 0.0,[-1, 0]爲放大嘴巴,[0, 1]爲縮小嘴巴
  philtrumLengthRatio Float 0.0 [-1, 1]人中長短, 默認值爲 0.0,[-1, 0]爲長人中,[0, 1]爲短人中
  eyeDistanceRatio Float 0.0 [-1, 1]調整眼距,默認值爲 0.0,[-1, 0]爲减小眼距,[0, 1]爲增加眼距
  eyeAngleRatio Float 0.0 [-1, 1]眼睛角度,默認值爲 0.0,[-1, 0]爲左眼逆時針旋轉,[0, 1]爲 左眼順時針旋轉,右眼與左眼相對
  openCanthus Float 0.0 [0, 1.0]開眼角,默認值爲 0.0, 0.0 不做開眼角
  shrinkJawbone Float 0.0 [0, 1.0]瘦下頷骨比例,默認值 0.0, 0.0 不做瘦顴骨
  shrinkRoundFace Float 0.0 [0, 1.0]圓臉瘦臉,默認值 0.0, 0.0 不做瘦臉
  shrinkLongFace Float 0.0 [0, 1.0]長臉瘦臉,默認值 0.0, 0.0 不做瘦臉
  shrinkGoddessFace Float 0.0 [0, 1.0]女神瘦臉,默認值 0.0, 0.0 不做瘦臉
  shrinkNaturalFace Float 0.0 [0, 1.0]自然瘦臉,默認值 0.0, 0.0 不做瘦臉
  shrinkWholeHead Float 0.0 [0, 1.0]整體縮放小頭,默認值 0.0, 0.0 不做整體縮放小頭效果
  contrastStrength Float 0.05 [0,1.0]對比度, 默認值 0.05, 0.0 不做對比度處理
  saturationStrength Float 0.1 [0,1.0]飽和度, 默認值 0.10, 0.0 不做飽和度處理
  sharpen Float 0.0 [0, 1.0]銳化, 默認值 0.0, 0.0 不做銳化
  clear Float 0.0 [0, 1.0]清晰强度,默認值 0.0,0.0 不做清晰
# json文件樣例
{
  "version": "0.0.1",
  "recycle": 0,
  "resolution": [1080,1920],
  "bit_rate": 5,
  "stream_mode": true,
  "sceneList": [
    {
      "digital_role": {
        "id": 1,
        "face_feature_id": "0325_nina_s3_beauty",
        "name": "小李",
        "url": "https://dwg-aigc-paas-test.oss-cn-hangzhou.aliyuncs.com/materials/77/0325_nina_s3_beauty.zip",
        "position": {
          "x": 10,
          "y": 60
        },
        "scale": 1
      },
      "tts_config": {
        "id": "zh-CN-XiaoxuanNeural",
        "name": "xiaoxuan",
        "vendor_id": 4,
        "language": "zh-CN",
        "pitch_offset": 0.0 ,
        "speed_ratio": 1,
        "volume": 400
      },
      "tts_query": {
        "content": "商湯科技是一家行業領先的人工智能軟件公司,以堅持原創,讓AI引領人類進步爲使命。",
        "ssml": false
      },
      "audios": [
        {
          "url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/softsugar.mp3"
        }
      ],
      "quick_response": [
                        "我正在考慮一下,稍後給你答覆。",
                        "讓我想一想,稍後回復你消息。", 
                        "我需要時間來仔細考慮一下這個問題。",
                        "這個問題有點複雜,我需要稍後回復你。",
                        "我需要一些時間來準備一個詳細的回答。",
                        "讓我稍微思考一下,然後再回復你。",
                        "我會在稍後給你一個詳細的答覆,請稍等。",
                        "我會仔細思考這個問題,然後回復你。",
                        "我需要一些時間來徹底理解這個問題。",
                        "我會考慮一下,稍後再告訴你我的看法。"],
	  "opening_words": "大家好,歡迎進入直播間",  
      "backgrounds": [
        {
          "type": 0,
          "name": "背景",
          "url": "https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/background.png",
          "rect": [
            0,
            0,
            1080,
            1920
          ],
          "cycle": true,
          "start": 0,
          "duration": -1
        }
      ],
      "foregrounds": [
        {
          "type": 0,
          "name": "前景1",
          "url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/frontgroud.png",
          "rect": [
            0,
            0,
            310,
            88
          ],
          "start": 0,
          "duration": 100
        }
      ],
      "effects": {
        "version": "1.0",
        "beautify": {
          "whitenStrength": 1.0,
          "whiten_mode": 0,
          "reddenStrength": 0.36,
          "smoothStrength": 1.0,
          "smooth_mode": 0,
          "shrinkRatio": 1.0,
          "enlargeRatio": 1.0,
          "smallRatio": 0.1,
          "narrowFace": 1.0,
          "roundEyesRatio": 0.0,
          "thinFaceShapeRatio": 0.0,
          "chinLength": 0.0,
          "hairlineHeightRatio": 0.0,
          "appleMusle": 0.0,
          "narrowNoseRatio": 0.0,
          "noseLengthRatio": 0.0,
          "profileRhinoplasty": 0.0,
          "mouthSize": 0.0,
          "philtrumLengthRatio": 0.0,
          "eyeDistanceRatio": 0.0,
          "eyeAngleRatio": 0.0,
          "openCanthus": 0.0,
          "brightEyeStrength": 0.0,
          "removeDarkCircleStrength": 0.0,
          "removeNasolabialFoldsStrength": 0.0,
          "whiteTeeth": 0.0,
          "shrinkCheekbone": 0.0,
          "thinnerHead": 0.0,
          "openExternalCanthus": 0.0,
          "shrinkJawbone": 0.0,
          "shrinkRoundFace": 0.0,
          "shrinkLongFace": 0.0,
          "shrinkGoddessFace": 0.0,
          "shrinkNaturalFace": 0.0,
          "shrinkWholeHead": 0.0,
          "contrastStrength": 0.05,
          "saturationStrength": 0.1,
          "sharpen": 0.0,
          "clear": 0.0
        }
      }
    }
  ]
}

# 直播接管json定義說明

# 簡介

直播接管即2D數字人直播時支持通過文字或音頻文件停止當前既定的直播內容,改爲播報用戶指定的內容,同時支持接管期間替換畫面中的前景/背景圖片。

# json參數說明
名稱 類型 取值示例 必填 說明
tts_query Object tts語音合成
 content String "尊敬的觀衆朋友們,大家好!非常榮幸能够在這個美好的時刻與大家相聚,歡迎收看今天的直播節目。" 待合成語音的文本內容,字數不得少于10個字
 ssml Boolean false 是否使用ssml,開啓後query可以使用USSML和SSML ,推薦使用USSML
audio String "https://xxx/audio.mp3" mp3格式的驅動音頻文件,tts_query和audio都存在時,tts_query優先,忽略audio
foregrounds Object Array 包含內容如下 前景圖片,需使用可中斷的接管服務接口。
 url String "https://xxx/fg.png" 前景圖片url,支持png或jpg
 rect Int Array [0,0,1080,1920] 起始位置和大小,以1080*1920分辨率畫布爲參考
 start Integer 0 前景圖片開始出現時間,以ms爲單位 ,若設置的接管圖片出現時間點晚于TTS播報完成時間,則接管圖片不顯示,顯示無圖片效果;若設置的接管圖片持續時間超過TTS播報持續時間,則接管圖片顯示至接管完成的最後時刻;若設置的接管圖片持續時間短于TTS播報持續時間,則剩餘接管時間內顯示無圖片效果
 duration Integer -1 前景圖片持續時間,以ms爲單位,-1爲默認值,表示隨接管持續一直存在
backgrounds Object 包含內容如下 背景圖片,需使用可中斷的接管服務接口。
 url String "https://xxx/bg.png" 背景圖片url,支持png或jpg
 rect Int Array [0,0,1080,1920] 起始位置和大小,以1080*1920分辨率畫布爲參考,圖片按照短邊撑滿,長邊居中截取形式處理
 start Integer 0 背景圖片開始出現時間,以ms爲單位,若設置的接管圖片出現時間點晚于TTS播報完成時間,則接管圖片不顯示,顯示無圖片效果;若設置的接管圖片持續時間超過TTS播報持續時間,則接管圖片顯示至接管完成的最後時刻;若設置的接管圖片持續時間短于TTS播報持續時間,則剩餘接管時間內顯示無圖片效果
 duration Integer -1 背景圖片持續時間,以ms爲單位,-1爲默認值,表示隨接管持續一直存在
# json文件樣例
{
  "tts_query": {
    "content": "尊敬的觀衆朋友們,大家好!下面插播一段新聞.",
    "ssml": false
  },
  "audio": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/softsugar.mp3",

  "backgrounds": 
        {
          "url": "https://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/background.png",
          "rect": [
            0,
            0,
            1080,
            1920
          ],
          "start": 0,
          "duration": -1
        },
  "foregrounds": [
        {
          "url": "http://dwg-aigc-paas.oss-cn-hangzhou.aliyuncs.com/test/frontgroud.png",
          "rect": [
            0,
            0,
            310,
            88
          ],
          "start": 0,
          "duration": 100
        }
      ]

}

# 直播狀態回調參數

使用API時,系統將通過填寫的直播狀態回調地址,返回直播狀態等信息,若需要直播狀態回調功能,則需聯繫管理員在創建賬戶時提供直播狀態回調地址。
直播間狀態發生狀態變更,且狀態變爲35:視頻流創建完成,5:直播主動關閉,50:其他關閉(如長時間無心跳,網絡鏈接中斷等),9:异常,99:初始化失敗(http請求爲200,先收到狀態32:初始化進行中的情况下) 時將進行回調。 直播接管完成和取消完成(34:接管入隊完成,36:接管播放開始,37:接管播放完成,39:接管异常)時將進行回調(不含麥克風接管)。 如果用戶配置了AuthKey將返回鑒權信息timestamp和signature,具體參考<HTTP回調事件通知>。

提供的接口實現中HTTP Method爲POST,Content-Type應爲application/json

字段 類型 必填 描述
sessionId String True 直播會話的唯一標識
rtcAppId String False RTC APP ID (狀態爲35時有此值)
rtcChannelId String False RTC Channel ID (狀態爲35時有此值)
rtcUid String False RTC UID (狀態爲35時有此值)
rtcToken String False RTC Token (狀態爲35時有此值)
status Integer True 狀態:
35:視頻流創建完成
5:直播主動關閉
50:其他關閉(如長時間無心跳,網絡鏈接中斷等)
9:异常
99:初始化失敗
96:urtcToken過期
34: 接管入隊完成
36:接管播放開始
37:接管播放完成
39:接管异常
commandTraceId String False 接管任務TraceId
commandFinishTime String False 打斷完成時間 (yyyy-MM-dd HH:mm:ss)
taskResult String False 報錯信息
userData String False 用戶信息

以上即爲平臺可以提供的視頻直播全部能力。

最後更新: 2025/2/5 下午5:54:45