更新记录
1.0.9(2026-11-10)
- 修复 HarmonyOS 最低 API 13 的项目运行时,视频缩略图原生依赖要求 API 20 而导致构建失败的问题;保持原有调用方式,升级后重新构建鸿蒙 App。
- 优化说明文档,补齐“作者系列 UTS 插件”清单及插件市场链接,便于按能力查找。
1.0.8(2026-11-05)
- 新增 HarmonyOS 本地及网络视频信息、单帧、多时间点、批量、智能封面和时间轴能力,支持缓存、进度与任务取消。
- 新增 HarmonyOS 显式自定义沙箱目录的同名图片覆盖尝试,实际可用性取决于系统文件接口和权限。
- 新增 HarmonyOS 显式自定义目录的非覆盖直出尝试,同名自动换名,系统不支持时保留安全回退。
- 新增 HarmonyOS 默认缓存目录固定名称的覆盖尝试,旧文件身份不明或同名冲突时保留原文件。
- 修复 HarmonyOS 两种宿主用户数据路径转换不一致,以及缓存清理后统计计数未重置的问题。
- 修复 HarmonyOS 时间轴覆盖参数误报不支持、缓存结果在回调前提前释放、暂存关闭失败时的清理处理及输出失败状态提示不完整的问题。
- 修复 iOS 单帧最大宽高设置未生效的问题。
- 修复 iOS 活动任务与缓存清理、下载完成时序冲突,以及进度回调修改在途批量参数的问题。
- 修复 Web 时间轴输出类型缓存、透明背景颜色、缓存筛选及单帧时间和时长字段问题。
- 修复 HarmonyOS 时间轴已交付图片但临时目录清理未确认时的状态提示。
- 优化 HarmonyOS 自定义目录缓存复用,符合条件时直接交付到指定目录并保留安全回退。
- 统一 uni-app 和 uni-app x 示例的操作顺序、状态展示及异步任务处理。
1.0.7(2026-11-04)
- 修复示例页面和辅助模块使用相对引入路径的问题,统一通过
@/uni_modules/引用插件内文件,复制页面到其他目录时无需另行复制辅助代码。
平台兼容性
uni-app(4.84)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | × |
lizhao-video-thumb 帮你从视频中生成封面、多帧预览和时间轴图片。
功能与场景
- 指定时间生成视频列表封面,也可以自动选择画面质量较好的候选帧。
- 为播放进度预览生成时间轴整图及每帧坐标,或一次处理多个时间点、多个视频。
- 按需返回图片路径或 Base64,查询视频信息、复用缓存和取消活动任务。
适用于 uni-app 和 uni-app x;Android、iOS、HarmonyOS 和 Web 的具体限制见文末。视频必须能被当前平台读取并解码。
下载与导入
从插件市场下载并导入 lizhao-video-thumb,在页面中从 @/uni_modules/lizhao-video-thumb 导入需要的方法。完整页面可参考 uni-app 示例 和 uni-app x 示例。
基础使用:生成一张封面
适合在用户选择视频后生成列表封面。将 src 换成选择器返回的可读路径;timeMs 的单位是毫秒。
uni-app:
import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnail({
src: '替换为选择视频返回的可读路径',
timeMs: 1000,
outputType: 'both',
success: (res) => console.log('封面路径', res.imagePath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
uni-app x:
import { getVideoThumbnail, type VideoThumbnailOptions, type VideoThumbnailResult, type VideoThumbnailFail } from '@/uni_modules/lizhao-video-thumb'
const options : VideoThumbnailOptions = {
src: '替换为选择视频返回的可读路径',
timeMs: 1000,
outputType: 'both',
success: (res : VideoThumbnailResult) => { console.log('封面路径', res.imagePath) },
fail: (err : VideoThumbnailFail) => { console.error(err.errCode, err.errMsg) }
}
getVideoThumbnail(options)
下面各业务片段使用 JavaScript 展示调用方式;uni-app x 可像上例一样为参数和回调声明插件导出的对应类型。运行前请替换视频路径、网络地址和任务 ID。
按业务使用
按名称保存封面
需要使用固定文件名更新封面时,可指定可写目录;允许覆盖后,同名文件可能被替换。
import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnail({
src: '替换为可读视频路径',
outputDir: '替换为可写的应用沙箱目录',
fileName: 'cover.jpg',
cachePolicy: 'refresh',
overwrite: true,
success: (res) => console.log(res.imagePath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
自动选择封面
不确定选择哪个时间点时,分析候选画面并返回选中的缩略图与评分。
import { getSmartVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'
getSmartVideoThumbnail({
src: '替换为可读视频路径',
candidateCount: 7,
success: (res) => console.log(res.selectedTimeMs, res.score, res.thumbnail.imagePath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
评分辅助选择,不保证符合主观审美。如果至少有一帧分析成功但质量均较低,会返回其中最高分并设置 fallbackUsed;全部候选解码失败时进入 fail。
候选数量默认 7,归一到 3–20;startRatio 和 endRatio 默认为 0.05 和 0.95,均在 0–1 范围内,开始比例须小于结束比例。
生成时间轴预览
播放器需要拖动预览时,可生成一张整图并根据 frames 中的坐标显示对应画面。
import { getVideoStoryboard } from '@/uni_modules/lizhao-video-thumb'
getVideoStoryboard({
src: '替换为可读视频路径',
frameCount: 12,
columns: 4,
frameWidth: 160,
frameHeight: 90,
fitMode: 'cover',
common: { outputType: 'both', cachePolicy: 'reuse' },
success: (res) => console.log(res.imagePath, res.frames),
fail: (err) => console.error(err.errCode, err.errMsg)
})
frames 中每项包含帧序号、时间与 x、y、width、height,坐标相对于返回整图。startTimeMs / endTimeMs 可限制采样区间。
同一视频生成多张图片
需要展示指定时间点时,使用毫秒数组获取多张结果。
import { getVideoThumbnails } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnails({
src: '替换为可读视频路径',
timesMs: [1000, 3000, 5000],
common: { outputType: 'both' },
success: (res) => console.log('图片数量', res.results.length),
fail: (err) => console.error(err.errCode, err.errMsg)
})
批量处理多个视频
媒体列表需要批量封面时,检查成功和失败数量;部分失败时结果列表只包含成功项。
import { getVideoThumbnailBatch } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnailBatch({
items: [
{ src: '替换为第一个可读视频路径', timeMs: 1000 },
{ src: '替换为第二个可读视频路径', timeMs: 2000 }
],
success: (res) => console.log(res.successCount, res.failCount),
fail: (err) => console.error(err.errCode, err.errMsg)
})
网络视频取帧
视频地址为 HTTP 或 HTTPS 时,需要显式允许网络来源。Web 跨域服务器还需要允许 CORS。
import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnail({
src: 'https://替换为真实地址/video.mp4',
allowNetwork: true,
timeMs: 1000,
success: (res) => console.log(res.imagePath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
读取视频信息
需要展示视频时长和尺寸时,先读取视频信息。路径归一化只识别地址类型,不保证文件可读。
import { getVideoInfo } from '@/uni_modules/lizhao-video-thumb'
getVideoInfo({
src: '替换为可读视频路径',
success: (res) => console.log(res.durationMs, res.width, res.height),
fail: (err) => console.error(err.errCode, err.errMsg)
})
检查输入路径的类型时,可以使用 normalizeVideoPath;检查成功不代表文件一定可读。
import { normalizeVideoPath } from '@/uni_modules/lizhao-video-thumb'
normalizeVideoPath({
src: '替换为可读视频路径',
success: (res) => console.log(res.pathType, res.normalizedPath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
复用与清理缓存
多次请求同一个画面时设置 reuse;页面不再需要缓存时,可按来源和时间条件清理。
import { getVideoThumbnail } from '@/uni_modules/lizhao-video-thumb'
getVideoThumbnail({
src: '替换为可读视频路径',
timeMs: 1000,
cachePolicy: 'reuse',
cacheMaxAgeMs: 86400000,
success: (res) => console.log('是否命中缓存', res.cacheHit),
fail: (err) => console.error(err.errCode, err.errMsg)
})
import { clearThumbnailCache } from '@/uni_modules/lizhao-video-thumb'
clearThumbnailCache({
src: '替换为可读视频路径',
success: (res) => console.log('已清理数量', res.removedCount),
fail: (err) => console.error(err.errCode, err.errMsg)
})
需要展示当前缓存占用时,可单独查询统计。
import { getThumbnailCacheInfo } from '@/uni_modules/lizhao-video-thumb'
getThumbnailCacheInfo({
success: (res) => console.log(res.fileCount, res.totalBytes),
fail: (err) => console.error(err.errCode, err.errMsg)
})
取消活动任务
任务可能持续较长时间时,传入唯一 taskId,再通过相同 ID 请求取消。取消受理后仍应等待原任务的成功或失败回调。
import { getVideoThumbnail, cancelVideoThumbnailTask } from '@/uni_modules/lizhao-video-thumb'
const taskId = '替换为本次唯一任务ID'
getVideoThumbnail({
taskId,
src: '替换为可读视频路径',
success: (res) => console.log(res.imagePath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
// 用户选择取消时调用:
cancelVideoThumbnailTask({ taskId, success: (res) => console.log('已受理', res.accepted) })
单独下载网络视频
需要先下载再由业务使用本地路径时,可在 App 端单独下载。
import { downloadVideoForThumbnail } from '@/uni_modules/lizhao-video-thumb'
downloadVideoForThumbnail({
src: 'https://替换为真实地址/video.mp4',
timeoutMs: 30000,
maxBytes: 104857600,
success: (res) => console.log('下载路径', res.localPath),
fail: (err) => console.error(err.errCode, err.errMsg)
})
查询当前平台能力
根据能力矩阵决定是否向用户展示对应操作。
import { getVideoThumbnailCapabilities } from '@/uni_modules/lizhao-video-thumb'
const capabilities = getVideoThumbnailCapabilities()
console.log('支持时间轴', capabilities.storyboard)
用途速查
| 模块 | 适用业务 | 常用方法 | 使用结果 |
|---|---|---|---|
| 封面 | 指定时间或自动选帧 | getVideoThumbnail、getSmartVideoThumbnail |
图片、时间与评分 |
| 多帧 | 时间轴、多个时间点或多个视频 | getVideoStoryboard、getVideoThumbnails、getVideoThumbnailBatch |
整图坐标、结果列表和批量统计 |
| 视频 | 查询信息、检查来源、下载 | getVideoInfo、normalizeVideoPath、downloadVideoForThumbnail |
视频信息、路径类型或下载路径 |
| 任务与缓存 | 中止活动任务、查看或释放缓存 | cancelVideoThumbnailTask、getThumbnailCacheInfo、clearThumbnailCache |
受理状态、缓存统计或清理数量 |
| 平台 | 决定是否显示某项操作 | getVideoThumbnailCapabilities |
当前平台能力矩阵 |
除能力矩阵同步返回外,各方法通过 success、fail、complete 返回结果;支持进度的方法可传入 progress。活动任务之间的 taskId 必须唯一。
单帧结果中的 imagePath、base64、width、height、timeMs、durationMs 和 cacheHit 可用于展示或记录;请以返回的实际路径为准,日志避免输出完整 Base64。进度包含任务 ID、阶段、百分比及批量序号。
常用配置
| 参数 | 用途 | 默认值或取值 |
|---|---|---|
timeMs |
单帧时间,毫秒 | 0 |
outputType |
选择输出 | App 默认 file,Web 默认 base64;可选 file、base64、both |
format、quality |
图片格式和质量 | jpg、90;格式可选 jpg、png、webp,质量归一到 1–100 |
maxWidth、maxHeight |
限制单帧输出尺寸 | 未设置时不限制;按比例缩放 |
allowNetwork |
允许 HTTP/HTTPS 视频 | 默认 false |
downloadTimeoutMs、maxDownloadBytes |
App 网络取帧的下载限制 | 默认 30000 毫秒、104857600 字节 |
cachePolicy、cacheMaxAgeMs |
重新生成或复用 | 默认 refresh;reuse 可指定缓存年龄,0 表示不按年龄过期 |
outputDir、fileName、overwrite |
App 文件输出 | 未设置时使用平台默认目录和名称;具体限制见平台差异 |
strategy、fixOrientation |
取帧策略与方向 | strategy 可选 nearestSync、previousSync、exact、fast,效果依平台而异;App 默认修正方向 |
多帧、批量、智能封面和时间轴通过 common 传递通用配置。时间轴默认 12 帧、4 列、每格 160×90,支持 cover 和 contain;帧数归一到 2–60,列数归一到 1–帧数,单格宽高归一到 16–1024。App 画布上限为 1600 万像素,Web 为 800 万像素;背景色支持 #RRGGBB 和 #AARRGGBB。
平台差异与注意事项
| 平台或功能 | 使用边界 |
|---|---|
| Android | 本地视频、网络视频和系统授权的 content:// 路径可按设备支持的格式读取;网络下载使用 INTERNET 权限。 |
| iOS | 本地、网络及选择器返回的可读文件路径可用于取帧;不直接读取 content://、ph:// 或 assets-library://。 |
| HarmonyOS | 支持本地/授权文件、网络视频、信息、单帧、多帧、批量、智能封面和时间轴;网络下载使用 INTERNET 权限。_doc/ 与 unifile://usr/ 指向各宿主的用户数据目录,物理位置可能不同;uni-app x 中 _downloads/ 不保证自动转换。单帧文件输出在显式自定义应用沙箱目录且 cachePolicy: 'refresh' 时,可用 overwrite: true 尝试替换同名图片,是否成功取决于系统文件接口和目录权限。默认目录使用固定文件名时也可尝试覆盖;若系统文件接口不支持、旧缓存存在多个同名文件或文件身份无法确认,操作会失败并保留原文件。显式自定义目录的 refresh 非覆盖输出和 reuse 均会尝试交付到指定目录;已有交付文件可在缓存有效时复用,新建时同名会换名且不覆盖已有文件。指定目录与默认缓存目录相同、目录身份无法确认或系统不支持时可能回退到独立子目录。reuse 保留原缓存和一份交付图片,自定义目录的空间由业务管理。时间轴使用不覆盖输出;请始终使用返回的 imagePath。 |
| Web | 使用浏览器视频与 Canvas,跨域视频需 CORS。imagePath 可能是 data URL,不写入本地磁盘;不支持独立下载。浏览器对视频格式和方向的处理决定实际画面。 |
| 小程序 | 当前不支持视频取帧,调用会返回不支持错误。 |
| 格式和策略 | Android 支持 jpg、png、webp;iOS、HarmonyOS 和 Web 将 webp 归一为 jpg。Android 取帧策略与其他平台的系统取帧方式不保证逐帧相同。 |
| Base64 | App 返回的 base64 为图片正文,Web 返回的 base64 可能已含 data: 前缀;展示时先判断前缀,避免重复添加。 |
| 网络 | App 的网络取帧使用 downloadTimeoutMs / maxDownloadBytes;独立下载使用 timeoutMs / maxBytes。Web 直接加载视频,不应用这些下载限制。网络视频信息可能需要先下载,getVideoInfo 不接受任务 ID。 |
| 批量与取消 | 当前批量队列不承诺并行。部分失败只返回成功项,全部失败走失败回调;取消受理不代表底层操作已立即停止。 |
| 缓存 | 默认清理范围及统计方式因平台而异;自定义目录请由业务管理。复用取决于来源及参数,网络来源可能因重新下载而不能命中。清理正在使用的文件前,请先等待相关任务结束。HarmonyOS 任务运行中,请勿通过其他线程或进程移动、替换输出目录、默认缓存目录及其中的文件。 |
可使用 getVideoThumbnailCapabilities() 判断当前平台能力。App 项目需使用包含本版本插件原生能力的安装包或自定义基座。读取网络视频前请确认网络权限与服务端授权;读取本地视频前请确认文件存在并拥有相应访问权限。
缓存清理的 olderThanMs 是毫秒时间戳,表示清理早于该时间的条目,省略或为 0 时不按时间筛选。Web 缓存在当前进程内,并按来源和时间筛选;统计字节数为估算值。Android 主要依据文件名中的来源哈希与修改时间筛选;iOS 对默认缓存根目录的一级条目执行清理,目录统计和删除数量不等同于递归文件大小。HarmonyOS 按受管缓存记录筛选,无法确定来源的旧条目可能导致按来源清理返回不支持。命中与未命中次数为当前进程累计,清理时重置。
错误码
| 错误码 | 说明 |
|---|---|
| 9060001 | 当前平台或请求的操作不支持 |
| 9060002 | 原生上下文不可用 |
| 9060003 | 视频来源或参数无效 |
| 9060004 | 视频路径无法访问 |
| 9060005 | 未开启网络视频 |
| 9060006 | 视频下载失败 |
| 9060007 | 视频解码或信息读取失败 |
| 9060008 | 视频帧提取失败 |
| 9060009 | 输出或缓存写入失败 |
| 9060010 | 操作超时 |
| 9060011 | 任务已取消 |
| 9060012 | 编码或格式不支持 |
| 9060013 | 活动任务 ID 冲突 |
| 9060014 | 时间轴参数无效 |
| 9060015 | 时间轴画布超过安全像素上限 |
遇到 9060009 且提示目标文件状态未确认时,请先检查提示中的输出路径再决定是否重试;提示目标文件已写入时,其他步骤仍可能失败。多帧或批量任务中途结束时,错误信息可能包含已经取得的输出路径。 临时资源清理未确认的提示也可能出现在成功结果的 message 中;请先结束应用再检查提示的临时路径,该路径不是已交付图片。
作者系列 UTS 插件
以下为作者已发布的 UTS 插件,可按能力方向查找。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-alipay-kit |
支付宝授权登录、App 支付与脱敏诊断 | 查看插件 |
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-apple-iap |
苹果内购、交易恢复、订阅管理与服务端验签参考 | 查看插件 |
lizhao-apple-login |
苹果授权登录、凭证状态与撤销监听 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-camera-pro |
原生相机、拍照录像、水印与媒体保存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-dingtalk |
钉钉授权登录、内容分享与回执诊断 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-douyin-kit |
抖音授权登录、内容分享与回执诊断 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-google-login |
Google 授权登录、会话管理与脱敏诊断 | 查看插件 |
lizhao-hce-card |
NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 | 查看插件 |
lizhao-health |
健康数据授权、查询、统计与写入 | 查看插件 |
lizhao-http-server |
本地 HTTP 服务、文件传输与实时通信 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-id-photo |
证件照制作、尺寸换算、换底色与模板换装 | 查看插件 |
lizhao-img-eraser |
图片去水印、局部修复与原生编辑器 | 查看插件 |
lizhao-live-activity |
实时活动、系统胶囊与普通通知降级 | 查看插件 |
lizhao-live-photo |
实况照片选取、展示预览与原件处理 | 查看插件 |
lizhao-map |
高德地图、定位、地点搜索、路线规划与导航 | 查看插件 |
lizhao-meta |
Facebook 登录分享、应用事件与深链 | 查看插件 |
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-notify-pro |
本地通知、点击动作、进度与定时提醒 | 查看插件 |
lizhao-novel-reader |
原生小说阅读、仿真翻页与段落评论 | 查看插件 |
lizhao-office-view |
Office 与 PDF 文件预览、进度与缓存管理 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-play-billing |
Google Play 商品购买、订阅、恢复与确认消耗 | 查看插件 |
lizhao-qq-share |
QQ 授权码登录、QQ 与 QQ 空间分享 | 查看插件 |
lizhao-qrcode |
二维码生成、Logo 与样式配置、批量生成及导出 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-tcp-pro |
TCP 客户端、服务端、多连接与诊断 | 查看插件 |
lizhao-usb-storage |
U 盘、移动硬盘文件浏览、读写与批量复制 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-video-feed |
短视频上下滑、短剧选集与分页加载 | 查看插件 |
lizhao-video-player |
原生视频播放器、清晰度与播放交互 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |
lizhao-wecom |
企业微信授权登录、内容分享与脱敏诊断 | 查看插件 |
lizhao-xhs-share |
小红书图文视频分享与回执诊断 | 查看插件 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 6486
赞赏 5
下载 12759342
赞赏 1959
赞赏
京公网安备:11010802035340号