更新记录

1.0.0(2026-05-21)

初始化版本发布。


平台兼容性

uni-app(4.83)

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

uni-app x(4.83)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.0.0 12 1.0.0 5.0.0 1.0.0 ×

ZF-playRtspUTS

ZF-playRtspUTS 封装 VLC 播放内核,用于在 App 端播放 RTSP、RTMP、HTTP-FLV、MP4 等视频地址。

快速使用

<template>
  <ZF-playRtspUTS
    id="playRtspView"
    :options="vlcOptions"
    :style="{ width: '750rpx', height: '220px' }"
    @loaded="onLoaded"
    @playing=""
    @timechanged="onTimeChanged"
    @error="onError"
  />
</template>

<script setup lang="uts">
import { createPlayRtspContext, type PlayOptions } from "@/uni_modules/ZF-playRtspUTS"

const vlcOptions = ref("-vvv|--network-caching=300")

function startPlay() {
  const player = createPlayRtspContext("playRtspView", getCurrentInstance()?.proxy)
  player?.playVideo({
    url: "rtsp://example.com/live/stream",
    hwAcc: 2,
    options: [":rtsp-tcp"],
    fail: (res : any) => {
      console.log(res)
    }
  } as PlayOptions)
}

function onLoaded(e : any) {
  console.log(e)
}

function (e : any) {
  console.log(e)
}

function onTimeChanged(e : any) {
  console.log(e)
}

function onError(e : any) {
  console.log(e)
}
</script>

组件

<ZF-playRtspUTS>

属性 类型 默认值 说明
options string "" VLC 初始化参数,多个参数用 | 分隔。属性变化时会重建当前播放器。

示例:

<ZF-playRtspUTS id="playRtspView" :options="'-vvv|--network-caching=300'" />

PlayOptions

playVideo(options) 使用的参数类型:

export type PlayOptions = {
  url : string
  hwAcc ?: number
  options ?: Array<string>
  success ?: (res : any) => void
  fail ?: (res : any) => void
  complete ?: (res : any) => void
}
字段 类型 必填 说明
url string 播放地址。支持远程地址,也支持 App 资源路径,例如 /static/aa.mp4
hwAcc number 硬解模式。0 软解,1 硬解并关闭 direct rendering,2 硬解。HarmonyOS 当前忽略该字段。
options Array<string> 单次媒体播放参数,例如 [":rtsp-tcp"]。Android/iOS 会传给 VLC Media;HarmonyOS 当前 @ohos/vlc 未暴露 Media addOption,建议使用组件 options 设置初始化参数。
success (res:any)=>void 播放命令已提交时触发。
fail (res:any)=>void 播放器未初始化等失败场景触发。
complete (res:any)=>void 命令结束时触发,成功失败都会调用。

事件

所有事件通过组件监听:

<ZF-playRtspUTS
  id="playRtspView"
  @loaded="onLoaded"
  @opening="onOpening"
  @paused="onPaused"
  @stopped="onStopped"
  @playing=""
  @ended=""
  @buffering="onBuffering"
  @timechanged="onTimeChanged"
  @error="onError"
  @recording="onRecording"
/>
事件 触发时机 常见 detail
loaded 原生播放器创建完成 {}
opening VLC 开始打开媒体 {}
playing 开始播放 heightwidthspeedpositiondurationaudioTracksCountactiveAudioTrackspuTracksCountactiveSpuTrackisPlaying
paused 暂停 {}
stopped 停止 {}
ended 播放结束 { position }
buffering 缓冲进度变化 { buffing }
timechanged 播放进度变化 playing,通常包含 positiondurationbuffing
error VLC 播放错误 Android/iOS 通常为 {};HarmonyOS 可能包含 { code }
recording 录制状态变化 { isRecording, recordPath },HarmonyOS 当前不支持

不同 VLC 平台暴露的字段不完全一致,业务代码应按需判断字段是否存在。

组件上下文方法

通过组件 id 创建上下文后调用。第二个参数建议传入当前页面/组件实例,写法与 DCloud 标准组件文档的 createNativeButtonContext(id, component) 保持一致:

import { createPlayRtspContext } from "@/uni_modules/ZF-playRtspUTS"

const player = createPlayRtspContext("playRtspView", getCurrentInstance()?.proxy)
player?.pauseVideo()

播放控制

方法 签名 说明
playVideo (options : PlayOptions) => void 播放指定媒体。
pauseVideo () => boolean 暂停播放。
resumeVideo () => boolean 继续播放。
stopVideo () => boolean 停止播放。
isPlaying () => boolean 是否正在播放。
isSeekable () => boolean 当前媒体是否支持 seek。
setLooping (looping : boolean) => void 设置循环播放。HarmonyOS 当前无实际效果。

音量、倍速和进度

方法 签名 说明
setVolume (value : number) => void 设置音量,建议范围 0-100。Android/HarmonyOS 会限制到 0-100
getVolume () => number 获取音量,失败返回 -1
setPlaybackSpeed (value : number) => void 设置播放倍速,例如 1.01.5
getPlaybackSpeed () => number 获取播放倍速,失败返回 -1
seekTo (value : number) => void 跳转到指定时间,单位毫秒。
getPosition () => number 获取当前播放进度,单位毫秒,失败返回 -1
getDuration () => number 获取媒体总时长,单位毫秒,失败返回 -1

字幕轨道

方法 签名 说明
getSpuTracksCount () => number 获取字幕轨道数量,失败返回 -1
getSpuTracks () => Array<any> 获取字幕轨道列表,通常为 { id, name }
setSpuTrack (value : number) => void 切换字幕轨道。
getSpuTrack () => number 获取当前字幕轨道 id,失败返回 -1
setSpuDelay (value : number) => void 设置字幕延迟,单位微秒。HarmonyOS 当前无实际效果。
getSpuDelay () => number 获取字幕延迟,失败返回 -1。HarmonyOS 当前固定返回 -1
addSubtitleTrack (url : string, isSelected : boolean) => void 添加外部字幕轨道。

音频轨道

方法 签名 说明
getAudioTracksCount () => number 获取音频轨道数量,失败返回 -1
getAudioTracks () => Array<any> 获取音频轨道列表,通常为 { id, name }
setAudioTrack (value : number) => void 切换音频轨道。
getAudioTrack () => number 获取当前音频轨道 id,失败返回 -1
setAudioDelay (value : number) => void 设置音频延迟,单位微秒。HarmonyOS 当前无实际效果。
getAudioDelay () => number 获取音频延迟,失败返回 -1。HarmonyOS 当前固定返回 -1
addAudioTrack (url : string, isSelected : boolean) => void 添加外部音频轨道。

视频轨道和画面

方法 签名 说明
getVideoTracksCount () => number 获取视频轨道数量,失败返回 -1。HarmonyOS 根据视频尺寸返回 01
getVideoTracks () => Array<any> 获取视频轨道列表,通常为 { id, name }。HarmonyOS 返回简化列表。
setVideoTrack (value : number) => void 切换视频轨道。HarmonyOS 当前无实际效果。
getVideoTrack () => number 获取当前视频轨道 id,失败返回 -1
setVideoScale (value : number) => void 设置视频缩放。
getVideoScale () => number 获取视频缩放,失败返回 -1

录制和截图

方法 签名 说明
startRecording (directory : string) => boolean 开始录制到指定目录。HarmonyOS 当前返回 false
stopRecording () => boolean 停止录制。HarmonyOS 当前返回 false
getSnapshot () => string 获取当前画面截图的 Base64 字符串。Android 返回 JPEG Base64,iOS 返回 PNG Base64,HarmonyOS 当前返回空字符串。

兼容模块函数

旧版本的模块函数仍可使用:

import { playVideo, pauseVideo, type PlayOptions } from "@/uni_modules/ZF-playRtspUTS"

playVideo({
  url: "rtsp://example.com/live/stream",
  options: [":rtsp-tcp"]
} as PlayOptions)

pauseVideo()

兼容函数和组件实例方法同名,包括 playVideopauseVideoresumeVideostopVideoisPlayingisSeekablesetVolumegetVolume 等。

注意:

  • 兼容函数只会控制最近创建的 <ZF-playRtspUTS> 实例。
  • 多个播放器同时存在时,必须使用 createPlayRtspContext(id, component) 调用对应实例方法。
  • 如果还没有播放器实例,playVideo 会触发 failcomplete,其它方法会返回 false-1[] 或空字符串。

HarmonyOS 说明

HarmonyOS 实现参考 @ohos/vlc,内部使用:

XComponent({ id, type: XComponentType.SURFACE, libraryname: "vlc_napi" })
mediaPlayer.setVideoOut(id)

当前 @ohos/vlc@1.0.1-rc.1 暴露的接口不包含录制、截图、Media addOption、音频/字幕 delay、视频轨道切换等能力,因此这些接口在 HarmonyOS 上会降级为 no-op 或返回默认值。Android/iOS 保持原 VLC 能力。

HarmonyOS 端已按 XComponent 生命周期绑定视频输出:

  • .onLoad() 读取 getXComponentSurfaceId() 作为 native surface 已创建信号。
  • MediaPlayer.setVideoOut() 传入的是 XComponent 的组件 id,不是 native surface id。
  • debug 事件会输出 surface-createdsurface-bindplay-requestmedia-parseplayer-play 等阶段,便于定位播放失败发生在窗口绑定还是媒体打开。

注意:当前 @ohos/vlc@1.0.1-rc.1 包内包含 libhttps_plugin.so,但未随包提供可见的 TLS/SSL client 插件或 openssl 类库。遇到 https:// 地址,尤其是会 302 跳转到临时 CDN 域名/端口的地址,可能出现 opening -> buffering 0 -> error -> stopped。请优先用测试页里的 HTTP MP4 样例验证播放器链路;若 HTTP 可以播放而 HTTPS 失败,通常是 @ohos/vlc HTTPS/TLS 能力限制或远端跳转策略导致,不是组件窗口绑定问题。

常见问题

为什么推荐组件上下文调用?

组件上下文方式能让每个 <ZF-playRtspUTS> 拥有独立播放器实例,并且与 DCloud 标准组件文档的页面调用方式一致,避免旧版单例在多播放器场景下互相覆盖。

RTSP 播放建议怎么配置?

可优先尝试 TCP:

const player = createPlayRtspContext("playRtspView", getCurrentInstance()?.proxy)
player?.playVideo({
  url: "rtsp://example.com/live/stream",
  options: [":rtsp-tcp"]
} as PlayOptions)

HarmonyOS 如果需要 VLC 初始化参数,请通过组件 options 传入:

<ZF-playRtspUTS id="playRtspView" :options="'-vvv|--network-caching=300'" />

隐私、权限声明

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

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

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

暂无用户评论。