更新记录

1.0.0(2025-06-17)

ijkplayer低延迟拉流初始版本


平台兼容性

云端兼容性

阿里云 腾讯云 支付宝云

uni-app(4.26)

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

uni-app x(4.26)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - -

yzc-ijkplayer 低延迟IJKPlayer播放器,支持rtsp、rtmp、flv、m3u8等流播放(需要打自定义基座,请测试没问题再购买)

注意如果是uniapp,文件后缀必须是nvue(为了避免打包后找不到插件或者插件不生效,打自定义基座时请修改mainfest.json中应用版本号,或者删除旧版本后重新运行安装)

参数

参数 类型 是否必须 描述
url string 播放连接
muted boolean 是否静音|
scalingMode string "aspectFit" "aspectFill" "fill"|
captureVideoImageBase64 boolean 截屏是否返回base字符串|

方法

|方法名|参数|说明| |play|无参|播放方法| |pause|无参|暂停方法| |captureVideoImage|无参|截屏方法|

loadStateChanged方法回调说明

state说明

字符串类型 描述
'playthroughOK' 可播放
'stalled' 加载中
'playable' 已准备好播放

videoSizeChanged方法回调说明

参数 类型 描述
videoWidth number 视频宽(单位像素)
videoHeight number 视频高(单位像素)

captureVideoImageChanged方法回调说明

参数 类型 描述
success boolean 是否成功
imagePth string 截屏路径(当captureVideoImageBase64为true,返回为空)
base64Str string 截屏base64字符串(当captureVideoImageBase64为false,返回为空)
errMsg string 错误描述

playbackDidFinishStateChanged方法回调说明

state说明

字符串类型 描述
'playbackEnded' 播放结束
'playbackError' 播放错误
'userExited' 用户退出

uniappx用法

组件引入

<yzc-ijkvideo
class="ijkvideo"
ref="ijkvideo"
:url="url"
:muted="muted"
:scalingMode="scalingMode"
:captureVideoImageBase64="true"
@videoSizeChanged="videoSizeChanged"
@captureVideoImageChanged="captureVideoImageChanged"
@loadStateChanged="loadStateChanged"
@playbackDidFinishStateChanged="playbackDidFinishStateChanged"
>
</yzc-ijkvideo>

类型导入

import { VideoSizeType, CaptureVideoImageType, LoadStateType, PlayBackDidFinishStateType } from '@/uni_modules/yzc-ijkplayer'

选项时API

export default {
    data() {
        return {
            videoElement: null as YzcIjkvideoElement | null,
            muted: false,
            url: '',
            scalingMode: 'aspectFit'
        }
    },
    methods: {
        mutedClick() {
            this.muted = !this.muted
        },
        captureVideoImageClick() {
            if (this.$refs['ijkvideo'] != null) {
                this.videoElement = this.$refs['ijkvideo'] as YzcIjkvideoElement
            }
            this.videoElement?.captureVideoImage()
        },
        videoSizeChanged(res: VideoSizeType) {
            console.log('videoSizeChanged', res.videoWidth, res.videoHeight)
        },
        captureVideoImageChanged(res: CaptureVideoImageType) {
            console.log('captureVideoImageChanged', res)
        },
        loadStateChanged(res: LoadStateType) {
            console.log('loadStateChanged', res.state)
        },
        playbackDidFinishStateChanged(res: PlayBackDidFinishStateType) {
            console.log('playbackDidFinishStateChanged', res.state)
        },
        playBtnClick() {
            if (this.$refs['ijkvideo'] != null) {
                this.videoElement = this.$refs['ijkvideo'] as YzcIjkvideoElement
            }
            this.videoElement?.play()
        }
    }
}

组合式API

const ijkvideo = ref(null)
const url = ref('')
const muted = ref(false)
const mutedClick = (() => {
      muted.value = !muted.value
})
const captureVideoImageClick = (() => {
     (ijkvideo.value as YzcIjkvideoElement).captureVideoImage()
})
const videoSizeChanged = ((res: VideoSizeType) => {
     console.log('videoSizeChanged', res.videoWidth, res.videoHeight)
})
const captureVideoImageChanged = ((res: CaptureVideoImageType) => {
     console.log('captureVideoImageChanged', res)
})
const loadStateChanged = ((res: LoadStateType) => {
     console.log('loadStateChanged', res.state)
})
const playbackDidFinishStateChanged = ((res: PlayBackDidFinishStateType) => {
     console.log('playbackDidFinishStateChanged', res.state)
})

uniapp用法(注意必须在nvue中使用)

组件引入

<yzc-ijkvideo
class="ijkvideo"
ref="ijkvideo"
:url="url"
:muted="muted"
:scalingMode="scalingMode"
:captureVideoImageBase64="true"
@videoSizeChanged="videoSizeChanged"
@captureVideoImageChanged="captureVideoImageChanged"
@loadStateChanged="loadStateChanged"
@playbackDidFinishStateChanged="playbackDidFinishStateChanged"
>
</yzc-ijkvideo>
export default {
    data() {
        return {
            muted: false,
            url: '',
            scalingMode: 'aspectFit'
        }
    },
    methods: {
        mutedClick() {
            this.muted = !this.muted
        },
        captureVideoImageClick() {
            this.$refs['ijkvideo'].captureVideoImage()
        },
        videoSizeChanged(res) {
            console.log('videoSizeChanged', res.detail.videoWidth, res.detail.videoHeight)
        },
        captureVideoImageChanged(res) {
            if (res.detail.success) {
                const base64Str = `data:image/png;base64,${res.detail.base64Str}`
                console.log('captureVideoImageChanged', base64Str)
            }
        },
        loadStateChanged(res) {
            console.log('loadStateChanged', res.detail.state)
        },
        playbackDidFinishStateChanged(res) {
            console.log('playbackDidFinishStateChanged', res.detail.state)
        },
        playBtnClick() {
            this.$refs['ijkvideo'].play()
        }
    }
}

隐私、权限声明

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

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

插件不采集任何数据

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

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问