更新时间:2024-01-02 10:46:35
要播放从我们的 CDN 检索到的 DRM 加密流,您必须首先获得许可证。许可证包含解密内容所需的加密密钥,以及指定内容使用方式的权利和其他属性。例如,许可证可能包含有关何时到期或流可以播放多少次的信息。这些属性都可以在许可证中与受保护的流内容分开配置。
要使用Media Acceleration Live BroadcastDRM,必须遵循某些准则来生成许可证获取 URL。此 URL 用于获取允许解密您的流以进行播放的许可证。本文提供有关如何生成许可证获取 URL 的指南。
这些是生成许可证获取 URL 时要遵循的步骤:
访问令牌允许您访问爱迪德并注册您自己的签名密钥,它将用于在以下步骤中生成您的许可证获取 URL 令牌。
运行以下 curl 脚本以检索访问令牌:
curl -X POST \
'http://ca.haplat.net/wslive/drm/getToken.action?sign=query_token&time=current_timestamp&n=accountId' \
-H 'Authorization: Bearer {access_token}' \
-H 'Host: ca.haplat.net'
请确保为此请求提供所需的请求标头和参数。
参数/请求头 | 必需 | 描述 |
---|---|---|
Host | 是的 | 固定值: ca.haplat.net |
n | 是的 | 您的帐户名称。 |
r | 是的 | 唯一的随机字符串,最大长度为13,建议使用时间戳。 |
k | 是的 | MD5 认证值。 k = md5(r + apikey) ,即获取’k’的值,将字符串apikey追加到字符串’r’的末尾,然后对得到的字符串进行MD5计算。 注:apikey可向客服索取。 例如, 1。请求并获取apikey=012f37a3f2952 2.随机生成字符串r=1409284800 3.将 apikey 附加到“r”的末尾,生成字符串“1409284800012f37a3f2952” 4。计算新字符串的MD5哈希得到’k’的值,即’b9fed80be752551834eec3e52fa94115’ |
请注意,要使用此 API,您必须先联系客户服务启用它并为您提供访问令牌。
提交成功请求后,API 将响应所需的详细信息。响应正文可能包含各种字段,包括“ accessToken ”字段,该字段包含继续执行后续步骤所需的访问令牌。
{
"msg": {
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlJEUkROVEl3TTBSRU1USXlPVVZCTURKRU56RkNNamRFUVVRM1JFUXlSRFE1T1VRMU1ESXlNUSJ9.eyJodHRwOi8vaXJkZXRvLmNvbS9yb2xlcyI6W3sic2VydmljZSI6IlJpZ2h0c05HIiwiYWNjb",
"expiresIn": 36000,
"tokenType": "Bearer"
},
"code": 200,
"callTime": "2023-04-20 15:42:53"
}
请确保您安全地存储此令牌,因为它授予访问权限以生成您的许可证获取 URL。
典型的许可证获取 URL 可能具有以下格式:
https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?ls_session=eyJhbGciOiJIUzI1NiIs****&contentId=eae3246f8bb4dba67b6328e2b9656a5b
该 URL 包含一个名为“ls_session”的参数,它是负责验证客户端授权以请求许可证的会话令牌。会话令牌生成为需要“会话签名密钥”的签名 JWT 格式。因此,要创建会话令牌,您必须首先生成会话签名密钥并将其注册到爱迪德控制中。
以下是创建会话签名密钥并将其注册到爱迪德控制中的示例请求:
curl -X PUT \
'https://wangsuusa.live.ott.irdeto.com/ls/v1.1/wangsuusa/sessionSigningKeys/{sessionSigningKeyId}' \
-H 'Authorization: Bearer {access_token}' \
-H 'Content-Type: application/json' \
-d '{
"id": "testkey0412",
"displayName": "Example Session Signing Key",
"keyType": "sha256",
"keyData": "W1HCQPNg7PXlo4WZsGM5h5oZ3M2CaAkUMZ6AEzdLeaY=",
"validityStart": "2023-03-01T00:00:00.000Z",
"validityEnd": "2024-03-01T00:00:00.000Z"
}'
要发出特定请求,您通常需要包括以下字段和参数: 输入以下字段和参数:
姓名 | 类型 | 必需的 | 描述 |
---|---|---|---|
sessionSigningKeyId | String(path) | 是的 | 会话签名密钥的 ID,字符串长度不超过 255 个字符。重要提示:我们强烈建议使用您的CDNetworks 帐户作为 sessionSigningKeyId,以防止任何 ID 冲突或失败。 |
Authorization | Bearer Authentication (header) | 是的 | step1中获取的访问令牌。 |
Content-Type | String (header) | 是的 | application/json |
并确保在请求正文中包含相关字段:
姓名 | 类型 | 必需的 | 描述 |
---|---|---|---|
id | string (255) | 是的 | 会话签名密钥的唯一标识符。请注意,该id应与请求路径中的sessionSigningKeyId相同。 |
displayName | string (255) | 不 | 键的显示名称。如果未指定,密钥将显示为“默认”。 |
keyType | string | 是的 | 支持以下密钥类型:- sha256 : HS256 算法- rsa2048 : RSA-2048 公钥- rsa4096 : RSA-4096 公钥 |
keyData | string | 是的 | 密钥数据。- keyType sha256 :经过 base64 编码的 32 字节密钥,用于使用 HS256 算法对会话令牌进行签名。- keyType rsa2048和rsa4096 :用于对会话令牌进行签名的密钥RS256 或 RS512 算法。 |
validityStart | datetime(ISO8601) | 是的 | 指示密钥何时生效的时间戳。 例如:2023-01-01T00:00:00Z |
validityEnd | datetime(ISO8601) | 是的 | 指示密钥何时不再有效的时间戳。例如:2023-12-31T23:59:59Z |
在您的请求发送成功后,您的会话签名密钥将被接受并在 Irdeo Control 中注册,用于签名和验证您的会话令牌。
如步骤 2 中所述,为了验证身份,您必须包含一个“会话令牌”作为许可证获取 URL 的一部分。为成功通过身份验证的客户端授予对许可证获取的访问权限,但不匹配的会话令牌将阻止对许可证的访问。
在 Irdeto Control 中,会话令牌被接受为签名的 JWT (RFC 7519),它由三部分组成:标头、有效负载和签名。
base64UrlEncode( HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), your signing key) )
关于“权利政策”
权利政策规定了授予内容访问权限的条款和条件,例如:
– 权利何时何地有效
– 消费者的客户端设备/播放器应用程序必须满足哪些安全要求
– 消费者允许多少个并发流
虽然一个权利只能有一个权利策略,但同一个权利策略可以强加于多个权利。
以下是会话令牌的示例值:
Header
{
"alg": "HS256",
"typ": "JWT",
"kid": "testkey0412"
}
Payload
{
"jti": "VbY_HmmLmyut8geag52f11KiCnZ8ZzFcYtiB3H3jIbw=",
"sub": "_authenticated",
"aid": "wangsuusa",
"ent": [
{
"epid": "anonymous-entitlement-policy",
"bid": "linxf"
}
],
"iat": 1681296770,
"exp": 1682851970,
"iss": "IrdetoControlHandsOn"
}
有许多在线 JWT 生成器可用于轻松创建 JWT 令牌。下面的屏幕截图演示了如何使用可从https://jwt.io/访问的在线工具生成会话令牌。
要使用它,请确保:
在右侧输入标头和负载后,您将在左侧框中收到生成的 JWT 令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg
在前面的步骤中生成会话令牌后,最后一步是创建许可证获取 URL。许可证获取 URL 的格式将取决于所使用的 DRM 系统。以下是 PlayReady、FairPlay Streaming 和 Widevine 的标准 URL:
网址
许可证获取 URL 将根据使用的 DRM 系统而有所不同:
contentId
参数“contentId”表示您的内容ID,它是通过您的域名、应用程序名称和流名称的MD5 值计算得出的。例如,如果您的流位于https://drmtest-pull.cdnetworks.com/live/drmtest.mpd ,则相应的内容 ID 为:
MD5(drmtest-pull.cdnetworks.com/live/drmtest)=d8c1d35c93df672a61c735487a145064
ls_session
“ls_session”是第 3 步中的会话令牌。
获得 URL、contentId 和 ls_session 后,将它们连接起来形成许可证获取 URL。
例如,这是 Widevine 的许可证获取 URL:
https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?contentId=d8c1d35c93df672a61c735487a145064?ls_session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg
要测试 Widevine 和 PlayReady 的播放,您需要一个测试播放器、一个 MPEG-DASH 播放 URL 和一个许可证获取 URL。这里我们使用Bitmovin演示播放器进行测试: https://bitmovin.com/demos/stream-test 。
在播放过程中,加密内容加载到播放器后会自动生成许可证请求。只有在播放器成功获得所需的许可证后,播放才会开始。
我们强烈建议在 Chrome 上测试 Widevine,在 Microsoft Edge 上测试 PlayReady。