如何检测Chrome中用户是否禁用了受保护内容ID标识符?
检测Chrome中DRM保护内容设置的方法
问题背景
需要检测Chrome中保护内容媒体设置(禁用该设置后,Chrome允许对DRM保护内容进行屏幕捕获),尝试过相关解决方案但未成功,当前使用的代码如下:
var config = [ { initDataTypes: ["cenc"], audioCapabilities: [ { contentType: 'audio/mp4;codecs="mp4a.40.2"', }, ], videoCapabilities: [ { contentType: 'video/mp4;codecs="avc1.640016"', robustness: "SW_SECURE_CRYPTO", }, ], }, ]; navigator .requestMediaKeySystemAccess("com.widevine.alpha", config) .then((k) => { console.log(k); console.log(k.getConfiguration()); }) .catch(console.log);
可行检测方案
1. 结合媒体播放与DRM权限验证
单纯调用requestMediaKeySystemAccess无法直接检测该设置,因为即使禁用保护内容,Widevine仍可能返回可用状态。需结合实际DRM媒体播放尝试,通过捕获播放错误判断:
async function checkProtectedContentSetting() { try { // 基础DRM支持验证 const config = [ { initDataTypes: ["cenc"], audioCapabilities: [{ contentType: 'audio/mp4;codecs="mp4a.40.2"' }], videoCapabilities: [{ contentType: 'video/mp4;codecs="avc1.640016"' }] } ]; await navigator.requestMediaKeySystemAccess("com.widevine.alpha", config); // 创建临时视频元素加载DRM测试媒体 const video = document.createElement('video'); video.src = "你的DRM测试媒体地址"; // 替换为真实的DRM保护媒体URL video.preload = 'auto'; await new Promise((resolve, reject) => { video.onloadedmetadata = resolve; video.onerror = reject; }); // 尝试播放并检测DRM激活状态 await video.play(); const isProtected = video.mediaKeys !== null; video.remove(); return isProtected; } catch (err) { // 捕获DRM相关错误,大概率是设置禁用导致无法加载受保护内容 console.error(err); return false; } } // 执行检测 checkProtectedContentSetting().then(result => { console.log("保护内容设置状态:", result ? "已启用" : "已禁用"); });
2. 利用MediaCapabilities API辅助判断
通过检测硬件级DRM解码能力,间接判断保护内容设置是否启用:
async function checkDRMProtectionStatus() { const mediaConfig = { type: 'media-source', audio: { contentType: 'audio/mp4;codecs="mp4a.40.2"', protected: { type: 'com.widevine.alpha', robustness: 'HW_SECURE_ALL' } }, video: { contentType: 'video/mp4;codecs="avc1.640016"', protected: { type: 'com.widevine.alpha', robustness: 'HW_SECURE_ALL' } } }; const result = await navigator.mediaCapabilities.decodingInfo(mediaConfig); // 硬件级DRM不可用则大概率是设置被禁用 return result.supported && result.powerEfficient; }
关键说明
- Chrome禁用保护内容设置后,会限制DRM硬件安全路径,但仍允许软件解码,因此必须结合实际媒体播放测试才能准确判断,单纯DRM API验证无法区分设置状态。
- 测试时需使用真实的DRM保护媒体片段,否则无法触发权限校验逻辑。
内容的提问来源于stack exchange,提问作者Prashant Mohta
相关产品推荐
相关产品推荐

