disableremoteplayback仅是html5布尔属性,用于隐藏投屏控件,不触发cdm、不通信license server;真正防投屏需通过eme中outputprotection配置并由license server返回hdcp等策略协同实现。

disableRemotePlayback 不是许可证服务,它不涉及任何 license server 管理。真正需要管理许可证服务的防投屏场景,只出现在启用 DRM(如 Widevine、FairPlay)且明确限制输出路径的播放流程中。
为什么 disableRemotePlayback 和许可证服务完全无关
该属性只是向浏览器发出一个提示信号,告诉它“请不要显示 AirPlay/Chromecast 按钮”,不触发任何密钥交换、不调用 CDM(Content Decryption Module),也不与 license server 通信。Chrome、Edge 会隐藏投屏控件,Safari 可能禁用 AirPlay 菜单项,但这些行为全在客户端本地完成,license server 根本不会收到请求。
-
disableRemotePlayback是纯 HTML 布尔属性,写法必须是disableRemotePlayback(无等号、无值),写成disableRemotePlayback="true"就失效 - 它对 HLS/DASH/MP4 等任何格式都生效,但和是否加密、是否启用 DRM 完全解耦
- 即使你已部署 Widevine license server,只要没在
EME流程中配置outputProtection,投屏仍可能成功
真正要管 license server 的防投屏:outputProtection 配置
当使用 EME(Encrypted Media Extensions)加载 DRM 内容时,才能通过 MediaKeySession 的 generateRequest() 向 license server 请求带策略的许可证。关键参数是 outputProtection,它才是 license server 实际执行的策略依据。
- Widevine license policy 中需显式设置
output_protection字段,例如:{"hdcp_enforcement": "required", "hdcp_version": "hdcp2_2"} - FairPlay license response(ASR)需包含
output-protection键,值为required或preferred - 浏览器在建立
MediaKeys后,会将该策略传给 CDM;CDM 在投屏协商阶段检查接收端是否满足 HDCP 要求,不满足则拒绝解密或静音输出
注意:outputProtection 是否生效,取决于终端设备能力(如 Chromecast Ultra 支持 HDCP 2.2,老款不支持)、操作系统版本(iOS/macOS 对 AirPlay 输出策略控制更严格)、以及 license server 是否真的返回了对应策略——光在前端 JS 里写 session.setServerCertificate() 并不能强制 enforce。
license server 端常见配置疏漏点
很多团队以为配好 DRM 就自动防投屏,结果上线后发现 Chromecast 仍可播放。问题往往出在 license server 的策略未正确下发或被忽略:
- Widevine 控制台里勾选了 “Require HDCP” 但没选中具体版本(如 hdcp2_2),导致旧设备 fallback 成非保护模式
- FairPlay 的 ASR 响应头缺少
Content-Type: application/octet-stream,或响应体不是二进制封装格式,Safari 直接忽略output-protection - license server 对同一视频 ID 多次返回不同策略(如首次返回
optional,后续返回required),CDM 缓存首条响应,不再重新请求 - 没在
initData(如 PSSH box)中声明所需输出保护类型,license server 无法感知客户端诉求,只能按默认策略响应
最终效果取决于三者协同:前端 EME 调用是否携带 outputProtection 需求、license server 是否返回匹配策略、终端设备是否真实支持并执行该策略。任何一环断开,license server 就只是个摆设——它管不了 disableRemotePlayback,也拦不住用户用手机拍电视画面。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











