更新记录
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 |
开始播放 | height、width、speed、position、duration、audioTracksCount、activeAudioTrack、spuTracksCount、activeSpuTrack、isPlaying |
paused |
暂停 | {} |
stopped |
停止 | {} |
ended |
播放结束 | { position } |
buffering |
缓冲进度变化 | { buffing } |
timechanged |
播放进度变化 | 同 playing,通常包含 position、duration、buffing |
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.0、1.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 根据视频尺寸返回 0 或 1。 |
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()
兼容函数和组件实例方法同名,包括 playVideo、pauseVideo、resumeVideo、stopVideo、isPlaying、isSeekable、setVolume、getVolume 等。
注意:
- 兼容函数只会控制最近创建的
<ZF-playRtspUTS>实例。 - 多个播放器同时存在时,必须使用
createPlayRtspContext(id, component)调用对应实例方法。 - 如果还没有播放器实例,
playVideo会触发fail和complete,其它方法会返回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-created、surface-bind、play-request、media-parse、player-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'" />

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