本文介紹雲端錄製回調的訊息格式及相關參數說明。
雲端錄製回調重試機制
若接收到的響應錯誤碼大於等於 500 或發生請求逾時,系統會向使用者重新發送一次回調訊息。
雲端錄製回調訊息格式
本回調通過HTTP/HTTPS協議,以POST請求方式發送回調訊息到使用者配置的URL中。
其中請求訊息的Body為JSON格式。
收到回調訊息後,期望接收方返回以下內容:
Header
HttpStatus
Body
Content-Type: application/json
200
{
"Code": 0,
"Msg": "Success"
}
雲端錄製回調參數說明
當前雲端錄製回調僅支援發送任務狀態變化事件。
回調訊息頭(header)
參數名 | 值 |
Content-Type | application/json |
ALI-LIVE-TIMESTAMP | 僅當NotifyAuthKey有效時傳遞,樣本值:1748417138 |
ALI-LIVE-SIGNATURE | 僅當NotifyAuthKey有效時傳遞,樣本值:abcdefgxxx |
鑒權使用說明:當建立雲端錄製任務時,若傳入的 NotifyAuthKey 為有效值,系統在發送回調通知至使用者服務端時,HTTP 要求頭中將包含 ALI-LIVE-TIMESTAMP 和 ALI-LIVE-SIGNATURE 欄位,用於接收方進行簽名驗證,確保回調訊息的合法性與安全性。
其中,ALI-LIVE-SIGNATURE 的建置規則如下:
ALI-LIVE-SIGNATURE = MD5(MD5CONTENT)
MD5CONTENT = ALI-LIVE-TIMESTAMP + "|" + NotifyAuthKey接收回調請求後,從要求標頭中提取
ALI-LIVE-TIMESTAMP和ALI-LIVE-SIGNATURE。使用本地儲存的
NotifyAuthKey與提取出的ALI-LIVE-TIMESTAMP,按相同規則拼接(中間用|串連),產生MD5CONTENT。對
MD5CONTENT執行 MD5 計算,得到簽名結果。將計算出的簽名值與要求標頭中的
ALI-LIVE-SIGNATURE進行比對。
若兩者不一致,則說明回調請求來源不可信,建議拒絕處理,以保障系統安全。
回調訊息體(body)
參數名 | 類型 | 描述 |
appId | string | 應用Id。 |
channelId | string | 頻道Id。 |
taskId | string | 錄製任務Id。 |
eventType | string | 事件類型,取值請參考事件類型說明表。 |
callbackTs | integer | 發送回調的時間,為毫秒級時間戳記。 例如:1744774345595。 |
payload | json string | 其他資訊。詳細參數說明請參考其他資訊說明表。 |
事件類型(eventType)說明
取值 | 含義 |
TaskCreated | 任務已建立。 |
TaskStarting | 任務啟動中。 |
TaskRunning | 任務運行中。 |
TaskRecovering | 異常恢複中。 |
TaskStopping | 任務停止中。 |
TaskStopped | 任務已停止。 |
TaskStartFailed | 啟動失敗。 |
TaskUpdated | 更新成功。 |
TaskUpdateFailed | 更新失敗。 |
RecordStart | 錄製正式開始。 |
RecordFailed | 錄製異常恢複逾時。 |
RecordFileUploaded | 錄製檔案成功上傳。 |
其他資訊(payload)說明
參數名 | 類型 | 描述 |
eventTs | integer | 事件發生的時間,為毫秒級時間戳記。 例如:1744774345595。 |
taskStatus | string | 任務狀態。取值請參見任務狀態說明表。 說明 當事件類型(eventType)為錄製檔案成功上傳(RecordFileUploaded)時不會返回。 |
errorCode | string | 錯誤碼。取值請參見錯誤說明表。 |
errorMessage | string | 錯誤資訊。取值請參見錯誤說明表。 |
recordFileList | FileList | 錄製檔案清單。詳細參數說明請參考錄製檔案清單說明表。 說明 僅當事件類型(eventType)為任務運行中(TaskRunning)、任務停止中(TaskStopping)、任務已停止(TaskStopped)時會返回。 |
recordFile | RecordFile | 錄製檔案資訊。僅當事件類型為錄製檔案成功上傳(RecordFileUploaded)時返回。詳細參數說明請參考錄製檔案資訊說明表。 |
format | string | 錄製檔案格式。僅當事件類型為錄製檔案成功上傳(RecordFileUploaded)時返回,表示本次回調對應的檔案格式。取值:
|
streamInfo | string | 僅當事件類型為錄製正式開始(RecordStart)時返回。用於表示訂閱的哪一條流開始錄製。
|
錄製檔案清單(FileList)說明
參數名 | 類型 | 描述 |
mp3FileList | array<string> | mp3格式錄製檔案名稱數組。 |
mp4FileList | array<string> | mp4格式錄製檔案名稱數組。 |
hlsFileList | array<string> | HLS格式錄製檔案名稱數組。 |
vodMediaList | array<VodFileInfo> | VOD 媒體資源數組,僅當錄製到VOD時非空。錄製到 VOD 時,訂閱的各個流的錄製檔案集合,其中每一項對應著一個訂閱流。VodFileInfo類型的詳細參數說明請參考VOD檔案資訊說明表。 |
VOD檔案資訊(VodFileInfo)說明
參數名 | 類型 | 描述 |
stream | string | 表示訂閱的流
|
mediaIds | array<string> | 錄製過程中產生的媒體資源ID數組。 |
mergedIds | array<string> | 錄製結束後產生的自動合并的媒體資源ID數組。僅當儲存到VOD時,指定了自動合并,並且錄製了1個以上的媒體資源時非空。 |
錄製檔案資訊(RecordFile)說明
參數名 | 類型 | 描述 |
sliceFile | string | 僅NotifyFileUploadedFormat參數指定時返回。 |
hlsFile | string | 僅NotifyFileUploadedFormat參數指定時返回。 |
mp4File | string | 僅NotifyFileUploadedFormat參數指定時返回。 |
mp3File | string | 僅NotifyFileUploadedFormat參數指定時返回。 |
任務狀態(taskStatus)說明
更新成功和更新失敗並不影響任務狀態,所以taskStatus欄位中不包含這兩種狀態。
狀態 | 含義 |
CREATED | 任務建立完成返回。 |
STARTING | 任務啟動中返回。 |
RUNNING | 任務運行中返回。 |
RECOVERING | 任務異常恢複中返回。 |
STOPPING | 任務停止中返回。 |
STOPPED | 任務已停止後返回。 |
FAILED | 在任務啟動失敗後返回。 |
錯誤說明
僅當事件類型(eventType)取值為異常恢複中(TaskRecovering)、啟動失敗(TaskStartFailed)以及更新失敗(TaskUpdateFailed)這三種類型時不為空白,其他類型為空白。
事件類型(eventType) | 錯誤碼(errorCode) | 錯誤資訊(errorMessage) | 含義 |
啟動失敗(TaskStartFailed) | StartTaskError | Channel already closed | 頻道已關閉。 |
Start task error | 其他原因。 | ||
異常恢複中(TaskRecovering) | RunTaskError | The rms task failed | 混流模組運行異常。 |
The record task failed | 錄製模組運行異常。 | ||
更新失敗(TaskUpdateFailed) | UpdateTaskError | Update task error | 任務更新失敗。 |
錄製異常恢複逾時(RecordFailed) | RunTaskError | Recovering status timeout | 異常恢複逾時。 |
回調樣本
TaskStopped事件:
{
"appId": "mytestappid",
"callbackTs": 1755504873034,
"channelId": "room1047",
"eventType": "TaskStopped",
"payload": "{\"eventTs\":1755504873014,\"taskStatus\":\"STOPPED\",\"errorCode\":\"\",\"errorMessage\":\"\",\"streamInfo\":\"\",\"recordFileList\":{\"mp3FileList\":[],\"mp4FileList\":[\"mp4/fe60a6e3-cecb-3fae-a8cf-3d2391f507a5/mytestappid_room1047_2025-08-18-15:59:16.mp4\",\"mp4/fe60a6e3-cecb-3fae-a8cf-3d2391f507a5/mytestappid_room1047_2025-08-18-16:02:16.mp4\"],\"hlsFileList\":[\"hls/fe60a6e3-cecb-3fae-a8cf-3d2391f507a5/mytestappid_room1047_2025-08-18-15:59:16.m3u8\",\"hls/fe60a6e3-cecb-3fae-a8cf-3d2391f507a5/mytestappid_room1047_2025-08-18-16:02:16.m3u8\"],\"vodMediaList\":[]}}",
"taskId": "fe60a6e3-cecb-3fae-a8cf-3d2391f507a5"
}RecordFileUploaded事件:
{
"appId":"mytestappid",
"callbackTs":1764301584289,
"channelId":"room1406",
"eventType":"RecordFileUploaded",
"payload":"{\"eventTs\":1764301584265,\"errorCode\":\"\",\"errorMessage\":\"\",\"streamInfo\":\"Single::userA::AV::C\",\"format\":\"MP4\",\"recordFile\":{\"sliceFile\":\"\",\"hlsFile\":\"\",\"mp3File\":\"\",\"mp4File\":\"mp4/07c2e845-630d-36a1-b2d1-3b546efdea90/mytestappid_room1406_userA_2025-11-28-11:46:03.mp4\"}}",
"taskId":"07c2e845-630d-36a1-b2d1-3b546efdea90"}