播放器签名,用于 App 播放服务对终端的授权播放。如下图步骤 6 所示,若 App 播放服务允许终端播放,则派发一个合法的签名。终端在签名有效时间内可以播放视频内容。
下面,将介绍播放器签名的参数组成和生成规则。
签名参数
ContentInfo 类型
参数名称 | 必选 | 类型 | 说明 |
audioVideoType | 是 | String | 播放的音视频类型,可选值: RawAdaptive:未加密的 转自适应码流 输出。 ProtectedAdaptive:私有加密或 DRM 保护的 转自适应码流 输出。 Transcode:转码 后输出。 Original:上传 的原始音视频。 |
rawAdaptiveDefinition | 否 | Integer | |
drmAdaptiveInfo | 否 | Object | |
transcodeDefinition | 否 | Integer | |
imageSpriteDefinition | 否 | Integer | |
resolutionNames | 否 | Array of Object | 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 类型
参数名称 | 必选 | 类型 | 说明 |
privateEncryptionDefinition | 否 | Integer | |
widevineDefinition | 否 | Integer | |
fairPlayDefinition | 否 | Integer |
ResolutionNameInfo 类型
参数名称 | 必选 | 类型 | 说明 |
MinEdgeLength | 是 | Integer | 视频短边长度,单位:像素。 |
Name | 是 | String | 展示名字。 |
UrlAccessInfo 类型
参数名称 | 必选 | 类型 | 说明 |
t | 否 | String | 16进制字符串,表示链接的过期时间。 具体含义和取值参见 防盗链参数 中的 t 参数。 不填表示不过期。 |
exper | 否 | Integer | 试看时长,单位为秒,以十进制表示。 如果要指定试看时长,时长必须不小于30秒。 具体含义和取值参见 防盗链参数 中的 exper 参数。 |
rlimit | 否 | Integer | 最多允许多少个不同 IP 的终端播放,以十进制表示。 具体含义和取值参见 防盗链参数 中的 rlimit 参数。 |
us | 否 | String | 链接标识,用户增强链接的唯一性。 具体含义和取值参见 防盗链参数 中的 us 参数。 |
domain | 否 | String | |
scheme | 否 | String | HTTP。 HTTPS。 |
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的子流。 |
GhostWatermarkInfo 类型
参数名称 | 必选 | 类型 | 说明 |
text | 是 | String | 幽灵水印内容。长度不超过64个字符。 |
签名计算
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
计算公式
1. 计算 Signature:
Signature = HMACSHA256(base64UrlEncode(Header) + "." + base64UrlEncode(Payload), Key)
2. 计算 Token:
Token = base64UrlEncode(Header) + '.' + base64UrlEncode(Payload) + '.' + base64UrlEncode(Signature)
最终得到的 Token,即为点播播放器签名。说明:
为方便您计算签名以及验证签名,云点播控制台提供了签名生成工具和校验工具:
播放器签名工具 。
计算示例
例如,某用户 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
代码示例
常见错误
如果您使用播放器签名,播放器 SDK 返回了错误码,较为常见的原因有:
签名参数 填错,如:
参数类型错误:例如 appId 为整型,错填为
appId:"125000123"
(字符串型);又例如contentInfo
里的转码模板参数为整型,错填为 transcodeDefinition: "14011"
(字符串型)。参数取值超出有效范围:例如
contentInfo
里的播放的音视频类型参数,错填为audioVideoType: "Transocde"
(拼写错误,不是有效的枚举值)。