更新记录

1.0.9(2026-06-03)

支持vlc自定义参数

1.0.8(2026-06-03)

退出/打开全屏的续播能力优化

1.0.7(2026-06-02)

增加全屏退出事件

查看更多

平台兼容性

uni-app(4.73)

Vue2 Vue3 Chrome Safari app-vue app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙
- - × × × 1.0.9 5.1 1.0.9 12 1.0.9 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

hl-vlc-view 视频播放插件

基于 VLC 的 RTSP 视频流播放 UniApp UTS 原生插件

功能说明

本插件专注于 RTSP 视频流播放,支持海康威视等摄像头的实时视频预览。

平台支持

平台 支持状态 最低版本
Android 支持 Android 4.4+ (API 19+)
iOS 支持 iOS 12.0+

使用方法

基础用法 需要在nvue页面中使用

<template>
  <view class="container">
    <hl-vlc-view 
      ref="player" 
      :src="rtspUrl" 
      :player-options="playerInitOptions"
      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 playerInitOptions = {
  autoplay: true,
  autoReconnect: true,
  networkCache: 600,
  playbackProfile: 'smooth'
};

// 事件处理
const handleEvent = (e) => {
  const fields = e.detail?.dynamicJSONFields ?? e.detail ?? e;
  const event = fields.event;

  switch(event) {
    case 'timeUpdate':
      console.log(`当前时间: ${fields.currentTime}ms, 总时长: ${fields.duration}ms`);
      break;
    case 'playStateChanged':
      console.log('播放状态变更:', fields.description);
      break;
  }
};
</script>

<style>
.video-player {
  width: 100%;
  height: 225px;
}
</style>

初始化配置对象

推荐通过 playerOptions 统一传入初始化参数,而不是拆成多个独立属性。

const playerInitOptions = {
  autoplay: false,
  networkCache: 600,
  autoReconnect: true,
  connectionTimeout: 8000,
  soundEnabled: true,
  volume: 100,
  playbackRate: 1.0,
  aspectRatio: 'auto',
  videoScale: 1.0,
  audioTrack: 0,
  loop: false,
  playbackProfile: 'smooth'
};

支持的 playerOptions 字段:

字段 类型 说明
autoplay boolean 是否自动播放
networkCache number 网络缓存时间,单位毫秒
autoReconnect boolean 是否开启自动重连
connectionTimeout number 连接超时,单位毫秒
soundEnabled boolean 是否启用声音
volume number 初始音量,范围 0-100
playbackRate number 初始倍速
aspectRatio string 初始画面比例,如 auto / 16:9 / 4:3
videoScale number 初始画面缩放
audioTrack number 初始音轨索引
loop boolean 是否循环播放
playbackProfile string 播放策略,可选 default / smooth / lowQuality
smoothMode boolean 显式开启流畅优先策略,优先级高于 playbackProfile
lowQualityMode boolean 显式开启低画质优先策略,优先级高于 playbackProfile

高级 VLC 参数

如果基础参数还不够,可以继续在 playerOptions 里传入更细的 VLC 调优字段。

const playerInitOptions = {
  autoplay: false,
  playbackProfile: 'smooth',
  networkCache: 600,
  liveCache: 180,
  audioCache: 240,
  rtspTcp: true,
  rtspTimeout: 3000,
  rtspFrameBufferSize: 262144,
  clockJitter: 600,
  clockSynchro: 1,
  dropLateFrames: true,
  skipFrames: true,
  decoderThreads: 6,
  hardwareDecoding: true,
  fastDecode: true,
  directRendering: true
};

常用高级字段:

字段 类型 说明
liveCache number 单独指定 live-caching
fileCache number 单独指定 file-caching
audioCache number 单独指定 audio-caching
soutMuxCache number 单独指定 sout-mux-caching
rtspTcp boolean 是否强制 RTSP 走 TCP
rtspTimeout number RTSP 超时时间,单位毫秒
rtspFrameBufferSize number RTSP 帧缓冲参数
rtspKeepaliveInterval number RTSP 保活间隔,单位秒
rtspLowDelay boolean 是否启用 RTSP 低延迟模式
rtspFastPause boolean 是否启用 RTSP 快速暂停/恢复
rtspFrameDrop boolean 是否启用 RTSP 帧丢弃策略
clockJitter number 时钟抖动补偿
clockSynchro number 时钟同步开关,通常为 01
dropLateFrames boolean 是否丢弃延迟帧
skipFrames boolean 是否允许跳帧
hardwareDecoding boolean 是否启用硬件解码
decoderThreads number 解码线程数
fastDecode boolean 是否启用快速解码
hurryUp boolean 是否启用快速追帧
directRendering boolean 是否启用直接渲染
audioTimeStretch boolean 是否启用音频时间拉伸
audioDesync number 音频去同步阈值
skipLoopFilter number 解码阶段的 loop filter 跳过级别
skipIdct number 解码阶段的 IDCT 跳过级别
skipFrame number 解码阶段的跳帧级别
udpTimeout number UDP 超时时间
rtmpBufferSize number RTMP 缓冲区大小
avcodecHw string 指定 VLC 硬解实现
avcodecHwPixelFormat string 指定硬解像素格式
rtspUserAgent string 自定义 RTSP User-Agent

说明:网络建连、缓冲、解码类参数建议在播放前设置;如果在播放中动态修改,通常需要执行 reconnect()replay() 或重新 setSource() 后才会对新的媒体会话生效。

组件 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: 毫秒 设置网络缓存大小
setVlcIntOption(key, value) key: 参数名 动态设置 VLC 整数参数
setVlcBooleanOption(key, value) key: 参数名 动态设置 VLC 布尔参数
setVlcStringOption(key, value) key: 参数名 动态设置 VLC 字符串参数

状态查询 (同步返回)

方法名 返回类型 说明
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 字段,其他数据字段与事件名处于同一层级。

事件名 (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 }
fullscreenEnter 进入全屏后 { url: "当前播放地址" }
fullscreenExit 退出全屏后 { url: "当前播放地址" }

开发注意事项

  1. 文件路径recordingStoppedsnapshotTaken 返回的都是绝对路径。在 UniApp 中使用时,可能需要转换为 file:// 协议或使用相对路径(取决于具体 API 要求),但在本插件中直接返回原生路径。

  2. 权限要求

    • Android:需要 INTERNET 权限,插件已自动配置。
    • iOS:不需要特殊权限即可播放,但录制可能涉及文件写入权限。
  3. 生命周期管理:建议在页面 onUnload 或组件销毁时主动调用 stopVideo(),虽然插件会自动处理,但主动释放资源是个好习惯。

  4. RTSP 协议

    • 支持 RTSP/TCP 和 RTSP/UDP 两种传输协议
    • 支持 H.264/H.265 编码格式
    • 建议使用 TCP 协议以获得更稳定的连接
  5. 性能优化

    • timeUpdate 事件默认每 500ms 触发一次
    • 如果不需要实时进度,可以不监听此事件以减少开销
    • 建议根据网络情况调整 setNetworkCache 参数
  6. 错误处理

    • 建议监听 errorvideoLoadFailed 事件
    • 可以通过 setAutoReconnect(true) 启用自动重连
    • 连接超时后可以调用 reconnect() 手动重试

全屏模式

插件支持全屏播放功能,两端实现方式不同:

  • iOS:调用 openFullscreen() 会在当前视图基础上全屏,支持手势控制。
  • Android:调用 openFullscreen() 会启动一个新的 Activity (FullscreenActivity) 进行沉浸式播放,支持自动隐藏状态栏和导航栏。

核心特性

  1. 低延迟播放:基于 VLC 引擎,支持低延迟的 RTSP 流播放
  2. 实时进度回调:通过 timeUpdate 事件实时获取播放进度
  3. 录制与截图:支持边播边录,单帧截图功能
  4. 状态管理:完善的播放状态机,支持多种播放状态回调
  5. 网络优化:支持自动重连、网络缓存调整、连接超时设置
  6. 音频控制:支持音量调节、静音、多音轨切换
  7. 画面调整:支持画面比例、缩放、倍速播放

常见问题

Q: 为什么播放卡顿或延迟高?

A: 可以尝试以下方法:

  1. 调整网络缓存:setNetworkCache(300) (单位:毫秒)
  2. 检查网络连接质量
  3. 确认 RTSP 流的码率和分辨率是否合适

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: