下面,将介绍播放器签名的参数组成和生成规则。
一、签名参数
| 参数名称 | 必选 | 类型 | 说明 |
| appId | 是 | Integer | 点播应用 appId。 |
| fileId | 是 | String | 点播文件 ID。 |
| contentInfo | 是 | Object | 对应点播文件 ID 播放的具体内容,为 ContentInfo 类型,可播放下列三种中的一种:转自适应码流 的输出音视频,可以是未加密或加密的。转码 的输出音视频。上传 的原始音视频。 |
| currentTimeStamp | 是 | Integer | 派发签名当前 Unix 时间戳。 |
| expireTimeStamp | 否 | Integer | 派发签名到期 Unix 时间戳,不填表示不过期。 |
| urlAccessInfo | 否 | Object | 播放链接访问配置参数,包括 Key 防盗链 配置、播放域名与协议参数,为 UrlAccessInfo 类型。 |
| drmLicenseInfo | 否 | Object | DRM License 配置参数,为 DrmLicenseInfo 类型 。 |
| ghostWatermarkInfo | 否 | Object | 幽灵水印参数配置,为 GhostWatermarkInfo 类型。 |
二、ContentInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| audioVideoType | 是 | String | 播放的音视频类型,可选值:RawAdaptive:未加密的 转自适应码流 输出。ProtectedAdaptive:私有加密或 DRM 保护的 转自适应码流 输出。Transcode:转码 后输出。Original:上传 的原始音视频。 |
| rawAdaptiveDefinition | 否 | Integer | 允许输出的未加密的 转自适应码流模板 ID,仅当 audioVideoType 为 RawAdaptive 该参数必填且有效。 |
| drmAdaptiveInfo | 否 | Object | 允许输出的加密保护的 转自适应码流模板 ID,仅当 audioVideoType 为 ProtectedAdaptive 该参数必填且有效,为 DRMAdaptiveInfo 类型。 |
| transcodeDefinition | 否 | Integer | 允许输出的 转码模板 ID,仅当 audioVideoType 为 Transcode 该参数必填且有效。 |
| imageSpriteDefinition | 否 | Integer | 用于进度条预览的 雪碧图模板 ID。 |
| resolutionNames | 否 | Array of Object | 播放器对于不同分辨率的子流展示名字,为 ResolutionNameInfo 类型 数组。不填或者填空数组则使用默认配置:MinEdgeLength:240,Name:240P。MinEdgeLength:480,Name:480P。MinEdgeLength:720,Name:720P。MinEdgeLength:1080,Name:1080P。MinEdgeLength:1440,Name:2K。MinEdgeLength:2160,Name:4K。MinEdgeLength:4320,Name:8K。 |
三、DRMAdaptiveInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| multiDrmDefinition | 否 | Integer | 保护类型 DrmType 为 Widevine+FairPlay 的 转自适应码流模板 ID。 |
| privateEncryptionDefinition | 否 | Integer | 保护类型 DrmType 为 SimpleAES 的 转自适应码流模板 ID。 |
| widevineDefinition | 否 | Integer | 保护类型 DrmType 为 Widevine 的 转自适应码流模板 ID。 |
| fairPlayDefinition | 否 | Integer | 保护类型 DrmType 为 FairPlay 的 转自适应码流模板 ID。 |
四、ResolutionNameInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| MinEdgeLength | 是 | Integer | 视频短边长度,单位:像素。 |
| Name | 是 | String | 展示名字。 |
五、UrlAccessInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| t | 否 | String | 16进制字符串,表示链接的过期时间。具体含义和取值参见 防盗链参数 中的 t 参数。不填表示不过期。 |
| exper | 否 | Integer | 试看时长,单位为秒,以十进制表示。如果要指定试看时长,时长必须不小于30秒。具体含义和取值参见 防盗链参数 中的 exper 参数。 |
| rlimit | 否 | Integer | 最多允许多少个不同 IP 的终端播放,以十进制表示。具体含义和取值参见 防盗链参数 中的 rlimit 参数。 |
| us | 否 | String | 链接标识,用户增强链接的唯一性。具体含义和取值参见 防盗链参数 中的 us 参数。 |
| domain | 否 | String | 播放时使用的域名。不填或者填 Default,表示使用 默认分发配置 中的域名。 |
| scheme | 否 | String | 播放时使用的 Scheme。不填或者填 Default,表示使用 默认分发配置 中的 Scheme。其他可选值:HTTP。HTTPS。 |
| uv | 否 | String | 6 位十六进制字符,用于溯源水印场景。 |
六、DrmLicenseInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| persistent | 否 | String | 是否允许终端持久化保存商业级 DRM 播放许可证。取值范围:ON:允许持久化保存;OFF:不允许持久化保存。默认取值为 OFF。 |
| rentalDuration | 否 | Integer | 当 persistent 为 ON 时,商业级 DRM 播放许可证允许被持久化保存的时长,单位为秒,不填表示不限时长。 |
| forceL1TrackTypes | 否 | Array of String | 当使用 Widevine 时,要求终端必须使用 L1 安全级别处理的 Track 类型。其中,未指定的 Track 类型默认使用 L3 安全级别处理。取值如下:AUDIO:音频子流;SD:短边<720的子流;HD:720 ≤ 短边<2160的子流;UHD1:2160 ≤ 短边<4320的子流;UHD2:短边 ≥ 4320的子流。 |
| minimumProtectionLevel | 否 | String | 是否允许终端使用「基础」模式播放。取值:BASIC:允许使用「基础」模式播放;STANDARD:不允许使用「基础」模式播放。默认取值为 BASIC。 |
七、GhostWatermarkInfo 类型
| 参数名称 | 必选 | 类型 | 说明 |
| text | 是 | String | 幽灵水印内容。长度不超过64个字符。 |
注意:说明:
八、签名计算
点播播放器签名采用 JWT(JSON Web Token),一种由 Header、PayLoad 和 Key 计算并组合得到的数字令牌。
九、Header
Header 为 JSON 格式,表示 JWT 使用的算法信息,固定使用如下内容:
{ "alg": "HS256", "typ": "JWT"}
十、PayLoad
Payload 为 JSON 格式,是播放器签名参数的内容,例如:
{ "appId": 1255566655, "fileId": "4564972818519602447", "contentInfo": { "audioVideoType": "RawAdaptive", "rawAdaptiveDefinition": 10, "imageSpriteDefinition": 10 }, "currentTimeStamp": 1663064276, "expireTimeStamp": 1663294210, "urlAccessInfo": { "t": "6323e6b0", "rlimit": 3, "us": "72d4cd1101" }}
十一、Key
Key 是计算签名时使用的密钥,这里使用 默认分发配置 中的播放密钥。
十二、计算公式
1. 计算 Signature:
Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload), Key)
2. 计算 Token:
Token = base64UrlEncode(Header) + '.' + base64UrlEncode(Payload) + '.' + base64UrlEncode(Signature)
最终得到的 Token,即为点播播放器签名。
注意:说明:
注意:HMACSHA256 请参见 RFC – HMACSHA256。base64UrlEncode 请参见 RFC – base64UrlEncode。
为方便你计算签名以及验证签名,云点播控制台提供了签名生成工具和校验工具:
·播放器签名工具 。
十三、计算示例
例如,某用户 appId 是 1255566655,fileId 是 4564972818519602447的视频生成播放器签名,并且:
·播放密钥为 TxtyhLlgo7J3iOADIron。
·播放器签名的派发时间为 2022-09-13 18:17:56,对应的 Unix 时间是 1663064276。
·播放器签名的过期时间为 2022-09-16 10:10:10,对应的 Unix 时间是 1663294210。
·防盗链的过期时间为 2022-09-16 11:00:00,对应的 Unix 时间是 6323e6b0。
·限制最多允许 3 个不同的 IP 播放 URL。
·生成的随机字符串是 72d4cd1101。
则签名步骤如下:
1. Header 的内容为:
{ "alg": "HS256", "typ": "JWT"}
经过 base64UrlEncode 后的结果是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
2. Payload 的内容为:
{ "appId": 1255566655, "fileId": "4564972818519602447", "contentInfo": { "audioVideoType": "RawAdaptive", "rawAdaptiveDefinition": 10, "imageSpriteDefinition": 10 }, "currentTimeStamp": 1663064276, "expireTimeStamp": 1663294210, "urlAccessInfo": { "t": "6323e6b0", "rlimit": 3, "us": "72d4cd1101" }}
经过 base64UrlEncode 后的结果是:
eyJhcHBJZCI6MTI1NTU2NjY1NSwiZmlsZUlkIjoiNDU2NDk3MjgxODUxOTYwMjQ0NyIsImNvbnRlbnRJbmZvMSI6eyJhdWRpb1ZpZGVvVHlwZSI6IlJhd0FkYXB0
aXZlIiwicmF3QWRhcHRpdmVEZWZpbml0aW9uIjoxMCwiaW1hZ2VTcHJpdGVEZWZpbml0aW9uIjoxMH0sImN1cnJlbnRUaW1lU3RhbXAiOjE2NjMwNjQyNzYsImV4
cGlyZVRpbWVTdGFtcCI6MTY2MzI5NDIxMCwidXJsQWNjZXNzSW5mbyI6eyJ0IjoiNjMyM2U2YjAiLCJybGltaXQiOjMsInVzIjoiNzJkNGNkMTEwMSJ9fQ
3. 以播放密钥作为 Key(即 TxtyhLlgo7J3iOADIron)进行 HMAC 计算,Signature 是:
QFcBX9830ysTzJIyZxoOlRmNb2Gqy2fns9yOfriaDI8
4. 最终 Token 是:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6MTI1NTU2NjY1NSwiZmlsZUlkIjoiNDU2NDk3MjgxODUxOTYwMjQ0NyIsImNvbnRlbnRJbmZvMSI6eyJhdWRpb1ZpZGVvVHlwZSI6IlJhd0FkYXB0aXZlIiwicmF3QWRhcHRpdmVEZWZpbml0aW9uIjoxMCwiaW1hZ2VTcHJpdGVEZWZpbml0aW9uIjoxMH0sImN1cnJlbnRUaW1lU3RhbXAiOjE2NjMwNjQyNzYsImV4cGlyZVRpbWVTdGFtcCI6MTY2MzI5NDIxMCwidXJsQWNjZXNzSW5mbyI6eyJ0IjoiNjMyM2U2YjAiLCJybGltaXQiOjMsInVzIjoiNzJkNGNkMTEwMSJ9fQ.QFcBX9830ysTzJIyZxoOlRmNb2Gqy2fns9yOfriaDI8
十四、代码示例
云点播提供了 Python、Java、Go、C#、PHP 和 Node.js 等多种语言的播放器签名的代码示例,具体请参见 播放器签名 – 签名示例。
十五、常见错误
如果你使用播放器签名,播放器 SDK 返回了错误码,较为常见的原因有:
·签名计算 KEY 用错,应该使用 默认分发配置 中的播放密钥,你可自查下是否误用为 KEY 防盗链参数 中的 KEY 参数。
·签名参数 填错,如:
·参数类型错误:例如 appId 为整型,错填为 appId:"125000123"(字符串型);又例如 contentInfo 里的转码模板参数为整型,错填为 transcodeDefinition: "14011"(字符串型)。
·参数取值超出有效范围:例如 contentInfo 里的播放的音视频类型参数,错填为 audioVideoType: "Transocde"(拼写错误,不是有效的枚举值)。