更新记录
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.正在说话人监听
进入房间
人数:{{ num }}
上麦数:{{ numOfPublishers }}
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>