更新记录
1.0.1(2026-01-21)
一、文档细则更新
1.0.0(2026-01-21)
首次发布
- 基于 VLC 核心实现 RTSP 流媒体播放
- 支持基本的播放控制:播放、暂停、停止、快进、快退
- 支持视频截图和录制功能
- 支持 Android 和 iOS 双平台
- 提供完整的事件回调机制
- 支持全屏播放模式
平台兼容性
uni-app(4.73)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | × | √ | 1.0.0 | 5.1 | 1.0.0 | 12 | 1.0.0 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - |
hl-vlc-view 视频播放插件
基于 VLC 的 RTSP 视频流播放 UniApp UTS 原生插件
功能说明
本插件专注于 RTSP 视频流播放,支持海康威视等摄像头的实时视频预览。
平台支持
| 平台 | 支持状态 | 最低版本 |
|---|---|---|
| Android | 支持 | Android 4.4+ (API 19+) |
| iOS | 支持 | iOS 12.0+ |
使用方法
基础用法
<template>
<view class="container">
<hl-vlc-view
ref="player"
:src="rtspUrl"
:autoplay="1"
class="video-player"
@event="handleEvent"
/>
</view>
</template>
<script setup>
const player = ref(null);
const rtspUrl = ref('rtsp://admin:pass@ip:554/Streaming/Channels/101');
// 事件处理
const handleEvent = (e) => {
const { event, data } = e.detail;
// console.log('收到事件:', event, data);
switch(event) {
case 'timeUpdate':
// 实时播放进度更新 (每500ms)
console.log(`当前时间: ${data.currentTime}ms, 总时长: ${data.duration}ms`);
break;
case 'playStateChanged':
console.log('播放状态变更:', data.description);
break;
}
};
</script>
<style>
.video-player {
width: 100%;
height: 225px;
}
</style>
组件 API 列表
通过 ref 调用组件方法:
播放控制
| 方法名 | 参数 | 说明 |
|---|---|---|
playVideo(url: string) |
url: 视频地址 |
开始播放 |
pauseVideo() |
无 | 暂停播放 |
resumeVideo() |
无 | 恢复播放 |
stopVideo() |
无 | 停止播放 |
replay() |
无 | 重新播放当前地址 |
seekTo(ms: number) |
ms: 毫秒 |
跳转到指定时间 |
fastForward(sec: number) |
sec: 秒 |
快进(默认10秒) |
fastBackward(sec: number) |
sec: 秒 |
快退(默认10秒) |
声音与画面
| 方法名 | 参数 | 说明 |
|---|---|---|
setVolume(0-100) |
volume: 音量值 |
设置音量 |
mute() |
无 | 静音 |
unmute() |
无 | 取消静音 |
setSoundEnabled(enable: bool) |
true/false |
开启/关闭声音 |
setAspectRatio(ratio: string) |
"16:9", "4:3", "auto" |
设置画面比例 |
setVideoScale(scale: number) |
0.1 - 3.0 |
设置画面缩放 |
setPlaybackRate(rate: number) |
0.25 - 4.0 |
设置播放倍速 |
setAudioTrack(index: number) |
index: 轨道索引 |
切换音轨 |
录制与截图
| 方法名 | 说明 | 结果获取 |
|---|---|---|
startRecording() |
开始录制视频 | 监听 recordingStarted 事件 |
stopRecording() |
停止录制并保存 | 监听 recordingStopped 事件,data.path 为文件路径 |
takeSnapshot() |
视频截图 | 监听 snapshotTaken 事件,data.path 为图片路径 |
网络与配置
| 方法名 | 参数 | 说明 |
|---|---|---|
reconnect() |
无 | 主动尝试重连 |
setConnectionTimeout(ms) |
ms: 毫秒 |
设置连接超时时间 |
setAutoReconnect(enable) |
bool |
开启/关闭自动重连 |
setNetworkCache(ms) |
ms: 毫秒 |
设置网络缓存大小 |
状态查询 (同步返回)
| 方法名 | 返回类型 | 说明 |
|---|---|---|
isPlaying() |
boolean |
是否正在播放 |
isRecording() |
boolean |
是否正在录制 |
isMuted() |
boolean |
是否静音 |
isInitialized() |
boolean |
组件是否初始化完成 |
getPlayState() |
string |
获取当前状态描述 |
getCurrentTime() |
number |
获取当前播放时间 (ms) |
getDuration() |
number |
获取总时长 (ms) |
getBufferProgress() |
number |
获取缓冲进度 (0-100) |
getVideoInfo() |
object |
获取宽、高、时长等综合信息 |
事件文档
组件通过 @event 回调对外发送事件。e.detail 包含 event (事件名) 和 data (数据对象)。
事件名 (event) |
触发时机 | data 数据结构 |
|---|---|---|
componentReady |
组件加载完成 | { isInitialized, isReadyToPlay } |
timeUpdate |
播放时每500ms触发 | { currentTime (ms), duration (ms), bufferProgress (0-100) } |
playStateChanged |
播放状态变更 | { oldState, newState, description } |
connectionStateChanged |
连接状态变更 | { oldState, newState } |
recordingStarted |
录制开始 | null |
recordingStopped |
录制结束 | { path: "绝对文件路径" } |
snapshotTaken |
截图成功 | { path: "绝对图片路径" } |
videoLoaded |
视频加载成功 | null |
videoLoadFailed |
视频加载失败 | { message, url } |
error |
发生错误 | { message } |
warning |
警告信息 | { message } |
bufferingProgress |
缓冲中 | { progress: 0-100 } |
开发注意事项
-
文件路径:
recordingStopped和snapshotTaken返回的都是绝对路径。在 UniApp 中使用时,可能需要转换为file://协议或使用相对路径(取决于具体 API 要求),但在本插件中直接返回原生路径。 -
权限要求:
- Android:需要
INTERNET权限,插件已自动配置。 - iOS:不需要特殊权限即可播放,但录制可能涉及文件写入权限。
- Android:需要
-
生命周期管理:建议在页面
onUnload或组件销毁时主动调用stopVideo(),虽然插件会自动处理,但主动释放资源是个好习惯。 -
RTSP 协议:
- 支持 RTSP/TCP 和 RTSP/UDP 两种传输协议
- 支持 H.264/H.265 编码格式
- 建议使用 TCP 协议以获得更稳定的连接
-
性能优化:
timeUpdate事件默认每 500ms 触发一次- 如果不需要实时进度,可以不监听此事件以减少开销
- 建议根据网络情况调整
setNetworkCache参数
-
错误处理:
- 建议监听
error和videoLoadFailed事件 - 可以通过
setAutoReconnect(true)启用自动重连 - 连接超时后可以调用
reconnect()手动重试
- 建议监听
全屏模式
插件支持全屏播放功能,两端实现方式不同:
- iOS:调用
openFullscreen()会在当前视图基础上全屏,支持手势控制。 - Android:调用
openFullscreen()会启动一个新的 Activity (FullscreenActivity) 进行沉浸式播放,支持自动隐藏状态栏和导航栏。
核心特性
- 低延迟播放:基于 VLC 引擎,支持低延迟的 RTSP 流播放
- 实时进度回调:通过
timeUpdate事件实时获取播放进度 - 录制与截图:支持边播边录,单帧截图功能
- 状态管理:完善的播放状态机,支持多种播放状态回调
- 网络优化:支持自动重连、网络缓存调整、连接超时设置
- 音频控制:支持音量调节、静音、多音轨切换
- 画面调整:支持画面比例、缩放、倍速播放
常见问题
Q: 为什么播放卡顿或延迟高?
A: 可以尝试以下方法:
- 调整网络缓存:
setNetworkCache(300)(单位:毫秒) - 检查网络连接质量
- 确认 RTSP 流的码率和分辨率是否合适
Q: 如何处理连接断开?
A: 插件支持自动重连:
player.value.setAutoReconnect(true)
或监听连接状态事件手动重连:
if (event === 'connectionStateChanged' && data.newState === 'disconnected') {
player.value.reconnect()
}
Q: 录制的视频保存在哪里?
A: 录制结束后,recordingStopped 事件会返回绝对路径:
- Android:
/storage/emulated/0/Android/data/[packageName]/files/recordings/ - iOS:
NSDocumentDirectory/recordings/

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 273
赞赏 2
下载 13548282
赞赏 1850
赞赏
京公网安备:11010802035340号