开通旁路鉴权服务后,当播放器向慢直播服务发起拉流请求后,慢直播服务会向第三方授权服务器地址发起异步鉴权。因此,需要按照如下要求,设计 获取鉴权结果 的接口。若要使用旁路鉴权,请联系技术人员支持。
例如,拉流 URL 为:http://{your_host}/{app_name}/{stream_name}/index.m3u8?token=xxxIxAmxTokenxxx
旁路鉴权调用流程如下:
具体步骤说明如下:
SMT 客户端请求 SMT 服务器生成带 token 的拉流地址。
SMT 客户端请求的第一个 m3u8 请求在火山引擎慢直播直接放行,返回 m3u8 中 ts 的内容。
火山引擎慢直播将第一个 m3u8 请求通过请求接口传递 body 信息,到 SMT 服务器进行鉴权。
鉴权通过,火山引擎慢直播放行该用户请求,用户下一个 m3u8 请求继续返回 ts 内容。
鉴权未通过,火山引擎慢直播封禁该用户的拉流请求,用户下一个 m3u8 请求无法返回 ts 内容。
参数/结构 | 说明 |
---|---|
请求地址 | "https://xxxxx.xxx.xxx/xxx/xxx/xxx",需由客户提供 |
请求方法 | POST |
content-type 类型 | "application/json;charset=utf-8" |
鉴权结果 |
|
参数 | 数据类型 | 是否必须 | 描述 |
---|---|---|---|
Domain | String | 是 | 拉流域名,来自于拉流 URL |
App | String | 是 | App 名称,来自于拉流 URL |
Stream | String | 是 | 流名称,来自于拉流 URL |
Token | String | 是 | 拉流请求携带的 token 参数,防止模拟攻击 |
ClientIP | String | 是 | 观众的 IP 地址 |
CdnIP | String | 是 | 请求节点 IP |
UA | String | 是 | 观众拉流得来的 User-Agent header |
Referer | String | 是 | 观众拉流的来源 Referer header |
LogID | String | 是 | 火山引擎生成的日志 ID,用于记录每次鉴权请求 |
参数 | 数据类型 | 示例 | 描述 |
---|---|---|---|
data | String | pass |
|
{ "Domain": "domain", "App": "appname", "Stream":"streamname", "Token": "xxxIxAmxTokenxxx", // 拉流请求携带的token "LogID": "machine123T1234567", "UA": "Larf/xxxx", "Referer": "*.baicizhan.com", "CdnIP": "1.1.1.1", "ClientIP": "2.2.2.2" }
{ "data": "deny", "other": "" // 其他参数, 火山引擎不关注 }
说明:用户需要定义什么情况应该拒绝拉流。如上述 data=deny
为拒绝,其他为通过。
在用户第一次请求时,会在鉴权服务器对用户是否可以拉流进行判断。断流时长取决于客户端播放器在请求 m3u8 文件时,其中包含多少个 ts 片及 ts 片时长。
举例:
- 用户请求的第一个 m3u8 中,包含3个 ts 片,每个 ts 片3s,那么客户下一个 m3u8 请求,就在9s后。如果鉴权服务器通过,则用户端可以继续拉流播放;如果鉴权服务器拒绝,那么用户端在播放完第一个 m3u8 的9s后,就无法拉流播放。
- 具体断流时长取决于 m3u8 中的 ts 数及 ts 时长。
参数 | 示例 |
---|---|
请求地址 | https://xxxxx.xxx.xxx/xxx/xxx/xxx |
请求字段 |
|
鉴权响应字段 |
|
重试次数 | 1次 |
重试超时时间 | 3s |
重试间隔 | 1s |
异常上报 | 由客户提供异常上报接口和字段,非必填 |
补充说明:
客户端携带参数除上述参数外,如果需要特定参数或 header,可以整理出需求文档,由火山引擎慢直播侧评估配置。
鉴权服务器内部需要对请求 body 中的信息进行判断是否可以拉流,由客户侧进行判断。