我想使用 video.js 来显示受 DRM 保护的直播,该直播可在主要浏览器中使用。我有一个 Fairplay 直播(适用于 Apple 设备)和一个 Widevine/Playready 直播(适用于其他设备)。我已经确认我的直播可以在适当的平台上作为独立播放器运行,但我不确定采取什么方法来动态地为 Apple 设备提供 Fairplay 直播/许可证,并为其他人提供 MPEG-DASH 流/许可证.
https://github.com/videojs/videojs-contrib-eme/ 中的 detectSupportedCDMs() 文档说“小心使用这个”,我已经看到它失败的注释?
这一切似乎都是the 使用 video.js 进行 DRM 的用例,但我找不到任何示例代码。还有人设置过吗?
if (videojs.browser.IS_ANY_SAFARI){
// all versions of safari on all platforms require Fairplay DRM
player.src(fairplaysrc);
} else if(videojs.browser.IS_IOS && videojs.browser.IS_CHROMIUM) {
// on iPhone/iPad Chrome uses Fairplay but doesn't use the Safari engine. Firefox and Edge use Widevine/Playready it seems (?).
player.src(fairplaysrc);
} else {
player.src(dashsrc);
}
上面的解决方案花了很多时间才弄清楚。这里是使用 EZDRM 直播设置来组合 Widevine/Playready MPEG-DASH 和 HLS Fairplay 的完整代码:
<video-js id='vidjslivestream' controls preload='auto' class='vjs-16-9 vjs-big-play-centered' ></video-js>
<link rel=stylesheet media='all' type='text/css' href='https://vjs.zencdn.net/8.6.1/video-js.css'/><style> .vjs-poster{ background-size: 100% !important; } </style><script src='https://vjs.zencdn.net/8.6.1/video.min.js'></script>
<script src='https://cdn.jsdelivr.net/npm/[email protected]/dist/videojs-contrib-eme.min.js'></script>
<script type='text/javascript'>
(function() {
var vid = document.getElementById('vidjslivestream');
var player = videojs(vid);
player.eme();
player.on('ready', function() {
var dashsrc = {
src: 'REDACTED.mpd',
type: 'application/dash+xml',
keySystems: {
'com.widevine.alpha': 'https://widevine-dash.ezdrm.com/widevine-php/widevine-foreignkey.php?REDACTED',
'com.microsoft.playready': 'https://playready.ezdrm.com/cency/preauth.aspx?REDACTED'
}
};
var fairplaysrc = {
src: 'REDACTED.m3u8',
type: 'application/x-mpegURL',
keySystems: {
'com.apple.fps.1_0': {
certificateUri: 'REDACTED/fairplay.cer',
licenseUri: 'https://fps.ezdrm.com/api/licenses/auth?REDACTED',
options: {
persistentState: 'required'
}
}
}
};
if (videojs.browser.IS_ANY_SAFARI){
player.src(fairplaysrc);
} else if(videojs.browser.IS_IOS && videojs.browser.IS_CHROMIUM) {
player.src(fairplaysrc);
} else {
player.src(dashsrc);
}
});
})();
</script>