附件:视频卡片显示画面缩略图(迷你 video 预览,只拉视频头部)

视频卡此前只有 🎬 图标。现在卡片里放一个静音迷你 <video preload="metadata">:
浏览器只通过 media/show 拉视频头部几个 Range 区间就显示第一帧画面,
充当缩略图;点击行为不变(仍进灯箱播放)。老视频无需任何处理,
视频解不出来时 video 透明,露出下面的类型图标。

为什么不在服务端用 ffmpeg 抽帧:线上 FPM 的 open_basedir 只允许
/www/wwwroot/trip.yangyq.net/:/tmp/,且 disable_functions 禁了 exec()
(注意 CLI 与 FPM 的 php.ini 不同,只查 CLI 会得出错误结论)——
放开这两项需要 root 且弱化安全配置。迷你预览方案零后端、零数据、全兼容。

已验证:本地全链 11 步全绿(渲染检查 321 项);远端 e2e 324 项 0 失败
(夹具改用服务器静态 ffmpeg 生成真实编码视频);部署后双 PHP 渲染逐字节一致。
This commit is contained in:
2026-09-23 18:33:18 +08:00
parent a24099fc53
commit 0e30495f14
3 changed files with 27 additions and 1 deletions
+6
View File
@@ -155,7 +155,13 @@ $iconByMime = [
<?php if ($isImg): ?>
<img src="<?= e($url) ?>" alt="<?= e($name) ?>" loading="lazy">
<?php else: ?>
<?php /* 视频卡放静音迷你 <video preload="metadata"> 当缩略图:
浏览器只拉头部就显示第一帧;加载不出来时透明露出图标 */ ?>
<div class="attachment-icon"><?= $icon ?></div>
<?php if ($kind === 'video'): ?>
<video class="video-thumb video-thumb-mini" src="<?= e($url) ?>"
muted preload="metadata" playsinline tabindex="-1"></video>
<?php endif; ?>
<?php endif; ?>
</a>