disableRemotePlayback属性仅在视频能正常播放的前提下起效,MP4(H.264+AAC)是唯一跨平台稳妥格式;WebM(VP9)、H.265、FLV等因浏览器不支持或解码失败导致属性无效。

HTML 视频防投屏本身不依赖格式,而是靠 disableRemotePlayback 属性起作用;但该属性能否生效,取决于视频是否能正常播放——所以格式兼容性是前提。
哪些格式能用 disableRemotePlayback 有效禁用 AirPlay/Chromecast
只要视频能播,这个属性就“有机会”起效。真正决定能不能播的,是编码+容器组合:
- ✅
video/mp4; codecs="avc1.42E01E, mp4a.40.2"(H.264 + AAC):全平台可播,disableRemotePlayback在 Chrome、Edge、iOS 15.4+ Safari 上表现稳定 - ⚠️
video/webm; codecs="vp9, opus":Chrome/Firefox 可播,但 Safari 不支持 VP9,设了disableRemotePlayback也白搭(根本播不了) - ❌
video/mp4; codecs="hev1.1.2.L153.B0"(H.265):仅 Safari 14+ 支持,Chrome/Firefox 不认,无法跨浏览器启用防投屏 - ❌ FLV、AVI、MOV(非标准 MP4 封装)、RMVB 等:浏览器原生不支持,连播放都失败,属性自然无效
disableRemotePlayback 的写法和常见失效原因
它不是开关,而是一个提示信号,写错就彻底失效:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- ✅ 正确写法:
<video controls disableremoteplayback><source src="vid.mp4" type="video/mp4"></source></video>(布尔属性,不带等号、不赋值) - ❌ 错误写法:
disableRemotePlayback="true"、disableRemotePlayback="disabled"、disableRemotePlayback=""—— 浏览器会忽略该属性 - ❌ 动态设置晚了:
video.setAttribute('disableRemotePlayback', '');在loadedmetadata之后才加,部分 iOS 版本不响应 - ❌ 没配
muted+playsinline:iOS 下视频根本进不了内联播放状态,连触发disableRemotePlayback的前提都没有
为什么 MP4(H.264+AAC)是唯一稳妥选择
不是因为它“自带防投屏”,而是它让 disableRemotePlayback 有执行基础:
立即学习“前端免费学习笔记(深入)”;
- iOS Safari 要求
playsinline+muted+ H.264 MP4 才允许内联播放,否则直接跳转全屏原生播放器——此时disableRemotePlayback已无意义 - Android WebView 和微信 X5 内核对 WebM/AV1 支持极差,很多机型解码失败,黑屏报
VIDEO_ERROR_DECODE,属性根本没机会参与流程 - FFmpeg 转码时若漏掉
-movflags +faststart,iOS 会卡在 loading 状态,canplay都不触发,更别说响应投屏禁用逻辑 - 用
.mov或.m4v后缀即使内容相同,Safari 可能因 MIME 推断失败拒绝加载,导致整个 video 元素不可用
真正难的不是加个属性,而是让视频在所有目标设备上稳定进入可控制的播放状态——格式选错,后面所有策略都悬在半空。


















