# uniapp-livekit-plugin **Repository Path**: farsunset/uniapp-livekit ## Basic Information - **Project Name**: uniapp-livekit-plugin - **Description**: 给原生uniapp提供开箱即用的单人、多人音视频通话、共享桌面插件。完全自主,不依赖第三方云服务 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: http://farsunset.com - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 1 - **Created**: 2025-03-18 - **Last Updated**: 2025-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: Android, uni-app, IOS, webrtc, livekit ## README #### 插件部分功能截图 ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-001.jpg) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-002.png) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-003.jpg) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-004.jpg) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-005.jpg) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-006.jpg) ![](https://gbreview.oss-cn-beijing.aliyuncs.com/uniapp-livekit-007.jpg) #### 一、插件申明 1、本插件服务端需要私有化部署,示例项目中的服务端地址只能用于体验,不能用于生产环境。 **2、本插件严禁用于任何违法犯罪的业务,否则造成任何法律后果由使用者自行承担。** #### 二、功能简介 1、单人音频实时通话支持接听、挂断、开启/关闭麦克风、开启关闭扬声器、开启悬浮窗。 2、单人视频实时通话支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、前后摄像头切换、视频窗口切换、开启悬浮窗。 3、多人音频会议支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、邀请成员、成员麦克风打开/关闭、退出会议、结束会议、开启悬浮窗、会议聊天。 4、多人视频会议支持接听、挂断、开启/关闭麦克风、开启/关闭扬声器、开启/关闭摄像头、邀请成员、成员麦克风打开/关闭、退出会议、结束会议、桌面共享、开启悬浮窗、会议聊天。 通话过程中的事件消息结构体,由服务端下发给uniapp,然后按照下面接口透传给插件 ``` { "id": 362433383034392576, "sender": 0, "receiver":"10000", "action": "900", "content": "XXXXX", "extra": 'XXXXXXX', "format": 0, "timestamp": 1601024512030 } ``` | action | 含义 | |-------------|------------------------------------------------------------------------------------| | 900 | 【单人通话】:收到通话请求 | | 902 | 【单人通话】:被叫已经同意接听 | | 903 | 【单人通话】:被叫已经拒绝接听 | | 904 | 【单人通话】:被叫设备正忙 | | 905 | 【单人通话】:结束通话、对方挂断通话 | | 906 | 【单人通话】:主叫取消呼叫 | | 928 | 【单人通话】:被叫:已经在其他设备接听 | | 929 | 【单人通话】:被叫:已经在其他设备拒接 | | 932 | 【单人通话】:被叫已经响铃 | | 600 | 【多人会议】:收到人会议邀请 | #### 三、UNI接口文档 ``` const livekitPlugin = uni.requireNativePlugin('LivekitMeetingPlugin'); ``` ##### 1.设置配置信息 【进入APP首页调用】 | 字段名 | 必须的 | 含义 |[README.md](../livekit-push-server/README.md) |-------------|-----|------------------------------------------------------------------------------------| | self.id | 是 | 当前用户ID(整形) | | self.name | 是 | 当前用户名称 | | logo.uri | 是 | 所有用户LOGO头像地址规则,
如:http://api.yourdomain.com/file/user-icon/{uid}
{uid}为占位符 | | api.host | 是 | webrtc-push-server服务端地址 | | livekit.uri | 是 | Livekit服务端地址 | | api.token | 否 | 当前用户token 可不传,服务端实现登录接口后可再传 | ``` livekitPlugin.setupAppConfig({ "self.id":10000, "self.name":"远方", "logo.uri":"http://api.yourdomain.com/file/user-icon/{uid}", "api.host":"http://api.yourdomain.com", "api.token":"XXXXXXXXXXXX", "livekit.uri":"wss://livekit.xx.com" }); ``` ##### 2.设置通讯录列表 【进入APP首页调用】 同步通讯录。用于选择联系人,不包含当前用户 ``` livekitPlugin.setupContactList({ "friends":[ { "id":10000, "name":"远方", }, { "id":10001, "name":"张三", } ] }); ``` ##### 3.拨打单人语音通话 id:被叫UID ``` livekitPlugin.callSingleVoice({ "id":10000 }); ``` ##### 4. 拨打单人视频通话 id:被叫UID ``` livekitPlugin.callSingleVideo({ "id":10000 }); ``` ##### 5.收到单人通话来电 收到单人通话来电,包含语音和视频通话来电 收到服务端推送的action:900的消息 ``` livekitPlugin.onSingleIncomingCall({ "id":123456789, "sender":10000, "action":900, "content":"xxxxxxx", "extra":"xxxxxxx", "timestamp":1681025412032 }); ``` ##### 6.收到单人通话事件消息 除去action:900、600 其余事件消息都透传给此接口 ``` livekitPlugin.onWebrtcEventMessage({ "id":123456789, "sender":10000, "action":901, "content":"xxxxxxx", "extra":"xxxxxxx", "timestamp":1681025412032 }); ``` ##### 7.进入会议房间 外部获取到房间信息后,进入会议房间界面 uniapp调用接口获取会议信息 http://127.0.0.1:8080/swagger-ui/index.html#/ GET /livekit/meeting/room | 字段名 | 必须的 | 含义 | |---------------|-----|----------------------------------------------------| | uid | 是 | 会议创建者UID | | name | 是 | 会议创建者名称 | | tag | 是 | 会议房间号码 | | title | 否 | 会议主题 | | description | 否 | 会议描述 | | muted | 是 | 房间是否被禁言 | | microphoneOn | 是 | 是否打开本地麦克风 | | cameraOn | 是 | 是否打开本地摄像头 | | fromGroupMode | 是 | 是否是从群发起的会议,如果true,join之前需要设置setupGroupMemberList() | ``` livekitPlugin.onJoinMeeting({ "uid":10000, "name":远方, "title":"xxxxxxx", "description":"xxxxxxx", "tag":"xxxxxxx", "muted":false, "microphoneOn":false, "cameraOn":false }); ``` ##### 8.发起快速会议 外部发起快捷会议,插件里面实现选择成员发起, fromGroupMode 是否是群里面发起 true,则从群成员里面选择,先调用setupGroupMemberList false 从好友列表选择 ``` livekitPlugin.onCreateMeeting({ "fromGroupMode":true }); ``` ##### 9.收到会议来电消息 收到action=600时,透传消息信息,插件唤起接听界面 ``` livekitPlugin.onReceiveMeetingRing({ "id":123456789, "sender":10000, "action":600, "content":"xxxxxxx", "timestamp":1681025412032 }); ``` ##### 10. 新增联系人 通讯录增增联系人 ``` livekitPlugin.addContact({ "id":10000, "name":"远方", }); ``` ##### 11. 删除联系人 通讯录删除联系人 id:用户UID ``` livekitPlugin.removeContact({ "id":10000 }); ``` ##### 12. 设置群成员信息 从群发起多人会议时,设置群成员,用于邀请其他人时从群成员列表里面选择邀请 ``` livekitPlugin.setupGroupMemberList({ "members":[ { "id":10000, "name":"远方", }, { "id":10001, "name":"张三", } ] }); ``` #### 四、globalEvent事件通知 ``` var globalEvent = uni.requireNativePlugin('globalEvent'); globalEvent.addEventListener('LivekitMeetingEvent', function(e) { }); ``` ##### 1.单人通话完结通知 所有单人通话事件均放在这个事件当中,根据状态来进行消息记录显示处理 | 字段名 | 含义 | |---------------|----------------------------------------------| | data.state | 通话状态 0:已经接通 1:已经取消 2:已拒绝 3:设备正忙 4:响应超时 5:忽略来电 | | data.duration | 通话时长(毫秒) | | data.role | 通话角色 0:主叫 1:被叫 | | data.type | 通话类型 audio:语音 video:视频 | | data.uid | 对方用户UID | ``` { "key":"ACTION_CALL_FINISHED", "data":{ "state":0, "duration":60000, "role":0, "type":"audio", "uid":10000 } } ``` ##### 2.多人会议完结通知 所有多人通话事件均放在这个事件当中,根据状态来进行消息记录显示处理 修正或者新增本地存储的会议记录 如果是加入会议,则应该是修改会议记录的接通时长,成员等 如果是发起快速会议,则是新增 | 字段名 | 含义 | |---------------|--------------| | data.tag | 房间号 | | data.duration | 通话时长(毫秒) | | data.joinedAt | 入会时间戳13位 | | data.member | 参会人信息 UID:名称 | | uid | 会议创建者UID | | name | 会议创建者名称 | ``` { "key":"ACTION_MEETING_FINISHED", "data":{ "tag":"XXXXXXXX", "duration":60000, "joinedAt":1701234567891020 "uid":10000, "name":"XXX" "member":{ "10000":"张三", "10001":"李四", "10002":"王五" } } } ``` ##### 3.开始单人呼叫 打开呼叫页面时触发 ``` { "key":"ACTION_START_CALLING", } ``` ##### 4.收到入会邀请 被他人拉入会议,显示了接听界面,插件通知保存会议记录 | 字段名 | 含义 | |-------------|---------------| | data.tag | 房间号 | | data.uid | 会议创建者UID | | data.name | 会议创建者名称 | | data.title | 主题 | | data.description | 描述 | | data.dueTime | 预约时间 | | data.createAt | 收到邀请时间,13位时间戳 | ``` { "key":"ACTION_MEETING_RING", "data":{ "tag":"XXXXXXXX", "title":"xxxx", "description":"xxxx", "createAt":1701234567891020, "dueTime":2024-03-18 14:00, "uid":10000, "name":"XXX" } } ```