更新记录
1.0.0(2026-06-27) 下载此版本
初次提交
平台兼容性
uni-app x(4.73)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | 12 | 5.0.0 | - |
laoqianjunzi-vlc
laoqianjunzi-vlc 是一个面向 uni-app x 的 VLC 播放器组件插件,提供统一的组件标签、统一的上下文方法和统一的事件回调入口,用来承载以下视频场景:
- RTSP 实时预览
- HTTP / HTTPS 视频播放
- HLS 流媒体播放
- 截图、录制、全屏、重连
- 音轨 / 字幕轨 / 视频轨切换
- 网络缓存、连接超时、倍速、硬解与 VLC 原始参数调优
文档只描述当前插件目录内已经导出的正式 API、示例页和实际行为,不包含旧插件说明,也不包含旧 API 兼容层。
适用场景
- 监控摄像头、NVR、IPC 的 RTSP 预览
- 局域网或公网视频源的拉流播放
- 需要截图、录像、全屏切换的安防页面
- 需要播放器状态、缓冲进度、连接状态回调的业务页
- 需要对 VLC 参数做精细调优的诊断页或工程页
能力概览
组件层能力
laoqianjunzi-vlc组件统一承载播放器视图src、autoplay、player-options三个属性即可完成基础接入- 统一通过
@event输出播放器事件 - 通过组件
ref直接拿到ILqjVlcViewContext,调用播放、截图、录制、全屏、查询状态等方法
上下文能力
playVideo()、pauseVideo()、resumeVideo()、stopVideo()、replay()seekTo()、fastForward()、fastBackward()setVolume()、mute()、unmute()、setPlaybackRate()startRecording()、stopRecording()、takeSnapshot()openFullscreen()、exitFullscreen()、reconnect()setVlcOptions()、setHardwareAccelerationMode()、setVlcIntOption()、setVlcBooleanOption()、setVlcStringOption()getPlatformCapabilities()、getVideoInfo()、getConfig()、getCurrentTime()、getDuration()等查询方法
权限代理能力
getLqjVlcPermissionAgent()返回统一权限代理requestRuntimePermissions()主动触发运行时权限申请setListener()接收权限结果和运行状态事件
平台支持
| 平台 | 状态 | 说明 |
|---|---|---|
| Android App | 支持 | 原生 VLC 播放内核,支持截图、录制、全屏、轨道切换与原始 VLC 参数 |
| iOS App | 支持 | 原生 VLC 播放内核,支持截图、录制、全屏、轨道切换与原始 VLC 参数 |
| Harmony App | 支持 | 组件层保持统一 API,底层走标准视频适配;部分 VLC 独有能力会降级 |
| Web | 支持 | 组件层保持统一 API,底层走标准 video 适配;部分 VLC 独有能力会降级 |
说明:
- Android 与 iOS 是完整 VLC 播放形态,最适合 RTSP、录像、截图、轨道能力验证。
- Harmony 与 Web 继续保留相同标签、方法和事件入口,便于页面联调,但录制、部分轨道控制、部分 VLC 高级参数会按平台能力降级。
- 最稳妥的做法是在页面启动后调用
getPlatformCapabilities(),按返回值决定是否展示截图、录制、字幕轨、原始参数等按钮。
安装与引入
将插件放入项目 uni_modules 目录后即可使用。
组件标签名:
<laoqianjunzi-vlc />
如果页面侧需要调用上下文方法或权限代理,可以从模块入口引入:
import {
getLqjVlcPermissionAgent,
type ILqjVlcPermissionAgent,
type ILqjVlcViewContext,
type LqjVlcBridgePayload,
type LqjVlcPlatformCapabilities
} from "@/uni_modules/laoqianjunzi-vlc"
快速开始
组件接入
<template>
<laoqianjunzi-vlc
ref="playerRef"
class="player-view"
:src="source"
:player-options="playerOptions"
@event="onPlayerEvent"
/>
</template>
<script lang="uts">
import { ILqjVlcViewContext } from "@/uni_modules/laoqianjunzi-vlc"
export default {
data() {
return {
source: "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",
playerOptions: {
autoplay: false,
autoReconnect: true,
networkCache: 300,
connectionTimeout: 8000,
playbackProfile: "smooth"
}
}
},
methods: {
getPlayer() : ILqjVlcViewContext | null {
return this.$refs["playerRef"] as ILqjVlcViewContext | null
},
playNow() {
this.getPlayer()?.playVideo(this.source)
},
onPlayerEvent(payload : UTSJSONObject | null) {
if (payload == null) {
return
}
console.log("vlc event", JSON.stringify(payload))
}
}
}
</script>
页面侧播放控制
const player = this.$refs["playerRef"] as ILqjVlcViewContext | null
player?.playVideo(this.source)
player?.pauseVideo()
player?.resumeVideo()
player?.seekTo(15 * 1000)
player?.takeSnapshot()
权限代理接入
const permissionAgent = getLqjVlcPermissionAgent()
permissionAgent.setListener((payload : LqjVlcBridgePayload) => {
console.log("permission code", payload.code)
console.log("permission event", JSON.stringify(payload.data))
})
permissionAgent.requestRuntimePermissions()
组件属性
src
播放器资源地址。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
src |
string |
"" |
视频地址,常见为 rtsp://、http://、https://、m3u8 |
autoplay
基础自动播放标记。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
autoplay |
number |
0 |
1 表示自动播放,0 表示不自动播放 |
说明:
- 组件层
autoplay是number类型。 player-options中的autoplay是boolean类型。- 两者同时存在时,页面应保持语义一致,避免一个传
1、另一个传false。 - 如果业务页已经统一通过
player-options.autoplay管理自动播放,可以不额外传组件层autoplay。
player-options
播放器初始化与运行期调优配置。
| 键名 | 类型 | 说明 |
|---|---|---|
autoplay |
boolean |
是否自动播放 |
autoReconnect |
boolean |
播放失败后是否自动重连 |
connectionTimeout |
number |
连接超时,单位毫秒 |
networkCache |
number |
网络缓存,单位毫秒 |
soundEnabled |
boolean |
是否启用声音 |
volume |
number |
音量目标值 |
playbackRate |
number |
倍速,例如 1、1.5、2 |
aspectRatio |
string |
画面比例,例如 auto、16:9、4:3 |
videoScale |
number |
画面缩放值 |
audioTrack |
number |
默认音轨索引 |
loop |
boolean |
是否循环播放 |
smoothMode |
boolean |
平滑播放模式 |
lowQualityMode |
boolean |
低画质播放模式 |
playbackProfile |
string |
推荐使用 smooth 或 lowQuality 预设 |
建议:
- 业务页只需要常规播放时,优先传
autoplay、autoReconnect、networkCache、connectionTimeout、playbackProfile。 - 需要更强控制时,再叠加
volume、playbackRate、aspectRatio、loop等参数。 - 需要 VLC 原始参数时,不建议混在
player-options中,应直接调用setVlcOptions()、setVlcIntOption()、setVlcBooleanOption()、setVlcStringOption()。
事件模型
组件统一通过 @event 抛出 UTSJSONObject。
所有事件都会包含:
event:事件名
常见附加字段:
oldState、newStatecurrentTime、duration、bufferProgressprogressurlpathbase64messageisInitializedisReadyToPlayisRecording
常用播放器事件
| 事件名 | 含义 | 常见字段 |
|---|---|---|
componentReady |
组件宿主已准备完成 | isInitialized、isReadyToPlay |
videoLoaded |
视频资源已可播放 | url |
videoLoadFailed |
视频加载失败 | url、message |
playStateChanged |
播放状态切换 | oldState、newState、description |
connectionStateChanged |
连接状态切换 | oldState、newState |
timeUpdate |
播放进度更新 | currentTime、duration、bufferProgress |
bufferingProgress |
缓冲进度更新 | progress |
snapshotTaken |
截图完成 | path、base64 |
recordingStarted |
开始录制 | path、isRecording |
recordingStopped |
停止录制 | path、isRecording |
fullscreenEnter |
进入全屏 | url |
fullscreenExit |
退出全屏 | url |
warning |
平台降级或提醒 | message |
error |
错误事件 | message |
debug |
调试事件 | message |
播放状态参考
页面侧通常会收到这些状态值:
idleopeningreadyplayingpausedbufferingstoppedendederror
权限代理事件
getLqjVlcPermissionAgent() 的监听回调与播放器事件分开,它会返回 LqjVlcBridgePayload:
| 事件名 | 含义 | 常见字段 |
|---|---|---|
permissionAgentReady |
权限代理准备完成 | 无 |
permissionRequestUnavailable |
当前环境无法发起权限申请 | message |
permissionGranted |
权限已授予 | granted、permissions |
permissionDenied |
权限被拒绝 | granted、requestedPermissions、missingPermissions |
上下文方法速查
通过组件 ref 可以拿到 ILqjVlcViewContext。
一、播放控制
| 方法 | 说明 |
|---|---|
playVideo(url) |
播放指定地址 |
pauseVideo() |
暂停播放 |
resumeVideo() |
恢复播放 |
stopVideo() |
停止播放 |
replay() |
重播当前资源 |
reconnect() |
重新拉流 / 重新连接 |
setSource(url) |
只更新资源地址,不直接说明播放状态 |
setAutoplay(enabled) |
设置自动播放标记 |
二、进度与时间
| 方法 | 说明 |
|---|---|
isSeekable() |
当前资源是否可拖动 |
seekTo(ms) |
跳转到指定毫秒位置 |
fastForward(seconds) |
快进指定秒数 |
fastBackward(seconds) |
快退指定秒数 |
getCurrentTime() |
读取当前位置,单位毫秒 |
getDuration() |
读取总时长,单位毫秒 |
getBufferProgress() |
读取缓冲进度 |
三、声音与画面
| 方法 | 说明 |
|---|---|
setVolume(volume) |
设置音量 |
mute() |
静音 |
unmute() |
取消静音 |
setSoundEnabled(enabled) |
一次性控制是否启用声音 |
setAspectRatio(ratio) |
设置画面比例 |
setVideoScale(scale) |
设置画面缩放 |
getVideoScale() |
读取画面缩放 |
setPlaybackRate(rate) |
设置倍速 |
getCurrentVolume() |
读取当前音量 |
getCurrentPlaybackRate() |
读取当前倍速 |
getCurrentAspectRatio() |
读取当前比例 |
四、轨道与字幕
| 方法 | 说明 |
|---|---|
setAudioTrack(index) |
切换音轨 |
getAudioTracksCount() |
音轨数量 |
getAudioTrack() |
当前音轨索引 |
getAudioTracks() |
音轨列表 |
setAudioDelay(delay) |
设置音频延迟 |
getAudioDelay() |
读取音频延迟 |
addAudioTrack(url, isSelected) |
动态挂载外部音频轨 |
getSpuTracksCount() |
字幕轨数量 |
getSpuTracks() |
字幕轨列表 |
setSpuTrack(index) |
切换字幕轨 |
getSpuTrack() |
当前字幕轨索引 |
setSpuDelay(delay) |
设置字幕延迟 |
getSpuDelay() |
读取字幕延迟 |
addSubtitleTrack(url, isSelected) |
动态挂载外部字幕轨 |
getVideoTracksCount() |
视频轨数量 |
getVideoTracks() |
视频轨列表 |
setVideoTrack(index) |
切换视频轨 |
getVideoTrack() |
当前视频轨索引 |
getCurrentAudioTrack() |
读取当前音轨索引 |
五、截图、录制与全屏
| 方法 | 说明 |
|---|---|
startRecording() |
开始录制 |
stopRecording() |
停止录制 |
takeSnapshot() |
触发截图 |
openFullscreen() |
进入全屏 |
exitFullscreen() |
退出全屏 |
getLastSnapshotPath() |
最近一次截图文件路径 |
getLastSnapshotBase64() |
最近一次截图的 Base64 内容 |
getLastRecordingPath() |
最近一次录制文件路径 |
isRecording() |
当前是否处于录制中 |
六、配置与调优
| 方法 | 说明 |
|---|---|
setConnectionTimeout(ms) |
设置连接超时 |
setAutoReconnect(enabled) |
设置自动重连 |
setNetworkCache(ms) |
设置网络缓存 |
setSmoothMode(enabled) |
设置平滑模式 |
setLowQualityMode(enabled) |
设置低画质模式 |
setLoop(enabled) |
设置循环播放 |
setVlcOptions(options) |
批量写入 VLC 原始参数 |
setHardwareAccelerationMode(mode) |
设置硬件加速模式 |
setVlcIntOption(key, value) |
写入整数型 VLC 参数 |
setVlcBooleanOption(key, value) |
写入布尔型 VLC 参数 |
setVlcStringOption(key, value) |
写入字符串型 VLC 参数 |
getConfig() |
读取当前配置快照 |
resetConfig() |
重置当前配置 |
getNetworkCache() |
读取网络缓存 |
getAutoReconnect() |
读取自动重连开关 |
getSmoothMode() |
读取平滑模式开关 |
getLowQualityMode() |
读取低画质模式开关 |
七、状态与生命周期
| 方法 | 说明 |
|---|---|
getPlayState() |
当前播放状态 |
getConnectionState() |
当前连接状态 |
getPlatformCapabilities() |
平台能力描述 |
getVideoInfo() |
视频信息快照 |
isPlaying() |
当前是否播放中 |
isMuted() |
当前是否静音 |
isInitialized() |
播放器是否初始化 |
isReadyToPlay() |
是否已可播放 |
destroy() |
销毁上下文 |
VLC 原始参数与硬解模式
setVlcOptions(options)
接受 Array<string>,适合批量传入原始 VLC 参数。
支持的写法包括:
--rtsp-tcp--network-caching=500--no-drop-late-frames
示例:
player?.setVlcOptions([
"--rtsp-tcp",
"--network-caching=500",
"--clock-jitter=0"
])
setHardwareAccelerationMode(mode)
建议约定:
0:关闭硬解1:启用硬解但关闭直接渲染2:启用硬解并打开直接渲染
示例:
player?.setHardwareAccelerationMode(2)
平台能力判断
建议把页面按钮显示与 getPlatformCapabilities() 返回值绑定,而不是按平台名写死。
示例:
const caps = player?.getPlatformCapabilities()
if (caps != null && caps.supportsRecording) {
player.startRecording()
}
常用能力位:
supportsSnapshotPathsupportsSnapshotBase64supportsRecordingsupportsFullscreensupportsAudioTracksupportsSpuTracksupportsVideoTracksupportsAudioDelaysupportsSpuDelaysupportsExternalTrackssupportsRuntimePermissionssupportsRawVlcOptions
内置演示页
插件已经在 uni_modules/laoqianjunzi-vlc/pages/index.uvue 提供完整演示页,覆盖以下内容:
- HTTP MP4、HLS、RTSP 占位地址切换
- 自动播放、自动重连、网络缓存、超时、倍速、画面比例、音量等配置演示
- 播放、暂停、恢复、停止、重播、快进、快退、重连
- 截图、录制、全屏、权限申请、硬解模式切换、原始 VLC 参数注入
- 平台能力读取、配置快照读取、视频信息读取、音轨信息读取
- 统一事件日志输出与实时状态展示
推荐联调顺序:
- 先打开演示页,点击“MP4 预设”完成基础接入验证
- 点击“平滑预设”或“低码预设”写入一组可见配置
- 使用“应用配置”把页面参数同步到播放器
- 再验证播放、暂停、截图、全屏、重连和事件日志
- 最后再替换成真实 RTSP 地址和原始 VLC 参数做现场调优
Android 权限与清单
插件内 Android 清单已声明以下关键权限:
INTERNETACCESS_NETWORK_STATEACCESS_WIFI_STATERECORD_AUDIOMODIFY_AUDIO_SETTINGSREAD_MEDIA_AUDIOREAD_MEDIA_IMAGESREAD_MEDIA_VIDEOPOST_NOTIFICATIONSWAKE_LOCKCAMERA
低版本 Android 还声明了:
READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE
如果你的业务页需要截图、录制、媒体读取,建议在进入播放器页后主动调用一次 requestRuntimePermissions(),并把结果展示给用户。
使用建议
- 业务页初版优先只接
src、autoplay、player-options、@event四个入口,先跑通主链路。 - 事件日志中要重点关注
componentReady、playStateChanged、connectionStateChanged、videoLoadFailed。 - 要做跨端页面联调时,先根据
getPlatformCapabilities()控制按钮显隐,再验证具体能力。 - RTSP、硬解、网络缓存与重连策略通常需要结合真实设备环境反复调参,推荐直接使用示例页中的原始参数输入区。
- 需要截图或录制落盘时,优先读取
getLastSnapshotPath()、getLastRecordingPath(),不要只依赖界面提示。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-vlc
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1158
赞赏 2
下载 12347636
赞赏 1925
赞赏
京公网安备:11010802035340号