lib-jitsi-meet API (low level) - lib-jitsi-meet API(低级 API)
你可以使用 Jitsi Meet API 创建带有自定义图形界面的 Jitsi Meet 视频会议。
安装
要在你的应用中嵌入 Jitsi Meet API,你需要引入 Jitsi Meet API 的库文件。 该库应从你自己的部署中加载。
<script src="https://meet.jit.si/libs/lib-jitsi-meet.min.js"></script>
现在,你可以通过全局对象 JitsiMeetJS
访问 Jitsi Meet API。
入门指南
- 首先,你需要初始化
JitsiMeetJS
对象:
JitsiMeetJS.init();
- 然后你需要创建连接对象:
var connection = new JitsiMeetJS.JitsiConnection(null, null, options);
- 接下来,我们可以为连接对象添加一些监听器,并建立与服务器的连接:
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
connection.connect();
- 当你收到
CONNECTION_ESTABLISHED
(连接建立)事件后,你需要创建JitsiConference
对象, 同时你可能还需要为会议相关事件添加监听器(例如我们将添加远程轨道、加入会议等事件的处理函数):
room = connection.initJitsiConference("conference1", confOptions);
room.on(JitsiMeetJS.events.conference.TRACK_ADDED, onRemoteTrack);
room.on(JitsiMeetJS.events.conference.CONFERENCE_JOINED, onConferenceJoined);
- 你可能还需要从摄像头和麦克风获取本地轨道:
JitsiMeetJS.createLocalTracks().then(onLocalTracks);
注意:添加监听器和创建本地音视频流并不是必需的步骤。
- 然后,你就可以创建或加入一个会议了:
room.join();
完成上述步骤后,你就已经进入会议了。 接下来,你可以继续添加代码来处理各种事件,并管理会议的流程。
组件
See the full API docs.
使用
注意:新文档已删除以下内容(2025-07-04)。
JitsiMeetJS
您可以通过 JitsiMeetJS
对象访问以下方法和对象。
-
JitsiMeetJS.init(options)
- 此方法初 始化 Jitsi Meet API。options
参数是一个包含以下属性的 JS 对象:useIPv6
- 布尔属性disableSimulcast
- 布尔属性。启用/禁用多路复用。enableWindowOnErrorHandler
- 布尔属性(默认为 false)。启用/禁用全局 onerror 处理程序(window.onerror)。disableThirdPartyRequests
- 如果为 true,则禁用 callstats,并且不会包含 callstats API。enableAnalyticsLogging
- 布尔属性(默认为 false)。启用/禁用分析日志记录。externalStorage
- 实现存储接口的对象。如果指定,则使用该对象代替localStorage
存储数据。callStatsCustomScriptUrl
- (可选)访问 callstats 客户端脚本的自定义 URL。useTurnUdp
- 布尔属性(默认为 false)。启用通过 UDP 进行 TURN 的 JVB。此选项禁用是因为不是非常有用(如果客户端可以使用 UDP,则可能也可以直接通过 UDP 连接到 JVB;但当已知 UDP TURN 在网络中被列入白名单时,启用 UDP TURN 仍然可能有用)。
-
JitsiMeetJS.JitsiConnection
-JitsiConnection
构造函数。您可以使用它创建新的服务器连接。 -
JitsiMeetJS.setLogLevel
- 更改库的日志级别。例如,要仅显示错误消息,您应该执行:
JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
-
JitsiMeetJS.createLocalTracks(options)
- 创建媒体轨道,并通过Promise
对象返回。如果被拒绝,则将JitsiTrackError
实例传递给 catch 块。options
- JS 对象,包含本地媒体轨道的配置选项。您可以更改以下属性:devices
- 传递给 GUM 的设备数组 - "desktop"、"video" 和 "audio"。如果该属性未设置,GUM 将尝试获取所有可用设备。resolution
- 本地视频的首选分辨率。constraints
- 创建轨道的首选编码属性(在浏览器的新版本中替代 "resolution")。cameraDeviceId
- 将要使用的视频设备的设备 ID。micDeviceId
- 将要使用的音频设备的设备 ID。minFps
- 视频流的最小帧率(传递给 GUM)。maxFps
- 视频流的最大帧率(传递给 GUM)。desktopSharingSourceDevice
- 应用于屏幕共享的视频输入源的设备 ID 或标签。facingMode
- 摄像头的朝向模式(可能值 - 'user'、'environment')。firePermissionPromptIsShownEvent
- 可选布尔参数。如果设置为true
,则在浏览器显示 gUM 权限提示时,将触发JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN
。fireSlowPromiseEvent
- 可选布尔参数。如果设置为true
,则当浏览器花费过长时间来解析 gUM promise 时,将触发JitsiMediaDevicesEvents.USER_MEDIA_SLOW_PROMISE_TIMEOUT
。此事件与上述JitsiMediaDevicesEvents.PERMISSION_PROMPT_IS_SHOWN
事件是互斥的。
firePermissionPromptIsShownEvent
- 已弃用。请使用 options.firePermissionPromptIsShownEvent。
-
JitsiMeetJS.createTrackVADEmitter(localAudioDeviceId, sampleRate, vadProcessor)
- 创建一个 TrackVADEmitter 服务,将音频轨道连接到 VAD(语音活动检测)处理器,以获得单个 PCM 音频样本的 VAD 评分。localAudioDeviceId
- 目标本地音频设备。sampleRate
- 发射器将运行的采样率。可能的值为 256、512、1024、4096、8192、16384。传递其他值将默认为最接近的邻居,即提供 4096 的值意味着发射器将每次处理 4096 个 PCM 样本的包,较高的值意味着更长的调用,较低的值意味着更多的调用但更短的时间。vadProcessor
- 执行 PCM 样本计算的 VAD 处理器。处理 器需要实现以下函数:getSampleLength()
- 返回 calculateAudioFrameVAD 接受的样本大小。getRequiredPCMFrequency()
- 返回处理器工作的 PCM 频率,即(16KHz、44.1 KHz 等)。calculateAudioFrameVAD(pcmSample)
- 处理 32 位浮点 PCM 样本,其大小为 getSampleLength。
-
JitsiMeetJS.enumerateDevices(callback)
- 已弃用。请使用JitsiMeetJS.mediaDevices.enumerateDevices(callback)
替代。 -
JitsiMeetJS.isDeviceChangeAvailable(deviceType)
- 已弃用。请使用JitsiMeetJS.mediaDevices.isDeviceChangeAvailable(deviceType)
替代。 -
JitsiMeetJS.isDesktopSharingEnabled()
- 如果支持桌面共享,则返回 true;否则返回 false。注意:该方法只能在JitsiMeetJS.init(options)
完成后使用,否则结果将始终为 null。 -
JitsiMeetJS.getActiveAudioDevice()
- 遍历系统中的所有音频设备,返回有关一个活跃设备的信息,即具有音频信号的设备。返回一个 Promise,解析为一个具有以下结构的对象:deviceId
- 包含找到的活跃音频轨道的设备 ID 的字符串。deviceLabel
- 包含音频设备标签的字符串。
-
JitsiMeetJS.getGlobalOnErrorHandler()
- 返回可用于附加到 window.onerror 的函数,如果启用options.enableWindowOnErrorHandler
,则返回库使用的函数。(函数(message、source、lineno、colno、error))。 -
JitsiMeetJS.mediaDevices
- JS 对象,包含与媒体设备交互的方法。可用的方法如下:isDeviceListAvailable()
- 如果支持获取设备列表,则返回 true;否则返回 false。isDeviceChangeAvailable(deviceType)
- 如果支持更改输入(相机/麦克风)或输出(音频)设备,则返回 true;否则返回 false。deviceType
是要更改的设备类型。未定义或 'input' 代表输入设备,'output' 代表音频输出设备。enumerateDevices(callback)
- 返回可用设备的列表,作为参数传递给回调函数。每个设备都是一个 MediaDeviceInfo 对象,具有以下属性:label
- 设备的名称kind
- "audioinput"、"videoinput" 或 "audiooutput"deviceId
- 设备的 IDgroupId
- 组标识符,如果两个设备属于同一物理设备,则它们具有相同的组标识符;例如,具有内置摄像头和麦克风的监视器。
setAudioOutputDevice(deviceId)
- 设置当前音频输出设备。deviceId
- 来自JitsiMeetJS.enumerateDevices()
的 'audiooutput' 设备 ID,'' 表示默认设备。getAudioOutputDevice()
- 返回当前使用的音频输出设备 ID,'' 表示默认设备。isDevicePermissionGranted(type)
- 返回一个 Promise,解析为 true,如果用户授予了媒体设备的权限。type
- 'audio'、'video' 或undefined
。如果是undefined
,则检查是否同时授予了音频和视频权限。addEventListener(event, handler)
- 附加事件处理程序。removeEventListener(event, handler)
- 移除事件处理程序。
-
JitsiMeetJS.events
- JS 对象,包含 API 使用的所有事件。当您尝试订阅连接或会议事件时,您需要该 JS 对象。 我们有两种事件类型 - 连接和会议。您可以使用以下代码访问事件JitsiMeetJS.events.<event_type>.<event_name>
。 例如,如果您想使用在某人离开会议时触发的会议事件,可以使用以下代码 -JitsiMeetJS.events.conference.USER_LEFT
。 我们支持以下事件:conference
TRACK_ADDED
- 收到流。(参数 - JitsiTrack)TRACK_REMOVED
- 移除流。(参数 - JitsiTrack)TRACK_MUTE_CHANGED
- JitsiTrack 被静音或取消静
音。
TRACK_AUDIO_OUTPUT_CHANGED
- 音频输出设备已更改。USER_JOINED
- 用户加入会议。(参数 - User)USER_LEFT
- 用户离开会议。(参数 - User)DISPLAY_NAME_CHANGED
- 用户更改了他们的显示名称。(参数 - User)AVATAR_CHANGED
- 用户更改了他们的头像。(参数 - User)PARTICIPANT_ROLE_CHANGED
- 用户角色已更改。(参数 - User)SUBJECT_CHANGED
- 会议主题已更改。PASSWORD_REQUIRED
- 会议需要密码。PASSWORD_SET
- 会议设置了密码。PASSWORD_REMOVED
- 会议删除了密码。MESSAGE_RECEIVED
- 收到消息。(参数 - Message)MESSAGE_SENDER_CHANGED
- 消息发送者已更改。KICKED
- 用户已被踢出会议。KICKED_BY_SERVER
- 用户已被服务器踢出。MUTE_EVERYONE
- 会议中的所有用户都已被静音。UNMUTE_EVERYONE
- 会议中的所有用户已被取消静音。MEETINGS_ERRORS
- 会议错误。STARTED
- 会议已开始。ENDED
- 会议已结束。AVATAR_UPDATED
- 用户的头像已更新。USER_DROPPED
- 用户掉线。JVB_CONNECTION_ESTABLISHED
- JVB 连接已建立。JVB_CONNECTION_FAILED
- JVB 连接失败。JVB_CONNECTION_LOST
- JVB 连接丢失。JVB_CONNECTION_RESTORED
- JVB 连接恢复。CONFERENCE_MUC_JOINED
- 会议已经加入 MUC。CONFERENCE_MUC_LEFT
- 离开会议的 MUC。SPEAKER_STATS_UPDATED
- 演讲者统计信息已更新。USER_VIDEO_MUTED
- 用户已将视频静音。USER_AUDIO_MUTED
- 用户已将音频静音。AUDIO_MUTED
- 用户已静音。AUDIO_UNMUTED
- 用户已取消静音。VIDEO_MUTED
- 用户已关闭视频。VIDEO_UNMUTED
- 用户已开启视频。
connection
CONNECTION_ESTABLISHED
- 与服务器建立连接。CONNECTION_FAILED
- 连接到服务器失败。CONNECTION_DISCONNECTED
- 与服务器断开连接。CONNECTION_INTERRUPTED
- 与服务器的连接中断。CONNECTION_RESTORED
- 与服务器的连接恢复。
JitsiMeetJS.logLevels
- 可用日志级别的对象。可用级别如下:ERROR
WARN
INFO
DEBUG
JitsiConnection
该对象表示与服务器的连接。您可以使用构造函数 JitsiMeetJS.JitsiConnection
创建新的 JitsiConnection
对象。JitsiConnection
具有以下方法:
-
JitsiConnection(appID, token, options)
- 构造函数。创建会议对象。appID
- Jitsi Meet 视频会议服务提供商的标识。注意:尚未实现。您可以安全地传递null
token
- 由 Jitsi Meet 视频会议服务提供商生成的密钥。该令牌将从 Jitsi Meet 服务器部署发送给提供商,以授权当前客户端。options
- 配置服务器连接的 JS 对象。您可以更改以下属性:serviceUrl
- XMPP 服务 URL。例如,'wss://server.com/xmpp-websocket' 用于 Websocket 或 '//server.com/http-bind' 用于 BOSH。bosh
- 已弃用,请使用 serviceUrl 指定 BOSH 或 Websocket URL。hosts
- JS 对象domain
muc
anonymousdomain
enableLipSync
- (可选)布尔属性,启用唇同步功能。当前仅在 Chrome 中有效,默认为禁用。clientNode
- 在 XEP-0115 'c' 段中宣传的客户端节点名称。xmppPing
- (可选)JS 对象 - xmpp ping 选项interval
- 发送 ping 请求的频率,默认:10000(10 秒)timeout
- 等待 ping 响应的时间,默认:5000(5 秒)threshold
- 允许的 ping 失败次数,默认:2
websocketKeepAlive
- (可选)设置 websocket keepalive GET 请求的间隔。默认值为 1 分钟(意味着加上一分钟的抖动)。 用于某些部署,其中需要保持 stick table 条目活跃,使用这些 GET 请求。websocketKeepAliveUrl
- (可选)用于 websocket keepalive GET 请求的特定 URL。
-
connect(options)
- 建立服务器连接。options
- 包含id
和password
属性的 JS 对象。
-
disconnect()
- 销毁服务器连接。 -
initJitsiConference(name, options)
- 创建新的JitsiConference
对象。-
name
- 会议的名称。 -
options
- 配置会议的 JS 对象。您可以更改以下属性:audioQuality
- 与音频质量相关的设置。stereo
opusMaxAverageBitrate
enableOpusDtx
bridgeChannel
- 与桥接通道相关的设置。ignoreDomain
- 如果后端宣传多个 colibri websockets,该选项允许根据域名过滤其中一些。preferSctp
- 启用 SCTP 数据通道用于桥接通道。
callStatsID
- callstats 凭据。callStatsSecret
- callstats 凭据。channelLastN
deploymentInfo
shard
userRegion
disableAudioLevels
- 布尔属性。启用/禁用音频级别。disableInitialGUM
disableRtx
- 布尔属性(默认为 false)。启用/禁用 RTX 的使用。disableSimulcast
- 启用/禁用模拟广播支持。e2eping
pingInterval
enableForcedReload
enableIceRestart
enableNoAudioDetection
- 布尔属性。enableOpusRed
enableTalkWhileMuted
- 布尔属性。enableNoisyMicDetection
- 布尔属性。enableRemb
- 布尔属性。启用/禁用 REMB 支持,默认为启用。enableTcc
- 启用/禁用 TCC 进行带宽估计,默认 为启用。focusUserJid
- 焦点参与者的真实 JID - 可以在此处被覆盖。ignoreStartMuted
- 忽略来自 jicofo 的开始静音事件。p2p
- 与点对点相关的选项。enabled
- 启用或禁用点对点连接,如果禁用,所有媒体将通过 Jitsi Videobridge 路由。codecPreferenceOrder
- 提供一种在桌面端点上设置编解码器优先级的方法。mobileCodecPreferenceOrder
- 提供一种在移动设备上设置编解码器优先级的方法,包括 RN 和基于移动浏览器的端点。stunServers
- STUN 服务器列表,例如{ urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }
backToP2PDelay
- 在第三个参与者离开房间后,会议切换回 P2P 的延迟(以秒为单位)。
recordingType
- 要使用的录制类型。rttMonitor
enabled
initialDelay
getStatsInterval
analyticsInterval
stunServers
startAudioOnly
startAudioMuted
startWithAudioMuted
startVideoMuted
startWithVideoMuted
startSilent
- 启用静音模式,将音频标记为非活动状态,不会发送/接收音频。videoQuality
- 与桥接连接相关的视频质量设置。codecPreferenceOrder
- 提供一种在桌面端点上设置编解码器优先级的方法。mobileCodecPreferenceOrder
- 提供一种在移动设备上设置编解码器优先级的方法,包括 RN 和基于移动浏览器的端点。maxBitratesVideo
- 提供一种为不同编解码器指定比特率的方法。
testing
注意:如果设置了 4 和 5,则库将向 callstats 发送事件。否则,将禁用 callstats 集成。
-
-
addEventListener(event, listener)
- 订阅传入的监听器以响应事件。event
-JitsiMeetJS.events.connection
对象中的一个事件。listener
- 事件的处理程序。
-
removeEventListener(event, listener)
- 移除事件监听器。event
- 事件。listener
- 要移除的监听器。
-
addFeature
- 向本地参与者的支持功能列表中添加新功能。feature
- 字符串,功能名称。submit
- 布尔值,默认为 false;如果为 true,则新功能列表将立即提交给其他人。
-
removeFeature
- 从本地参与者的支持功能列表中移除一个功能。feature
- 字符串,功能名称。submit
- 布尔值,默认为 false;如果为 true,则新功能列表将立即提交给其他人。
JitsiConference
该对象表示一个会议。我们有以下方法来控制会议:
-
join(password)
- 加入会议password
- 密码字符串。此参数不是必需的。
-
leave()
- 离开会议。返回 Promise。 -
myUserId()
- 获取本地用户 ID。 -
getLocalTracks()
- 返回包含本地流的 JitsiTrack 对象的数组。 -
addEventListener(event, listener)
- 将传入的监听器订阅到事件。event
-JitsiMeetJS.events.conference
对象中的一个事件。listener
- 事件的处理程序。
-
removeEventListener(event, listener)
- 移除事件监听器。event
- 事件listener
- 要移除的监听器。
-
on(event, listener)
-addEventListener
的别名 -
off(event, listener)
-removeEventListener
的别名 -
sendTextMessage(text)
- 向会议中的其他参与者发送给定字符串。 -
setDisplayName(name)
- 更改本地参与者的显示名称。name
- 新的显示名称。
-
sendCommand(name, values)
- 向其他参与者发送用户定义的系统命令name
- 命令的名称。values
- JS 对象。该对象具有以下结构:
{
value: the_value_of_the_command,
attributes: {}, // 以属性名称为键,属性值为值的映射。
children: [] // 包含具有相同结构的 JS 对象的数组。
}