disableRemotePlayback 是布尔属性,须原样写在 video 标签中:;仅 Chromium 系浏览器有效,Safari 弱支持,Firefox 完全不识别;它仅隐藏 UI 投屏选项,不阻止系统级投屏或录屏,非安全机制。

disableRemotePlayback 属性怎么写才生效
它不是开关,而是提示信号;写错就等于没写。必须作为布尔属性原样出现在 <video></video> 标签里,不带等号、不加引号、不赋值:
-
<video controls disableremoteplayback></video>✅ 正确 -
<video controls disableremoteplayback="true"></video>❌ 浏览器直接忽略 -
<video controls disableremoteplayback="disabled"></video>❌ 同样无效
动态 JS 设置(如 video.disableRemotePlayback = true)在 Chrome/Edge 中基本不触发 UI 变化,推荐初始化时就声明。
哪些浏览器真正响应这个属性
别指望“写了就禁用”,实际支持是碎片化的:
- Chrome / Edge(Chromium 内核):右键菜单隐藏 Cast 项,地址栏投屏图标置灰,效果较明显
- Safari(iOS 15.4+ / macOS 12.3+):仅对 AirPlay 图标有弱提示,部分机型仍可强制唤起
- Firefox:完全不识别,设了也白设
- Android WebView / 微信内置浏览器:行为不稳定,X5 内核下常被绕过
注意:即使浏览器响应了,也只是隐藏 UI 元素——用户仍可通过系统级投屏(如 macOS 镜像、Windows 投射到此电脑)把整个页面投出去。
立即学习“前端免费学习笔记(深入)”;
为什么点了投屏按钮还是能投
因为 disableRemotePlayback 不影响三类根本性投屏路径:
- 用户手动点 Chrome 地址栏的 Cast 按钮 → 投的是整个标签页,和 video 标签无关
- 用手机录屏 + 对准电视画面 → 物理盗录,前端无感知
- 抓包拿到
src地址后本地下载 → 必须靠服务端鉴权(Token 时效、IP 绑定、Referer 校验)拦住
换句话说:这个属性只管“别让我视频右键出现投屏选项”,不管“你能不能录我”或“你能不能播我”。把它当成 UI 层面的礼貌提示,不是安全围栏。
真正要防投屏,得组合做这几件事
单靠 HTML 属性远远不够,关键动作在前后端协同:
- 前端监听
webkitbeginfullscreen或enterpictureinpicture事件,检测到即暂停并弹窗警告 - 服务端对每个播放请求校验 JWT Token,且绑定设备指纹(UA + IP + Canvas Hash),单次有效
- 敏感内容走 DRM:Widevine(Android/Chrome)或 FairPlay(Safari/iOS),license server 配置
outputProtection: "HDCP_REQUIRED" - 避免使用
autoplay+play()自动拉流,改用用户点击后才加载真实视频 URL(data-src→src)
最易被忽略的一点:HLS/DASH 分片 URL 如果没做动态 token 签名,攻击者只要打开 Network 面板就能批量下载 ts/chunk,投屏与否已不重要——内容早就落地了。



















