该回调接口为 v2 版本的回调,仅 2021-11-29 之后开通云端录制服务的用户会收到本回调。请 2021-11-29 之前开通云端录制服务的用户参考 旧版回调接口。
如需要第一时间获知任务状态事件,需要在开通云端录制服务时提供回调地址,详情请参考 项目管理 - 服务配置 中的“云端录制”。
录制任务过程中会以 POST 方式向回调地址发起 HTTP 请求,请求包体为 JSON 格式。
参数 | 类型 | 描述 |
---|---|---|
app_id | Int64 | ZEGO 给开发者分配的 AppID,唯一标识一个应用。 |
task_id | String | 录制任务 ID,长度固定为 16 个字节的字符串。 |
room_id | String | 录制房间 ID。 |
event_type | Int | 事件通知类型。
|
message | String | 事件描述。 |
nonce | String | 随机数,用于检验串计算。 |
timestamp | String | 回调发送时的 Unix 时间戳,用于检验串计算。 |
signature | String | 检验串,验证回调发送方身份。 |
sequence | Int | 消息序列号,从 0 开始计数。 |
detail | JSON Object | 事件详细信息,根据 event_type 不同,该参数的属性不同。 |
event_type
为 1 时,detail
属性列表如下:
参数 | 类型 | 描述 |
---|---|---|
upload_status | int | 录制文件上传整体状态。
|
file_info | Array of Object | 文件信息列表。列表为空表示没有产生录制文件(房间内没有用户推流)。 |
file_info
属性如下:
参数 | 类型 | 描述 |
---|---|---|
user_id | String | 录制流对应的推流用户 ID(混流时,为 MixOutputStreamId)。 |
user_name | String | 录制流对应的推流用户昵称(混流时,为 MixOutputStreamId)。 |
stream_id | String | 录制流对应的流 ID(混流时,为 MixOutputStreamId)。 |
file_id | String | 录制文件名称,详情请参考 开始录制 中的 OutputFileRule 参数。 |
video_id | String | 阿里云 Vod、腾讯云 Vod 上传成功得到的视频 ID 参数。阿里云 Vod 对应的是 VideoId,腾讯云 Vod 对应的是 FileId。 |
file_url | String | 文件访问 URL。第三方存储为七牛云或阿里云 Vod 时不返回。 |
output_file_format | String | 输出录制文件的格式,包括 “mp4”、“flv”、“hls”、“aac” 和 “jpg”。 |
file_size | Int64 | 文件大小,单位:字节。 |
duration | Int | 文件时长,单位:ms。 |
resolution_width | Int | 视频分辨率宽,单位:像素。 |
resolution_height | Int | 视频分辨率高,单位:像素。 |
media_track_type | Int | 文件媒体类型。
|
begin_timestamp | Int64 | 开始录制文件时的 Unix 时间戳,单位:ms。 |
status | Int | 文件状态。
|
event_type
为 2 时,detail
属性列表如下:
参数 | 类型 | 描述 |
---|---|---|
quit_reason | int | 录制服务异常退出原因。
|
event_type
为 3 时,detail
属性列表如下:
参数 | 类型 | 描述 |
---|---|---|
image_type | int | 下载失败的图片类型,对应 开始录制 时设置的图片类型。
|
image_url | String | 下载失败的图片 url。 |
event_type
为 4、5 或 7 时,detail
内容为空。
event_type
为 6 时,detail
属性列表如下:
参数 | 类型 | 描述 |
---|---|---|
stream_id | String | 录制流对应的流 ID。 |
event_type
为 102 时,detail
属性列表如下:
参数 | 类型 | 描述 |
---|---|---|
stream_id | String | 录制流对应的流 ID。 |
file_id | String | 录制文件名称。 |
file_url | String | 文件访问 URL。 |
media_track_type | Int | 文件媒体类型。
|
录制状态回调的相关参数,ZEGO 会在之后的迭代计划中,持续优化更新(例如:新增字段、或新增某些字段的参数取值)。开发者在接入时,请避免将代码写死,造成后期更新后,无法兼容新版本。
以下是录制结束回调的请求示例。
{
"app_id": 1234567890,
"detail": {
"file_info": [
{
"begin_timestamp": 1637753762084,
"duration": 170039,
"file_id": "YZ4joOE4IwmFAAAT_6677_800221_800221_VA_20211124113602084.mp4",
"file_size": 25349026,
"file_url": "file_url",
"media_track_type": 3,
"output_file_format": "mp4",
"resolution_height": 720,
"resolution_width": 1280,
"status": 3,
"stream_id": "800221",
"user_id": "800221",
"user_name": "play_800221",
"video_id": ""
}
],
"upload_status": 1
},
"event_type": 1,
"message": "",
"nonce": "100480",
"room_id": "6677",
"sequence": 1,
"signature": "12345678987654321",
"task_id": "YZ4joOE4IwmFAAAT",
"timestamp": "1637753949"
}
校验回调请求的发起来源是否为 ZEGO 云端录制。
通过比较自行计算的 signature 与回调请求中的 signature 是否一致可以验证请求的发起方是否为 ZEGO 云端录制。计算 signature 的流程如下图:
PHP 代码如下:
$signature = $_POST["signature"];
$timestamp = $_POST["timestamp"];
$nonce = $_POST["nonce"];
$secret = callbacksecret;//后台获取的callbacksecret
$tmpArr = array($secret, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
} else {
return false;
}
Java 代码如下:
// 从请求参数中获取到 signature, timestamp, nonce
String signature = request.getParameter("signature");
long timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
// 后台获取的callbacksecret
String secret = callbacksecret;
String[] tempArr = {secret, ""+timestamp, nonce};
Arrays.sort(tempArr);
String tmpStr = "";
for (int i = 0; i < tempArr.length; i++) {
tmpStr += tempArr[i];
}
tmpStr = org.apache.commons.codec.digest.DigestUtils.sha1Hex(tmpStr);
return tmpStr.equals(signature);
$timestamp = 1470820198;
$nonce = 123412;
$secret = 'secret';
排序拼接后需要加密的原始串为:1234121470820198secret
加密的结果为:5bd59fd62953a8059fb7eaba95720f66d19e4517
返回 HTTP status code 为 2XX (例如 200)表示成功,其他响应都表示失败。
如果 ZEGO 服务器没有收到响应,会尝试重试,最多进行 2 次重试。每次重试请求与上一次请求的间隔时间为 5s。若第 2 次重试后仍然失败,将不再重试,该回调丢失。
联系我们
文档反馈