You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询Safari与IE浏览器中DRM内容的Encrypted事件替代监听事件

针对Safari/IE浏览器识别DRM保护导致播放停止的事件监听方案

嘿,这个跨浏览器DRM事件的问题我之前踩过不少坑!Chrome这类基于Chromium的浏览器用encrypted事件没问题,但Safari和IE确实有自己的一套事件体系,下面分情况给你讲清楚:

Safari(含macOS/iOS)

Safari采用FairPlay DRM,它没有实现标准的encrypted事件,取而代之的是**webkitneedkey事件**——当播放器检测到受DRM保护的内容、需要创建密钥会话时,就会触发这个事件,这和Chrome里encrypted的触发时机基本一致。

如果DRM密钥请求失败或者验证不通过,还可以监听**webkitkeyerror事件**,这个事件会明确告诉你DRM相关的错误,能直接关联到播放停止的原因。

给你个简单的代码示例:

const video = document.getElementById('your-video-element');

// 监听DRM密钥需求事件
video.addEventListener('webkitneedkey', (event) => {
  console.log('Safari检测到DRM保护内容,需要请求密钥');
  // 这里启动FairPlay会话创建、密钥请求逻辑
});

// 监听DRM错误事件
video.addEventListener('webkitkeyerror', (event) => {
  console.error('Safari DRM密钥处理失败,播放停止');
  // 处理DRM错误导致的播放停止
});

IE浏览器

IE(主要是IE11及支持PlayReady的版本)使用PlayReady DRM,对应的事件是**msneedkey**——触发时机和Chrome的encrypted、Safari的webkitneedkey一致,都是在识别到DRM内容需要密钥时触发。

同样,DRM错误可以监听**mskeyerror事件**来捕获,以此判断播放停止是否由DRM问题导致。

代码示例:

const video = document.getElementById('your-video-element');

video.addEventListener('msneedkey', (event) => {
  console.log('IE检测到DRM保护内容,需要请求密钥');
  // 启动PlayReady会话创建、密钥请求逻辑
});

video.addEventListener('mskeyerror', (event) => {
  console.error('IE DRM密钥处理失败,播放停止');
  // 处理DRM错误
});

额外提示

除了上述DRM专属事件,你还可以结合视频元素的error事件做兜底判断:当播放停止时,检查video.error的详细信息,比如Safari中MediaErrorcodemessage,或者IE中对应的错误码,来进一步确认是不是DRM相关的问题(比如密钥无效、不支持的DRM方案等)。

内容的提问来源于stack exchange,提问作者kadina

火山引擎 最新活动