我正在开发一个小型系统,用于通过MSE / EME API在网络上传输受保护的内容。
这是我正在使用的一些工具:
我可以创建.webm文件并使用shaka-packager将它们打包到mpd文件中,以便提供给shaka-player。但是Clear Key section in the Shaka docs后面我必须加密webm文件,需要KeyId
和Key
对。
通过使用webm_crypt,我可以按照this document on 2.2.7创建加密内容,但我不知道如何获取shaka-player DRM系统的密钥对。
答案 0 :(得分:6)
如果您使用的是Clear Key,则可以为播放器配置密钥服务器列表。播放器向密钥服务器发出JSON请求(请求在this format中),密钥服务器提供“许可证” - JSON response containing the Base64-encoded symmetric key and keyId。然后使用该对称密钥来解密内容。
<强>更新强>
要将密钥ID与未受保护的内容密钥关联以使用ClearKey进行调试,请为drm.clearKeys
提供一个JSON元素,其中十六进制编码的keyId(s)作为地图的“关键字”和“值”是十六进制编码的内容加密密钥。
player.configure({
drm: {
clearKeys: {
'deadbeefdeadbeefdeadbeefdeadbeef': '18675309186753091867530918675309',
'02030507011013017019023029031037': '03050701302303204201080425098033'
}
}
});
在加密媒体文件时或在随附的清单文件中将相同的keyId与媒体文件相关联。
Encrypting media file with mp4split:
#!/bin/bash
KID=10000000100010001000100000000001
CEK=3a2a1b68dd2bd9b2eeb25e84c4776668
LAURL="http://playready.directtaps.net/pr/svc/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1"
PSSH=YOUR_PSSH
mp4split --package_mpd -o audio.mp4 \
--iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
--widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
oceans-64k.mp4
mp4split --package_mpd -o video-1.mp4 \
--iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
--widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
oceans-250k.mp4
mp4split --package_mpd -o video-2.mp4 \
--iss.key=${KID}:${CEK} --iss.license_server_url=${LAURL} \
--widevine.key=${KID}:${CEK} --widevine.drm_specific_data=${PSSH} \
oceans-380k.mp4
对于webm_crypt
,文档非常粗略,但我相信已经使用content_id=0123456789ABCDEF
中的-video_options
命令行标记完成了:
foo@bar-linux:~/chromium_code/webm_crypt/webm_crypt$ ./webm_crypt
-i mediafiles/Chrome_44_5sec-chunks_video_only.webm -video true -audio false
-video_options base_file=bear.key,content_id=0123456789012345
-o /home/foo/www/no_crawl/eme/media/Chrome_44_5sec-chunks_video_only-enc_v_0123456789012345.webm