更新记录

1.0.0(2026-08-15)

1.0.0(2026-08-15)

语聊房 实现

兼容 uiapp/uiappx uve3 iOS /Android / H5 代码三端用法一致性

H5 端需要插件的web目录执行 npm install livekit-client --save

1.加入房间, 2.连接状态监听 3.人员进出监听 4.上下麦操作 5.上下麦人员监听 6.权限变更监听 7.正在说话人监听


平台兼容性

uni-app(4.75)

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

uni-app x(5.14)

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

其他

多语言 暗黑模式 宽屏模式
×

Jason-livekit-audio

开发文档

语聊房 实现 兼容 uiapp/uiappx uve3 iOS /Android / H5 代码三端用法一致性 H5 端需要插件的web目录执行 npm install livekit-client --save 1.加入房间, 2.连接状态监听 3.人员进出监听 4.上下麦操作 5.上下麦人员监听 6.权限变更监听 7.正在说话人监听

export default { options: { virtualHost: true } }

<script lang="ts" setup ">

import { utsSetRoomEventListener, utsJoinRoom, utsLeaveRoom, utsSetMicEnable, utsIsMicMuted, utsToggleMute } from '@/uni_modules/Jason-livekit-audio'

const num = ref(0)
const numOfPublishers = ref(0)

onMounted(() => {

    try {
        utsSetRoomEventListener((evt, data) => {
            console.log("APP原生事件", evt, data)

            if (evt === 'connectionState') {
                console.log("连接状态变化",data);
                if (data["connectionState"] == "connected") {

                } else if (data["connectionState"] == "disconnected") {

                } else if (data["connectionState"] == "connecting") {

                } else if (data["connectionState"] == "reconnecting") {

                }

            } else if (evt === 'leaveRoom') {
                console.log("主动退出房间");
            } else if (evt === 'participantJoin') {

                console.log("有人进入房间",data);
                num.value = Number(data["numOfTotal"])
                numOfPublishers.value = Number(data["numOfPublishers"])
                // identity: data["identity"],
            } else if (evt === 'participantLeave') {
                console.log("有人离开房间",data);
                num.value = Number(data["numOfTotal"])
                numOfPublishers.value = Number(data["numOfPublishers"])

            } else if (evt === 'micMuteChanged') {
                console.log("本机麦开关",data["isMuted"]);

            } else if (evt === 'unPublish') {
                console.log("下麦",data);
                num.value = Number(data["numOfTotal"])
                numOfPublishers.value = Number(data["numOfPublishers"])

            } else if (evt === 'publish') {
                console.log("上麦",data);
                num.value = Number(data["numOfTotal"])
                numOfPublishers.value = Number(data["numOfPublishers"])

            } else if (evt === 'activeSpeakers') {
                console.log("正在说话的人ids",data["speakIds"]);
            }

        })
    } catch (e) {
        console.log("onMounted异常", e)
    }

})
onUnmounted(() => {
    leaveRoom()
})

// joinRoom()
// console.warn("离开房间")
// leaveRoom()
// console.warn("上麦")
// publishMic()
// console.warn("下麦")
// unPublishMic()
// toggleMute()

async function joinRoom() {
    const token = ""
    const url = "wss://"
    console.warn("token,url:", token, url)
    if (url != null && url.length > 1 && token != null && token.length > 1) {
        utsJoinRoom(url, token, (ok, err) => {
            if (ok) {
                console.log("进房成功")
            } else {
                console.error("进房失败", err)
            }
        })

    }

}

async function publishMic() {
    utsSetMicEnable(true) //开麦
}

async function unPublishMic() {

    utsSetMicEnable(false)//关麦
}

async function toggleMute() {
    utsToggleMute()
}
async function leaveRoom() {
    utsLeaveRoom()
}

<style lang="scss" scoped></style>

隐私、权限声明

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

麦克风

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

插件不采集任何数据

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

暂无用户评论。