播放器签名,用于 App 播放服务对终端的授权播放。如下图步骤5所示,若 App 播放服务允许终端播放,则派发一个合法的签名。终端在签名有效时间内可以播放视频内容。
下面,将介绍播放器签名的参数组成和生成规则。
签名参数
参数名称 | 必选 | 类型 | 说明 |
appId | 是 | Integer | 账号 appId。 |
fileId | 是 | String | 文件 ID。 |
currentTimeStamp | 是 | Integer | 派发签名当前 Unix 时间戳。 |
expireTimeStamp | 否 | Integer | 派发签名到期 Unix 时间戳,不填表示不过期。 |
pcfg | 否 | String | 使用的播放配置名称。如果是 default,可以不填。 |
urlAccessInfo | 否 | Object | |
drmLicenseInfo | 否 | Object |
UrlAccessInfo 类型
参数名称 | 必选 | 类型 | 说明 |
t | 否 | String | 16进制字符串,表示链接的过期时间。 具体含义和取值参见 防盗链参数 中的 t 参数。 不填表示不过期。 |
exper | 否 | Integer | 试看时长,单位为秒,以十进制表示。 如果要指定试看时长,时长必须不小于30秒。 具体含义和取值参见 防盗链参数 中的 exper 参数。 |
rlimit | 否 | Integer | 最多允许多少个不同 IP 的终端播放,以十进制表示。 具体含义和取值参见 防盗链参数 中的 rlimit 参数。 |
us | 否 | String | 链接标识,用户增强链接的唯一性。 具体含义和取值参见 防盗链参数 中的 us 参数。 |
uv | 否 | String | 播放者的 ID,以十六进制表示,共6位,该参数用于 溯源水印 使用场景。 具体含义和取值参见 防盗链参数 中的 uv 参数。 |
DrmLicenseInfo 类型
参数名称 | 必选 | 类型 | 说明 |
expireTimeStamp | 否 | Integer | 密钥的到期 Unix 时间戳,不填表示不过期。 |
签名计算
Header
Header 为 JSON 格式,表示 JWT 使用的算法信息,固定使用如下内容:
{"alg": "HS256","typ": "JWT"}
PayLoad
Payload 为 JSON 格式,是播放器签名参数的内容,例如:
{"appId": 1255566655,"fileId": "4564972818519602447","currentTimeStamp": 1546300,"expireTimeStamp": 1546344000,"urlAccessInfo": {"t": "5c2b5640","rlimit": 3,"us": "72d4cd1101","uv": "1234ab"}}
Key
计算公式
1. 计算 Signature:
Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload), KEY)
2. 计算 Token:
Token = base64UrlEncode(Header) + '.' + base64UrlEncode(Payload) + '.' + base64UrlEncode(Signature)
最终得到的 Token,即为点播播放器签名。说明:
为方便您计算签名以及验证签名,云点播提供了在线签名生成校验工具:
播放器 SDK - 签名生成工具 快速生成签名。
播放器 SDK - 签名校验工具 快速校验签名。
计算示例
例如,某用户 appId 是
1255566655
,fileId 是4564972818519602447
的视频生成播放器签名,并且:开启的防盗链 KEY 为
24FEQmTzro4V5u3D5epW
。使用自定义的播放器配置,自定义配置名为
MyCfg
。播放器签名的派发时间为2019/1/1 19:00:00,对应的 Unix 时间是
1546300
。播放器签名的过期时间为2019/1/1 20:00:00,对应的 Unix 时间是
1546344000
。防盗链的过期时间为2019/1/1 20:00:00,对应的 Unix 时间是
5c2b5640
。限制最多允许3个不同的 IP 播放 URL。
生成的随机字符串是
72d4cd1101
。则签名步骤如下:
1. Header 的内容为:
{"alg": "HS256","typ": "JWT"}
经过 base64UrlEncode 后的结果是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
。2. Payload 的内容为:
{"appId": 1255566655,"fileId": "4564972818519602447","currentTimeStamp": 1546340400,"expireTimeStamp": 1546344000,"urlAccessInfo": {"t": "5c2b5640","rlimit": 3,"us": "72d4cd1101","uv": "1234ab"}}
经过 base64UrlEncode 后的结果是:
eyJhcHBJZCI6MTI1NTU2NjY1NSwiZmlsZUlkIjoiNDU2NDk3MjgxODUxOTYwMjQ0NyIsImN1cnJlbnRUaW1lU3RhbXAiOjE1NDYzNDA0MDAsImV4cGlyZVRpbWVTdGFtcCI6MTU0NjM0NDAwMCwidXJsQWNjZXNzSW5mbyI6eyJ0IjoiNWMyYjU2NDAiLCJybGltaXQiOjMsInVzIjoiNzJkNGNkMTEwMSIsInV2IjoiMTIzNGFiIn19
。3. 以
24FEQmTzro4V5u3D5epW
为 KEY 进行 HMAC 计算,Signature 是:
j3WJ9W3V4ve_N_Z157_B9AKkT0GhSmGAEdhv6YtoZSY
。4. 最终 Token 是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTI1NTU2NjY1NSwiZmlsZUlkIjoiNDU2NDk3MjgxODUxOTYwMjQ0NyIsImN1cnJlbnRUaW1lU3RhbXAiOjE1NDYzNDA0MDAsImV4cGlyZVRpbWVTdGFtcCI6MTU0NjM0NDAwMCwidXJsQWNjZXNzSW5mbyI6eyJ0IjoiNWMyYjU2NDAiLCJybGltaXQiOjMsInVzIjoiNzJkNGNkMTEwMSIsInV2IjoiMTIzNGFiIn19.qdetnVzAxDrvrlDB-3drnKCzHwX-2QFLfJ1juOQnbls
。