功能介绍
数字版权管理(DRM,Digital Rights Management)是通过加密、授权验证等技术手段保护数字内容版权的系统。其主要功能包括:
内容加密 :对音视频等数字内容进行加密处理,防止非法传播。
权限控制 :通过许可证管理实现播放次数、设备绑定等精细化权限控制。
安全传输 :保障内容在分发过程中的数据完整性。
媒体处理(MPS)提供基于 Widevine、FairPlay 和 PlayReady 等 DRM 加密协议的视频点播加密服务,通过标准化加密技术与第三方密钥管理系统(如华曦达、DRMtoday 等)深度集成,实现内容加密与密钥管理的解耦,全方位保障用户内容安全。媒体处理提供的 DRM 加密服务聚焦于内容安全处理,而密钥生成、存储、分发及许可证管理等则是由第三方 DRM 服务厂商提供。
本文以 DRMtoday 厂商为例介绍媒体处理 DRM 加密服务接入流程。
接入流程
准备工作
首先需要开通和配置第三方 DRM 厂商服务,这里以 DRMtoday 厂商为例。
步骤一:注册服务
1. 我们进入 DRMtoday 厂商官方网站。DRMtoday 厂商支持注册免费试用,也可以参考官网说明付费购买商用服务。 2. 这里我们以免费试用为例,单击页面中的 Get your FREE trial today 进入注册。
3. 使用企业邮箱注册,注册成功后需要创建组织,组织创建完成后控制台会变成以下页面:
步骤二:配置服务
(1)配置 API 账号
1. 选择左边栏的 Members/Users。
2. 然后单击 Add API account,选项可以根据需要勾选,确认无误后单击 Add member。
注意:
保存成功后会弹出密码信息,用户需要保存好密码,后续会用到。
(2)配置 Fairplay 证书
选择左边栏 DRM settings,用户将 FairPlay 的证书信息填在对应输入框中,再单击 Save Settings 即可。
(3)配置密钥 seed
1. 选择左边栏 Key seeds。
2. 单击 Add seed,可以继续单击 Random 生成随机的 seed。注意需要生成两个 seed,一个为密钥(Key)seed,一个为 IV seed。
(4)配置 CPIX
说明:
由于媒体处理服务后台通过 CPIX 协议与 DRM 厂商进行交互获取密钥信息,因此这里需要配置 CPIX。 1. 选择左边栏 Ingest settings。
2. 单击 Add CPIX config,这里的 Key seed 和 Initialization vector (IV) seed 就是我们在上述(3)中配置的信息。Stream type mapping 和下方4个选项可以根据业务需求勾选合适的密钥生成规则。
(5)配置证书鉴权
选择左边栏 License delivery authorization,用户可以根据业务需求选择合适的证书鉴权方式。
步骤三:生成密钥请求 URL
为了让媒体处理服务后台可以拿到密钥信息,用户需要配置密钥请求 URL。媒体处理服务后台将 CPIX 请求发送给 DRM 厂商服务,DRM 厂商鉴权请求通过后会将相应的密钥信息再返回给媒体处理服务后台。返回的密钥信息同样是 CPIX,媒体处理服务后台解析出密钥信息后对媒体源进行加密处理。具体生成密钥请求 URL 的方法请参考 DRMtoday 官方说明。生成密钥请求 URL 的脚本参考实现如下: #!/bin/bash
# First request to get ticket
TICKET_RESPONSE=$(curl 'https://auth.drmtoday.com/cas/v1/tickets' \\
-d "username=<API account>&password=<API account password>" \\
-s -D -)
# Extract location header if status is 201
if echo "$TICKET_RESPONSE" | grep -q "HTTP.*201"; then
TICKET_URL=$(echo "$TICKET_RESPONSE" | grep -i "Location:" | cut -d' ' -f2 | tr -d '\\r')
# Second request using the ticket URL
TICKET=$(curl "$TICKET_URL" \\
-d 'service=https://fe.drmtoday.com/frontend/cpix/v1/<Organization UUID>/ingest/<CPIX ID>')
else
echo "Failed to get ticket. Status code was not 201"
echo "$TICKET_RESPONSE"
exit 1
fi
# Concatenate the service URL with the ticket
SERVICE_URL="https://fe.drmtoday.com/frontend/cpix/v1/<Organization UUID>/ingest/<CPIX ID>?ticket=$TICKET"
echo $SERVICE_URL
(1)API account
选择左边栏的 Members/Users,脚本中的 API account 就是在步骤二中配置的 API 账号,API account password 就是对应的密码。
(2)Organization UUID
选择左边栏的 API endpoints,页面右上角显示的便是 Organization UUID。
(3)CPIX ID
选择左边栏的 Ingest settings,可以看到步骤二中创建的 CPIX 信息,CPIX config 的 ID 便是脚本中需要的 CPIX ID。
上述脚本信息准确配置后,发起请求后可以拿到所需要的密钥请求URL。
注意:
密钥请求 URL 有过期时间,过期后需要重新生成。
通过 API 发起加密任务
对 URL 视频链接 或 COS 中的媒体文件发起处理任务,可参见 API 文档 发起媒体处理。 POST / HTTP/1.1
Host: mps.tencentcloudapi.com
Content-Type: application/json
X-TC-Action: ProcessMedia
{
"InputInfo": {
"Type": "URL",
"UrlInputInfo": {
"Url": "https://test-<appid>.cos.ap-nanjing.myqcloud.com/mps_input/test.mp4"
}
},
"OutputStorage": {
"Type": "COS",
"CosOutputStorage": {
"Region": "ap-nanjing",
"Bucket": "test-<appid>"
}
},
"OutputDir": "/mps_output/drm/",
"MediaProcessTask": {
"AdaptiveDynamicStreamingTaskSet": [
{
"Definition": <definition id>,
"DrmInfo": {
"Type": "widevine",
"SpekeDrm": {
"ResourceId": "test123",
"KeyServerUrl": "<DRM key server url>",
"Vector": "<IV>",
"EncryptionMethod": "cbcs",
"EncryptionPreset": "preset0"
}
}
}
]
},
"TaskNotifyConfig": {
"NotifyType": "URL",
"NotifyUrl": "<notify url>"
}
}
响应示例:
{
"Response": {
"TaskId": "24000035-WorkflowTask-cf405e365e75efb2a7bfdef514cc17dbtt195964",
"RequestId": "a7ba06b6-6810-4343-b55d-3afcc3dac64c"
}
}
示例说明:TaskId 是唯一任务标记,可用于查询和管理任务。
Type
加密类型,可填的值包括:
simpleaes:AES-128 加密,只能用于 HLS,切片格式支持 ts 和 mp4;只能使用切片模式,不能使用 singlefile 模式。
fairplay:只能用于 HLS,切片格式只能是 mp4 可以使用切片模式或 singlefile 模式。
widevine:可以用于 HLS 和 DASH,切片格式只能是 mp4(输出 HLS,可以使用切片模式或 singlefile 模式;输出 DASH,只能 singlefile 模式)。
playready:可以用于 HLS 和 DASH,切片格式只能是 mp4(输出 HLS,可以使用切片模式或 singlefile 模式;输出 DASH,只能 singlefile 模式)。
SpekeDrm
(1)ResourceId
资源标记, 支持1-128个字符的数字、字母、下划线(_)、中划线(-),ResourceId 可以理解为一组密钥信息的 ID,一组密钥信息可以用于加密多个不同的媒体流。我们可以在 DRMtoday 的控制台上看到我们创建的所有 ResourceId。
(2)KeyServerUrl
密钥请求URL,这个就是在准备工作-步骤三中创建的。
注意:
不同 DRM 厂商对子流的数量限制不一样,如 pallycon 限制不能超过5条子流,DRMtoday 厂商最多仅支持9条子流加密。
(3)Vector
加密初始化向量(32字节字符串)。
(4)EncryptionMethod
加密方式,FairPlay 默认 cbcs,PlayReady,Widevine 默认 cenc。
不同 DRM 标准支持的加密方式存在差异:
cbcs:PlayReady,Widevine,FairPlay 支持;
cenc:PlayReady,Widevine支持。
(5)EncryptionPreset
子流加密规则,默认 preset0。
preset0:全部子流使用同一个key加密;
preset1:每个子流使用不同的key加密。
播放验证
1. 进入后单击 Try your stream。
2. 填写相关配置信息。
2.1 首先是 Content URL 框中输入待播放的流 URL,如果是 HLS 流则 Type 选择 HLS,如果是 DASH 流则选择 MPEG-DASH。
2.2 然后配置客户鉴权信息,DRM Environment 选择 DRMtoday PRODUCTION,Merchant 为 API endpoints 中的 Organization UUID,User ID 为 Members/Users 中的 Members ID,Session ID 可以填任意值,Asset ID 为发起加密任务时候填的 ResourceId。播放器配置完后单击 Load 便可以正常播放加密流。