在 WordPress 里播放 Steam 官方 Trailer,我为什么选择 DASH + dash.js
很多人看到 Steam 商店页的视频,会下意识觉得:
“这不就是个视频吗?iframe 一下不就完了?”
如果你真的动手试过,就会发现 Steam 官方视频几乎是 WordPress 场景里最难处理的一类素材之一。
这篇文章记录的是我在开发 Steam DASH Trailer Embed 插件时的一些技术取舍,希望能给有类似需求的开发者一个参考。
先说结论:Steam 的官方 Trailer 并不提供 iframe 嵌入能力。
视频资源在 steamstatic.com
使用 MPEG-DASH
资源以 .m4s 分段形式存在
通过 .mpd 文件描述播放逻辑
前端播放器由 Steam 自己控制
在正式写插件前,我看过不少实现方式,大概可以分为三类:
❌ 侵入性强
❌ 版权边界模糊
❌ 服务器成本高
❌ 插件审核基本必死
把 Steam 视频“交给别人处理”,再 iframe 回来。
❌ 不稳定
❌ CDN 不可控
❌ 插件依赖外部服务
❌ 一旦对方改接口,站点直接挂
输入:用户提供任意一个 .m4s URL
转换:从 dash_av1 推导出 dash_h264.mpd
播放:使用 dash.js 绑定 <video>
dash.js 是 MPEG-DASH 官方参考实现:
开源
社区活跃
支持 H.264 / AV1
浏览器兼容性好
只在 shortcode 触发时 enqueue
不做全局加载、不污染页面
wp_enqueue_script(
'steam-dash-js',
plugin_dir_url(__FILE__) . 'dash.all.min.js',
array(),
'4.7.4',
true
);
五、为什么不用 inline <script> 拼 JS
直接 echo <script>
JS 拼字符串
不可控变量注入
wp_add_inline_script(
'steam-dash-js',
sprintf(
'document.addEventListener("DOMContentLoaded", function(){
var video = document.getElementById(%s);
if (video && window.dashjs) {
dashjs.MediaPlayer().create().initialize(video, %s, false);
}
});',
wp_json_encode($player_id),
wp_json_encode($url)
)
);
变量可控
编码安全
符合 WP Coding Standards
插件审核不会卡你
六、为什么 Gutenberg Block 最终只输出 Shortcode
dash.js 在编辑器里加载 = 卡
Block 切换时播放器状态不可控
文章未发布就请求外部视频,不优雅
dash.all.min.js 接近 1MB,这是很多人担心的点。
一个单文件、官方库、按需 enqueue的方案反而更“安全”。
❌ 下载按钮
❌ 自动嗅探
❌ 批量解析
❌ 后台视频列表
❌ 内容抓取
“我已经有一个合法公开视频链接,只是想在 WordPress 里正常播放它。”
插件主文件
Gutenberg Block
TinyMCE 插件
dash.js 集成方式
它只是把 “该用前端解决的问题,用前端解决”,
并且在 WordPress 插件语境下,尽量不越界。
评论区
共 1 条评论热门最新