事件回调服务支持将直播云业务下的事件,以 HTTPS 请求的形式通知到第三方的服务器:
事件回调服务器请求回调之后,3秒内没有收到服务器的响应,会重试3次,超时时间3秒,3次重试失败后不再重试。
请求
post请求
body格式为json
应答
HTTP STATUS CODE = 200,服务端忽略应答包具体内容
事件回调消息的 header 中包含以下字段:
字段名 | 值 |
Content-Type | application/json |
Sign | 签名值,具体签名算法见下文 |
签名由 HMAC SHA256 加密算法计算得出,事件回调接收服务器收到回调消息后,通过同样的方式计算出签名,相同则说明校验成功,没有被篡改
//签名 Sign 计算公式中 key 为计算签名 Sign 用的加密密钥。body为请求的原始包体
Sign = base64(hmac-sha256(key, body))
注意:接收到的body一定要是string,如果用实体接收在转字符串时json字段的顺序可能会发生变化,导致签名校验失败;
签名工具类
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class SignUtil {
private final static Charset UTF8 = StandardCharsets.UTF_8;
public static String getSignStr(String key,String body) throws Exception {
return Base64.encodeBase64String(hmac256(key.getBytes(UTF8),body));
}
private static byte[] hmac256(byte[] key, String msg) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, mac.getAlgorithm());
mac.init(secretKeySpec);
return mac.doFinal(msg.getBytes(UTF8));
}
}
字段名称 | 类型 | 说明 |
eventType | String | 回调事件类型,详情见下表 |
pushStartTime | int64 | 开始推流时间(推流时独有) |
pushEndTime | int64 | 断流发生时间(断流时独有) |
callbackTime | int64 | 回调时间 |
errorCode | int64 | 错误码,详情见下表 |
pushDomain | String | 推流域名 |
appName | String | 应用名 |
streamName | String | 流名 |
事件类型 | 字段 | 说明 |
推流事件 | pushStart | 开始推流时触发的事件 |
断流事件 | pushEnd | 推流结束时触发的事件 |
错误码 | 错误说明 | 对应触发事件 |
0 | 用户主动断流 / 用户正常推流 | 推流事件 / 断流事件 |
100201 | 源站内部错误 | 断流事件 |
100202 | 长时间无数据,源站主动断开 | 断流事件 |
100103 | 推流域名被禁用 | 推流事件 |
100301 | 流名被禁推 | 推流事件 / 断流事件 |
100101 | 推流鉴权失败 | 推流事件 |
100102 | 当前流名正在推流中,无法被顶播 | 推流事件 |
100105 | 业务推流鉴权失败 | 推流事件 |
100106 | 推流超时 | 断流事件 |
100399 | 其它原因 | 推流事件 / 断流事件 |
// 正常推流事件
{
"eventType":"pushStart",
"pushStartTime":1702315678212,
"callbackTime":1702315678412,
"errorCode":0,
"pushDomain":"push-domain.com",
"appName":"live",
"streamName":"teststream"
}
// 正常断流事件
{
"eventType":"pushEnd",
"pushEndTime":1702315678212,
"callbackTime":1702315678412,
"errorCode":0,
"pushDomain":"push-domain.com",
"appName":"live",
"streamName":"teststream"
}