# linphone_napi **Repository Path**: linsanjiu/linphone_napi ## Basic Information - **Project Name**: linphone_napi - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 9 - **Created**: 2026-05-19 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ohoslinphoneDemo ## 介绍 基于[linphone_sdk](https://gitlab.linphone.org/BC/public/linphone-sdk)适配鸿蒙底层音视频驱动,支持音视频通话。 代码编译so[移植地址](https://gitee.com/openharmony-tpc-incubate/linphone-sdk/tree/ohos_5.4.18_dev/)。 ## 安装 ### 从源码构建并安装 1. 搭建 Linux 编译环境,部署 SIP 服务器,并配置 OpenHarmony SDK 路径。 ``` export OHOS_SDK=xxxxxxx/linux # 搭建 SIP 服务器。参考: https://gitcode.com/openharmony-tpc/openharmony_tpc_samples/tree/master/ohos_pjsip#%E6%90%AD%E5%BB%BAsip%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A6%82asterisk%E6%9C%8D%E5%8A%A1%E5%99%A8 ``` 2. 运行项目根目录中的构建脚本。 ``` ./build.sh ``` 3. 在生成的 `build-ohos/out` 目录中,将 `lib` 和 `include` 复制到 `ohos_linphone` 模块中。 ### 通过包管理器安装 ``` ohpm install @ohos/linphone ``` ## 使用 1. 配置插件路径并初始化 SDK,参考 demo 中 `EntryAbility` 的 `initLinphone` 函数。 ``` Factory.instance().setLogCollectionPath(this.context.filesDir); Factory.instance().enableLogCollection(true); Factory.instance().setCacheDir(this.context.cacheDir) Factory.instance().setData(this.context.filesDir); let preferences = CorePreferences.getInstance() preferences.setContext(this.context); await preferences.copyAssetsFromPackage(); let config = Factory.instance().createConfigWithFactory(preferences.configPath(), preferences.factoryConfigPath()); preferences.config = config; Factory.instance().enableLogcatLogs(true); CoreContext.getInstance().setContext(this.context); CoreContext.getInstance().start(); LongTask.getInstance(this.context).startTask(); ``` 2. 输入账号信息,完成注册和登录。 ``` login(name: string, pwd: string, address: string) { CoreContext.getInstance().getCore().loadConfigFromXml(CorePreferences.getInstance().thirdPartyDefaultValuesPath()) let serverAddress = address + ";transport=udp"; let server_addr: Address = Factory.instance().createAddress(serverAddress); let port = server_addr?.getPort(); if (port == -1) { throw new Error("incorrect port number setting") } let identity = `sip:${name}@${server_addr.getDomain()}:${port}` let identityAddress: Address = Factory.instance().createAddress(identity); if (!identityAddress) { promptAction.showToast({ message: "无效的服务器地址", duration: 200 }) return; } let authinfo: AuthInfo = Factory.instance().createAuthInfo(name, "", pwd, "", "", server_addr.getDomain()); if (!authinfo) { promptAction.showToast({ message: "验证账户失败", duration: 200 }) return; } CoreContext.getInstance().getCore().addAuthInfo(authinfo); let accountParams = CoreContext.getInstance().getCore().createAccountParams() if (name) { identityAddress.setDisplayName(name); } let code = accountParams.setIdentityAddress(identityAddress); code = accountParams.setServerAddress(server_addr); let newlyCreatedAccount = CoreContext.getInstance().getCore().createAccount(accountParams); CoreContext.getInstance().getCore().addAccount(newlyCreatedAccount) } ``` 3. 发起通话。 ``` startCall(add: Address, isVideo: boolean) { let params = this.getCore().createCallParams(null); if (!params) { return } if (isVideo) { params.setVideoEnabled(true); this.core?.setPreferredVideoDefinitionByName("720p") } let currentCall = this.getCore().getCurrentCall(); if (currentCall) { let code = currentCall.pause(); } let callParams = params ? params : this.getCore().createCallParams(null) if (callParams == null) { let call = this.getCore().inviteAddress(add) return } let fileName = "" if (CorePreferences.getInstance().callRecordingUseSmffFormat) { fileName = CorePreferences.getInstance().ctx?.cacheDir + "/audio/" + add.getUsername + "_" + new Date().getTime() + CorePreferences.RECORDING_SMFF_FILE_EXTENSION } else { fileName = CorePreferences.getInstance().ctx?.cacheDir + "/audio/" + add.getUsername + "_" + new Date().getTime() + CorePreferences.RECORDING_MKV_FILE_EXTENSION } callParams.setRecordFile(fileName); let usernmae = add.getUsername(); let domain = add.getDomain(); let defaultAccount = callParams.getAccount() ? callParams.getAccount() : this.getCore().getDefaultAccount(); if (!defaultAccount) { return; } this.getCore().inviteAddressWithParams(add, callParams) params.unref(); } ``` 4. 接听来电。 ``` answerCall(isVideo: boolean) { // 获取来电中的call if (!this.core) { return; } let call: Call | undefined = undefined; let array = this.core.getCalls(); for (let index = 0; index < array.length; index++) { const element = array[index]; let status = element.getState(); if (status == 1 || status == 2 || status == 17) { call = element; break; } } if (call) { this.currentCall = call; let remoteParams = this.core.createCallParams(call); if (remoteParams == null) { this.currentCall.accept(); return } let remoteVideo = remoteParams.isVideoEnabled(); if (remoteVideo) { remoteParams.setVideoEnabled(true); remoteParams.setVideoDirection(3); this.core.setPreferredVideoDefinitionByName("720p") call.acceptWithParams(remoteParams); } else { this.currentCall.accept(); } } } ``` 5. 挂断通话。 ``` terminateCall() { // 1: Incoming ,0:Outgoing if (this.currentCall && this.currentCall.getDir() == 1 && (this.currentCall.getState() == 1 || this.currentCall.getState() == 17)) { this.currentCall.decline(3) // Declined 3 } else { this.currentCall?.terminate(); } } ``` 6. 联系人管理。 6a. 创建联系人。通过 Core 创建 Friend 对象,设置属性后添加到 FriendList。详见 [Friend](#friend)、[FriendList](#friendlist)。 ``` createContact(sipAddress: string, name: string, refKey: string): boolean { const core = CoreContext.getInstance().getCore(); const friend: Friend | null = core.createFriendWithAddress(sipAddress); if (!friend) { return false; } friend.edit(); friend.setName(name); friend.setRefKey(refKey); friend.setSubscribesEnabled(false); friend.setIncSubscribePolicy(1); // SubscribePolicySPDeny = 1 friend.done(); const list: FriendList | null = core.createFriendList(); if (!list) { friend.unref(); return false; } const status: number = list.addFriend(friend); if (status !== 0) { friend.unref(); return false; } list.updateSubscriptions(); return true; } ``` 6b. 监听 FriendList 同步状态。通过 FriendListListener 监听 CardDAV 同步的开始与结束。详见 [FriendListListener](#friendlistlistener)。 ``` const friendList = core.getDefaultFriendList(); friendList.addListener({ onSyncStatusChanged: (list: FriendList, state: number, message: string) => { // state: 同步状态枚举值,message: 状态描述 // SYNC_STARTED(0): 同步开始 SYNC_SUCCESSFUL(1): 同步成功 SYNC_FAILURE(2): 同步失败 if (state === 0) { console.log('CardDAV sync started'); } else if (state === 1) { console.log('CardDAV sync completed successfully'); } else if (state === 2) { console.log('CardDAV sync failed: ' + message); } } }); ``` 6c. 搜索联系人。通过 MagicSearch 统一搜索本地与远程联系人。详见 [MagicSearch](#magicsearch)、[SearchResult](#searchresult)。 ``` initSearch(): void { const search: MagicSearch = core.createMagicSearch(); search.setLimitedSearch(true); search.setSearchLimit(50); search.addListener({ onSearchResultsReceived: (search: MagicSearch) => { const results: SearchResult[] = search.getLastSearch(); for (let i = 0; i < results.length; i++) { const name = results[i].getName(); const address = results[i].getAddress(); console.log(`Found contact: ${name} - ${address.asString()}`); } } }); // filter: 搜索关键词, domain: 域名, sourceFlags: 数据源, aggregation: 聚合级别 const sourceFlags = MAGIC_SEARCH_SOURCE_FRIENDS | MAGIC_SEARCH_SOURCE_LDAP | MAGIC_SEARCH_SOURCE_REMOTE_CARDDAV; search.getContactsListAsync('john', '', sourceFlags, 0); } ``` 6d. 配置 CardDAV 远程发现(可选)。设置 CardDAV 参数以启用服务器通讯录同步。详见 [CardDavParams](#carddavparams)。 ``` setupCardDav(serverUrl: string): void { const params: CardDavParams = core.createCardDavParams(); params.setDomainFields(['carddav.example.com']); params.setUserInputFields(['username']); // Apply to a FriendList for CardDAV synchronization const friendList = core.getDefaultFriendList(); friendList.setRlsUri('https://carddav.example.com/.well-known/carddav'); friendList.syncFromServer(); } ``` 7. 聊天室。 7a. 创建 1v1 聊天室。使用 ConferenceParams 配置单聊参数,通过 Core 创建聊天室。详见 [ChatRoom](#chatroom)、[ConferenceParams](#conferenceparams)。 ``` createOrEnterChatRoom1v1(peerSip: string): ChatRoom | null { const account = core.getDefaultAccount(); if (!account) { return null; } const accountParams = account.getParams(); const localAddress: Address | null = accountParams.getIdentityAddress(); if (!localAddress) { return null; // 账户未注册或配置不完整 } let sipAddress = peerSip.startsWith('sip:') ? peerSip : 'sip:' + peerSip; const peerAddr: Address | null = core.createAddress(sipAddress); if (!peerAddr) { return null; } const params = core.createConferenceParams(); params.setChatEnabled(true); params.setGroupEnabled(false); // 1v1 单聊 params.setAccount(account); const chatParams = params.getChatParams(); if (chatParams) { chatParams.setEphemeralLifetime(0); // 禁用阅后即焚 chatParams.setBackend(1); chatParams.setEncryptionBackend(0); // LIME.EncryptionBackend.None = 0(避免 LIME 密钥未就绪) } params.setSecurityLevel(0); // Conference.SecurityLevel.None = 0 const room: ChatRoom | null = core.createChatRoom(params, [peerAddr]); return room; } ``` 7b. 创建群聊聊天室。设置 groupEnabled 和 subject,传入多个参与者地址。详见 [ChatRoom](#chatroom)。 ``` createGroupChatRoom(subject: string, peerAddresses: string[]): ChatRoom | null { const account = core.getDefaultAccount(); if (!account) { return null; } const addressObjects: Address[] = []; for (let i = 0; i < peerAddresses.length; i++) { let sipAddress = peerAddresses[i].startsWith('sip:') ? peerAddresses[i] : 'sip:' + peerAddresses[i]; const addr: Address | null = core.createAddress(sipAddress); if (addr) { addressObjects.push(addr); } } const params = core.createConferenceParams(); params.setChatEnabled(true); params.setGroupEnabled(true); // 群聊 params.setSubject(subject); params.setAccount(account); const room: ChatRoom | null = core.createChatRoom(params, addressObjects); return room; } ``` 7c. 监听聊天室事件。通过 ChatRoomListener 接收新消息、状态变化、参与者变更等回调。详见 [ChatRoomListener](#chatroomlistener)。 ``` room.addListener({ onMessageReceived: (room: ChatRoom, msg: ChatMessage) => { const text = msg.getText(); const from = msg.getFromAddress().getUsername(); console.log(`New message from ${from}: ${text}`); }, onStateChanged: (room: ChatRoom, state: number) => { // state: 0=空闲, 1=通话中, 2=关闭 console.log(`ChatRoom state changed: ${state}`); }, onParticipantAdded: (room: ChatRoom, participant: Participant) => { console.log('Participant added'); }, onParticipantRemoved: (room: ChatRoom, participant: Participant) => { console.log('Participant removed'); }, onIsComposingReceived: (room: ChatRoom, remoteAddress: Address) => { console.log(`${remoteAddress.getUsername()} is typing...`); } }); ``` 7d. 发送文本消息。通过 ChatRoom 的 sendText 便捷方法直接发送文本。详见 [ChatRoom](#chatroom)、[ChatMessage](#chatmessage)。 ``` sendText(text: string): boolean { const room = this.currentRoom; if (!room || text.trim().length === 0) { return false; } const msg: ChatMessage | null = room.sendText(text); if (!msg) { return false; } return true; } ``` 7e. 发送文件消息。创建 Content 设置文件属性,通过 ChatRoom 创建文件传输消息后发送。详见 [ChatRoom](#chatroom)、[Content](#content)。 ``` sendFileMessage(filePath: string, fileName: string): boolean { const content: Content | null = Factory.instance().createContent(); if (!content) { return false; } content.setType('file'); content.setName(fileName); content.setFilePath(filePath); const msg: ChatMessage | null = this.currentRoom.createFileTransferMessage(content); if (!msg) { content.unref(); return false; } msg.send(); return true; } ``` 7f. 加载聊天历史记录。分页获取聊天室中的历史消息。详见 [ChatRoom](#chatroom)。 ``` loadHistory(offset: number, pageSize: number): ChatMessage[] { const historySize = this.currentRoom.getHistorySize(); if (offset >= historySize) { return []; } let end = offset + pageSize; if (end > historySize) { end = historySize; } const messages: ChatMessage[] = this.currentRoom.getHistoryRange(offset, end); return messages; } ``` ## API 参考 ### 通用约定 - **推荐入口**:应用层通过 `import { Factory, Core, Call, ... } from '@ohos/linphone'` 使用;初始化请使用 `Factory.instance()`,底层 `NapiFactory` 由 Factory 内部封装。 - **Core 生命周期**:`Core` 为私有构造,须 `Factory.createCoreWithConfig(config)` 创建;创建后调用 `core.start()`,退出时 `core.stop()`;可启用 `setAutoIterateEnabled(true)` 或手动 `iterate()`。 - **事件监听**:优先使用 `*Listener` 接口 + `addListener()` / `removeListener()`;`*Cbs` 类为底层 C 回调容器,不建议直接使用。 - **引用计数**:多数原生对象提供 `ref()` / `unref()`,跨作用域持有对象时注意配对调用。 - **状态枚举**:回调与 getter 中状态字段类型为 `number`,请对照本文「枚举」章节中的 `CallState`、`RegistrationState` 等。 - **构造限制**: - `MagicSearch`:`new MagicSearch(max_results)` 或 `Core.createMagicSearch()`(须已创建并 start Core) - `Friend`:`new Friend(address)` 或 `Core.createFriendWithAddress(uri)` - `FriendList`:`new FriendList(name)` 或 `Core.createFriendList()` - `ChatRoom`:群聊 `new ChatRoom(participants[])`;1v1 使用 `Core.createChatRoom(params, participants)` - `SearchResult` / `Participant`:由 SDK 返回,不可用户 `new` ### SDK 初始化与配置 #### NapiFactory NapiFactory(由Factory组件内部调用)是OpenHarmony智能终端操作系统中负责创建和管理Linphone相关对象的基础服务组件,也可通过 `libohos_linphone.so` 直接访问。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `init` | - | void | 初始化Linphone SDK,包括设置缓存目录、配置目录、数据目录、数据资源目录、下载目录、图片资源目录、日志收集目录、音频资源目录、顶层资源目录,并加载Liblinphone与Mediastreamer插件 | | `setDebugMode` | enable: boolean, tag: string | void | 设置调试模式 | | `setLoggerDomain` | domain: string | void | 设置日志域名称 | | `enableLogcatLogs` | enable: boolean | void | 启用 logcat 风格日志输出 | | `setCacheDir` | path: string | void | 设置应用缓存目录 | | `setConfigDir` | path: string | void | 设置配置文件目录 | | `setDataDir` | path: string | void | 设置用户数据目录 | | `setDataResourcesDir` | path: string | void | 设置数据资源目录 | | `getDataResourcesDir` | - | string | 获取数据资源目录 | | `setDownloadDir` | path: string | void | 设置文件下载目录 | | `setImageResourcesDir` | path: string | void | 设置图片资源目录 | | `getImageResourcesDir` | - | string | 获取图片资源目录 | | `isCacheDirSet` | - | boolean | 查询缓存目录是否已设置 | | `isConfigDirSet` | - | boolean | 查询配置目录是否已设置 | | `isDataDirSet` | - | boolean | 查询数据目录是否已设置 | | `isDatabaseStorageAvailable` | - | boolean | 查询是否支持联系人数据库存储 | | `isDownloadDirSet` | - | boolean | 查询下载目录是否已设置 | | `isImdnAvailable` | - | boolean | 查询是否支持IMDN送达回执 | | `isQrcodeAvailable` | - | boolean | 查询是否支持二维码功能 | | `getLiblinphonePluginsDir` | - | string | 获取Liblinphone插件目录 | | `setLiblinphonePluginsDir` | path: string | void | 设置Liblinphone插件目录 | | `setLogCollectionPath` | path: string | void | 设置日志收集目录 | | `getMspluginsDir` | - | string | 获取Mediastreamer插件目录 | | `setMspluginsDir` | path: string | void | 设置Mediastreamer插件目录 | | `getRingResourcesDir` | - | string | 获取来电铃声资源目录 | | `setRingResourcesDir` | path: string | void | 设置来电铃声资源目录 | | `getSoundResourcesDir` | - | string | 获取音频资源目录 | | `setSoundResourcesDir` | path: string | void | 设置音频资源目录 | | `getTopResourcesDir` | - | string | 获取顶层资源目录 | | `setTopResourcesDir` | path: string | void | 设置顶层资源目录 | | `computeHa1ForAlgorithm` | userid: string, password: string, realm: string, algorithm: string | string \| null | 根据Digest认证算法(MD5或SHA-256)计算SIP协议认证环节所需的HA1摘要值 | | `getCore` | prt: bigint | Core | 获取当前Core指针实例(仅在模块内部使用) | | `createAddress` | addr: string | Address | 从URI字符串创建Address对象 | | `createAuthInfo` | username: string, userid: string, passwd: string, ha1: string, realm: string, domain: string | AuthInfo | 创建SIP认证信息,含域名参数 | | `createAuthInfo2` | username: string, userid: string, passwd: string, ha1: string, realm: string, domain: string, algorithm: string | AuthInfo | 创建SIP认证信息,含域名与认证算法参数 | | `createAuthInfo3` | username: string, accessToken: BearerToken, realm: string | AuthInfo | 使用OAuth2 Token创建SIP认证信息 | | `createBearerToken` | token: string, expirationTime: number | BearerToken | 创建OAuth2访问令牌对象 | | `createConfigWithFactory` | path: string, factoryPath: string | Config | 使用指定的工厂路径创建配置对象 | | `createCoreWithConfig` | config: Config | Core | 基于Config创建Core实例 | | `createContent` | - | Content \| null | 创建内容为空的Content对象(用于SIP消息体的初始化) | | `createVcard` | - | Vcard \| null | 创建空vCard对象 | | `createFriendPhoneNumber` | phoneNumber: string, label?: string | FriendPhoneNumber \| null | 创建带标签的电话号码对象 | #### Config Linphone 配置文件读写,支持按 section/key 存取字符串、整型与布尔值。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `isReadonly` | - | boolean | 查询配置是否为只读 | | `getString` | section: string, key: string, defaultValue: string | string | 读取配置节中的字符串值 | | `setString` | section: string, key: string, value: string | void | 写入配置节中的字符串值 | | `getInt` | section: string, key: string, defaultValue: number | number | 读取配置节中的整型值 | | `setInt` | section: string, key: string, value: number | void | 写入配置节中的整型值 | | `getBool` | section: string, key: string, defaultValue: boolean | boolean | 读取配置节中的布尔值 | | `setBool` | section: string, key: string, value: boolean | void | 写入配置节中的布尔值 | | `getFilename` | - | string | 获取配置文件路径 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### SIP 地址与认证 #### Address SIP/电话 URI 解析与构造,支持用户名、域名、端口、传输协议等字段。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUsername` | - | string | 获取用户名 | | `setUsername` | username: string | void | 设置用户名 | | `getDomain` | - | string | 获取域名 | | `setDomain` | domain: string | void | 设置域名 | | `getPort` | - | number | 获取端口 | | `setPort` | port: number | void | 设置端口 | | `getDisplayName` | - | string | 获取显示名称 | | `setDisplayName` | displayName: string | void | 设置对象的显示名称 | | `getTransport` | - | number | 获取传输协议类型及对应的安全配置 | | `setTransport` | transport: number | void | 设置传输协议 | | `getSecure` | - | boolean | 获取安全设置状态 | | `setSecure` | enabled: boolean | void | 设置安全连接状态 | | `isSip` | - | boolean | SIP协议是否启用 | | `isValid` | - | boolean | 当前配置是否有效 | | `getScheme` | - | string | 获取URL的scheme部分和HTTP方法类型 | | `getMethodParam` | - | string | 获取方法的参数值 | | `setMethodParam` | method: string | void | 设置HTTP方法参数 | | `getPassword` | - | string | 获取当前设置的密码 | | `setPassword` | password: string | void | 设置密码 | | `asString` | - | string | 转换为完整字符串格式 | | `asStringUriOnly` | - | string | 转为仅包含URI部分的SIP URI字符串 | | `asStringUriOnlyOrdered` | - | string | 转为有序的SIP URI字符串(仅包含URI部分) | | `clean` | - | void | 清理SIP地址中不符合规范的参数(SIP地址解析) | | `clone` | - | Address | 克隆地址对象 | | `weakEqual` | address2: Address | boolean | 比较两个地址(忽略大小写和可选参数) | | `equal` | address2: Address | boolean | 相等比较两个地址 | | `lesser` | other: Address | boolean | 按字典序比较两个地址,判断当前地址是否小于目标地址 | | `getHeader` | headerName: string | string | 获取SIP请求头字段值 | | `setHeader` | headerName: string, headerValue: string | void | 设置SIP请求头字段值 | | `hasParam` | paramName: string | boolean | 是否包含URI参数 | | `getParam` | paramName: string | string | 获取URI参数 | | `setParam` | paramName: string, paramValue: string | void | 设置URI参数 | | `setParams` | params: string | void | 设置URI参数 | | `hasUriParam` | uriParamName: string | boolean | 是否包含URI参数 | | `getUriParam` | uriParamName: string | string | 获取URI参数 | | `setUriParam` | uriParamName: string, uriParamValue: string | void | 设置URI参数 | | `setUriParams` | params: string | void | 设置URI参数列表 | | `removeUriParam` | uriParamName: string | void | 移除URI参数 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### AuthInfo SIP Digest / TLS / OAuth2 认证凭据。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUsername` | - | string | 获取用户名 | | `getUserid` | - | string | 获取用户ID | | `getPassword` | - | string | 获取密码 | | `getHa1` | - | string | 获取预计算的HA1摘要(用于Digest认证) | | `getDomain` | - | string | 获取域名 | | `getRealm` | - | string | 获取认证域 | | `getAlgorithm` | - | string | 获取认证算法 | | `setUsername` | username: string | void | 设置用户名 | | `setUserid` | userId: string | void | 设置用户ID | | `setPassword` | password: string | void | 设置密码 | | `setHa1` | ha1: string | void | 设置HA1摘要 | | `setDomain` | domain: string | void | 设置域名 | | `setRealm` | realm: string | void | 设置认证域 | | `setAlgorithm` | algorithm: string | void | 设置认证算法 | | `getTlsCert` | - | string | 获取TLS证书 | | `setTlsCert` | cert: string | void | 设置TLS证书 | | `getTlsKey` | - | string | 获取TLS密钥 | | `setTlsKey` | key: string | void | 设置TLS密钥 | | `getTlsCertPath` | - | string | 获取TLS证书路径 | | `setTlsCertPath` | path: string | void | 设置TLS证书路径 | | `getTlsKeyPath` | - | string | 获取TLS密钥路径 | | `setTlsKeyPath` | path: string | void | 设置TLS密钥路径 | | `getTlsKeyPassword` | - | string | 获取TLS密钥的密码 | | `setTlsKeyPassword` | password: string | void | 设置TLS密钥的密码 | | `addAvailableAlgorithm` | algorithm: string | void | 添加可用算法 | | `clearAvailableAlgorithms` | - | void | 清空可用认证算法列表 | | `clone` | - | AuthInfo | 克隆认证信息对象 | | `isEqualButAlgorithms` | other: AuthInfo | boolean | 比较两个AuthInfo是否相同(忽略算法差异) | | `getAuthorizationServer` | - | string | 获取OAuth2授权服务器地址 | | `setAuthorizationServer` | uri: string | void | 设置OAuth2授权服务器地址 | | `getTokenEndpointUri` | - | string | 获取令牌端点URI | | `setTokenEndpointUri` | uri: string | void | 设置令牌端点URI | | `getClientId` | - | string | 获取OAuth2客户端ID | | `setClientId` | clientId: string | void | 设置OAuth2客户端ID | | `getExpires` | - | number | 获取过期时间 | | `setExpires` | expires: number | void | 设置过期时间 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### BearerToken OAuth2访问令牌对象,用于Token认证。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getToken` | - | string | 获取访问令牌字符串 | | `getExpirationTime` | - | number | 获取令牌过期时间(Unix时间戳) | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### SIP 账户 #### Account SIP账户实例,负责注册状态维护、通话记录存储和聊天室列表管理。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getState` | - | number | 获取账户注册状态 | | `unref` | - | void | 引用计数-1 | | `getParams` | - | AccountParams | 获取账户参数 | | `getContactAddress` | - | Address | 获取联系人地址 | | `findAuthInfo` | - | AuthInfo | 获取认证信息 | | `setParams` | params: AccountParams | void | 设置参数 | | `ref` | - | void | 引用计数+1 | | `getErrorInfo` | - | ErrorInfo | 获取错误信息 | | `getError` | - | number | 获取错误代码 | | `refreshRegister` | - | void | 立即刷新SIP REGISTER注册 | | `pauseRegister` | - | void | 暂停SIP注册(注销Contact) | | `getUnreadChatMessageCount` | - | number | 获取未读聊天消息数量 | | `getMissedCallsCount` | - | number | 获取未接来电数量 | | `resetMissedCallsCount` | - | void | 清空未接来电数量 | | `getCallLogs` | - | CallLog[] | 获取通话记录 | | `clearCallLogs` | - | void | 清空通话记录 | | `getChatRooms` | - | ChatRoom[] | 获取聊天室列表 | | `isPhoneNumber` | username: string | boolean | 用户名是否为电话号码格式 | | `normalizePhoneNumber` | username: string | string | 规范化电话号码为 E.164 格式 | | `normalizeSipUri` | username: string | Address | 规范化SIP URI | | `addCustomParam` | key: string, value: string | void | 添加自定义参数 | | `getCustomParam` | key: string | string | 获取自定义参数 | | `setContactAddress` | address: Address | void | 设置联系人地址 | | `clone` | - | Account \| null | 克隆当前账户对象及对应配置 | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部使用,外部直接调用可能导致内存泄漏或未定义行为) | | `getTransport` | - | number | 获取传输协议 | | `isAvpfEnabled` | - | boolean | AVPF是否启用 | | `getDependency` | - | Account | 获取依赖账户 | | `setDependency` | dependsOn: Account | void | 设置依赖账户 | | `setCustomHeader` | headerName: string, headerValue: string | void | 设置自定义SIP请求头 | | `getCustomHeader` | headerName: string | string | 获取自定义SIP请求头 | | `filterChatRooms` | filter: string | ChatRoom[] | 按条件过滤聊天室列表 | | `getCallLogsForAddress` | remoteAddress: Address | CallLog[] | 根据远程地址获取通话记录 | | `addListener` | listener: AccountListener | void | 添加高级事件监听器 | | `removeListener` | listener: AccountListener | void | 移除监听器 | | `getCurrentCallbacks` | - | AccountCbs \| null | 返回当前账户的回调对象。注意:Listener接口提供了更完善的类型检查和IDE支持,建议优先使用addListener()/removeListener()管理事件监听 | | `getConferenceInformationList` | - | ConferenceInfo[] | 获取会议信息列表 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | #### AccountParams 创建或更新 SIP 账户时的参数集合。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `setIdentityAddress` | identity: Address | LinphoneStatus | 设置身份地址,返回操作状态码 | | `setServerAddress` | serverAddress: Address | LinphoneStatus | 设置服务器地址,返回操作状态码 | | `setRegisterEnabled` | enable: boolean | void | 启用(true)或禁用(false)注册功能 | | `unref` | - | void | 引用计数-1 | | `setAudioVideoConferenceFactoryAddress` | address: Address | void | 设置音视频会议工厂地址 | | `getAudioVideoConferenceFactoryAddress` | - | Address | 获取音视频会议工厂地址(格式示例: sip:conference@example.com) | | `setConferenceFactoryAddress` | address: Address | void | 设置会议工厂地址 | | `getConferenceFactoryAddress` | - | Address | 获取会议工厂地址(格式示例: sip:conference@example.com) | | `getIdentityAddress` | - | Address | 获取身份URI地址对象 | | `getServerAddress` | - | Address | 获取服务器地址 | | `isRegisterEnabled` | - | boolean | 注册功能是否启用 | | `getDomain` | - | string | 获取域名 | | `clone` | - | AccountParams \| null | 克隆账户参数对象 | | `ref` | - | void | 引用计数+1 | | `getExpires` | - | number | 获取过期时间 | | `setExpires` | expires: number | void | 设置过期时间 | | `isPublishEnabled` | - | boolean | 发布功能是否启用 | | `setPublishEnabled` | enable: boolean | void | 启用(true)或禁用(false)消息发布功能 | | `isCpimInBasicChatRoomEnabled` | - | boolean | 基础聊天室中CPIM协议支持状态(true表示启用,false表示禁用) | | `setCpimInBasicChatRoomEnabled` | enable: boolean | void | 启用或禁用基础聊天室中的CPIM协议支持 | | `getPublishExpires` | - | number(秒) | 获取消息发布功能的过期时间(以秒为单位) | | `setPublishExpires` | expires: number(秒) | void | 设置消息发布功能的过期时间(以秒为单位) | | `getRealm` | - | string | 获取SIP认证域 | | `setRealm` | realm: string | void | 设置SIP认证域 | | `getPrivacy` | - | number | 获取SIP协议隐私头字段值 | | `setPrivacy` | privacy: number | void | 设置隐私设置(0:关闭,1:基础隐私-仅隐藏用户姓名和联系方式,2:严格隐私-隐藏所有可识别用户身份的信息) | | `getTransport` | - | number | 获取当前使用的传输协议类型 | | `setTransport` | transport: number | void | 设置传输协议 | | `isOutboundProxyEnabled` | - | boolean | 出站代理是否启用 | | `setOutboundProxyEnabled` | enable: boolean | void | 启用或禁用出站代理 | | `getPushNotificationAllowed` | - | boolean | 推送通知是否允许 | | `setPushNotificationAllowed` | allow: boolean | void | 允许(true)或禁止(false)推送通知 | | `isPushNotificationAvailable` | - | boolean | 推送通知是否可用 | | `getContactParameters` | - | string | 获取Contact头参数 | | `setContactParameters` | contactParams: string | void | 设置Contact头参数 | | `getAvpfMode` | - | number | 获取AVPF(音频视频配置文件)的工作模式(0=禁用,1=启用,2=自动) | | `setAvpfMode` | mode: number | void | 设置AVPF(音频视频配置文件)的工作模式(0=禁用,1=启用) | | `getAvpfRrInterval` | - | number | 获取AVPF的RR(接收方报告)间隔时间 | | `setAvpfRrInterval` | interval: number | void | 设置AVPF的RR(接收方报告)间隔时间 | | `isDialEscapePlusEnabled` | - | boolean | 检查拨号转义加号功能是否启用(true表示已启用,false表示未启用) | | `setDialEscapePlusEnabled` | enable: boolean | void | 启用或禁用拨号转义加号功能 | | `getInternationalPrefix` | - | string | 获取国际号码前缀 | | `setInternationalPrefix` | prefix: string | void | 设置国际号码前缀 | | `isQualityReportingEnabled` | - | boolean | 通话质量报告功能启用状态(true表示启用,false表示禁用) | | `setQualityReportingEnabled` | enable: boolean | void | 启用(true)或禁用(false)通话质量报告功能 | | `getQualityReportingCollector` | - | string | 获取通话质量报告收集服务器地址 | | `setQualityReportingCollector` | collector: string | void | 设置通话质量报告收集服务器地址 | | `getQualityReportingInterval` | - | number | 获取通话质量报告间隔 | | `setQualityReportingInterval` | interval: number(秒) | void | 设置通话质量报告间隔(秒) | | `getRefKey` | - | string | 获取引用键 | | `setRefKey` | refkey: string | void | 设置引用键 | | `getIdkey` | - | string | 获取账户唯一标识键 | | `setIdkey` | idkey: string | void | 设置账户唯一标识键 | | `isRtpBundleEnabled` | - | boolean | RTP捆绑功能是否启用 | | `setRtpBundleEnabled` | enable: boolean | void | 启用或禁用RTP捆绑功能 | | `getLimeServerUrl` | - | string | 获取LIME服务器URL | | `setLimeServerUrl` | url: string | void | 设置LIME服务器URL | | `getPictureUri` | - | string | 获取头像图片URI | | `setPictureUri` | uri: string | void | 设置头像图片URI | | `getMwiServerAddress` | - | Address | 获取语音留言指示(MWI)服务器地址 | | `setMwiServerAddress` | address: Address | void | 设置语音留言指示(MWI)服务器地址 | | `getVoicemailAddress` | - | Address | 获取语音信箱地址 | | `setVoicemailAddress` | address: Address | void | 设置语音信箱地址 | | `getRoutesAddresses` | - | Address[] | 获取路由地址列表 | | `setRoutesAddresses` | routes: Address[] | void | 设置路由地址列表 | #### AccountListener 账户注册状态变化事件回调接口。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onRegistrationStateChanged` | account: Account, state: number, message: string | void | 账户注册状态变化回调 | #### AccountCbs 基于原生 C 语言实现的回调接口;`AccountListener` 接口类型提供了明确的类型检查和更丰富的IDE智能提示功能(支持自动补全和参数提示),强烈推荐通过实现 `AccountListener` 接口并使用 `addListener()` 方法注册监听器。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 通话 #### Call 单次通话会话,支持接听、挂断、保持、转接和本地录像操作。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getRemoteAddress` | - | Address | 获取远端 SIP 地址 | | `getToAddress` | - | Address | 获取 To 头 SIP 地址 | | `pause` | - | void | 暂停当前通话 | | `getDir` | - | number | 获取通话方向(0: 呼出(OUTBOUND),1: 呼入(INBOUND)) | | `decline` | reason: number | number | 拒绝通话 | | `terminate` | - | number | 终止当前通话 | | `getState` | - | number | 获取通话连接状态 | | `accept` | - | number | 接受来电 | | `acceptWithParams` | param: CallParams | number | 使用指定 CallParams 接听来电 | | `setCameraEnabled` | enable: boolean | void | 启用或禁用摄像头 | | `update` | param: CallParams | number | 更新通话参数 | | `addListener` | listener: CallListener | void | 注册高级事件监听器 | | `removeListener` | listener: CallListener | void | 移除事件监听器 | | `sendDtmf` | dtmf: string | number | 发送 DTMF 双音多频信号 | | `sendDtmfs` | dtmfs: string | number | 发送 DTMF 双音多频信号序列 | | `cancelDtmfs` | - | void | 取消待发送的DTMF双音多频信号 | | `getCurrentQuality` | - | number | 获取当前通话质量指标 | | `acceptUpdate` | param: CallParams | void | 接受远端发起的通话参数更新 | | `getParams` | - | CallParams | 获取参数 | | `getRemoteParams` | - | CallParams | 获取远端参数 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getLqRating` | type: LinphoneStreamType | number | 获取网络连接质量评分(LQ Rating,评分范围0-5,5表示最佳质量,0表示最差质量) | | `getLocalQualityRate` | type: LinphoneStreamType | number | 获取本地媒体流质量评分 | | `getRemoteQualityRate` | type: LinphoneStreamType | number | 获取远端媒体流质量评分 | | `getCurrentParams` | - | CallParams | 获取当前通话参数 | | `getOutputAudioDevice` | - | AudioDevice | 获取输出音频设备 | | `setOutputAudioDevice` | device: AudioDevice | void | 设置输出音频设备 | | `getInputAudioDevice` | - | AudioDevice | 获取输入音频设备 | | `setInputAudioDevice` | device: AudioDevice | void | 设置输入音频设备 | | `getErrorInfo` | - | ErrorInfo | 获取错误信息 | | `getCallLog` | - | CallLog | 获取通话记录 | | `startRecording` | - | void | 开始录音 | | `isRecording` | - | boolean | 是否正在录音 | | `stopRecording` | - | void | 停止录音 | | `getDuration` | - | number | 获取会议时长(秒) | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部使用,SDK外部直接调用可能导致内存访问违规或数据不一致) | | `getReason` | - | number | 获取原因码 | | `getRemoteUserAgent` | - | string | 获取远端用户的User Agent信息 | | `getRemoteContact` | - | string | 获取远端联系人 | | `getConference` | - | Conference | 获取会议 | | `getChatRoom` | - | ChatRoom | 获取聊天室 | | `getPlayer` | - | Player | 获取播放器 | | `resume` | - | number | 恢复通话 | | `redirectTo` | address: Address | number | 重定向通话至指定地址 | | `transfer` | referTo: string | number | 在不知道目标方状态的情况下转接通话至指定 URI | | `getAverageQuality` | - | number | 获取平均音频质量评分(MOS标准:1为最差,5为最佳) | | `getAudioStats` | - | CallStats | 获取音频流统计信息 | | `getVideoStats` | - | CallStats | 获取视频流统计信息 | | `isCameraEnabled` | - | boolean | 摄像头是否启用 | | `getSpeakerVolumeGain` | - | number | 获取扬声器音量增益 | | `setSpeakerVolumeGain` | gain: number | void | 设置扬声器音量增益 | | `getMicrophoneVolumeGain` | - | number | 获取麦克风音量增益 | | `setMicrophoneVolumeGain` | gain: number | void | 设置麦克风音量增益 | | `getSpeakerMuted` | - | boolean | 获取扬声器静音状态 | | `setSpeakerMuted` | muted: boolean | void | 设置扬声器是否静音 | | `getMicrophoneMuted` | - | boolean | 获取麦克风静音状态 | | `setMicrophoneMuted` | muted: boolean | void | 设置麦克风是否静音 | | `isEchoCancellationEnabled` | - | boolean | 回声消除是否启用 | | `setEchoCancellationEnabled` | enable: boolean | void | 启用(true)或禁用(false)回声消除功能 | | `getPlayVolume` | - | number | 获取播放音量 | | `getRecordVolume` | - | number | 获取录音音量 | | `acceptEarlyMedia` | - | number | 接受早期媒体(183 Session Progress),即在会话建立前接收的媒体数据 | | `acceptEarlyMediaWithParams` | params?: CallParams | number | 接受早期媒体并应用呼叫参数 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `getRequestAddress` | - | Address | 获取请求地址 | | `getDiversionAddress` | - | Address | 获取呼叫转移(Diversion)地址 | | `getReferToAddress` | - | Address | 获取REFER目标地址 | | `getReferredByAddress` | - | Address | 获取REFER发起方地址 | | `getRemoteContactAddress` | - | Address | 获取远端联系人地址 | | `transferTo` | address: Address | number | 将通话转移至指定地址 | | `transferToAnother` | call: Call | number | 将通话转接至另一对象 | | `getTransferState` | - | number | 获取通话转接状态 | | `hasTransferPending` | - | boolean | 是否有通话正在等待被转移 | | `acceptTransfer` | - | void | 接受通话转接 | | `getReferTo` | - | string | 获取转接目标地址 | | `getTransfererCall` | - | Call | 获取发起转接的通话 | | `getTransferTargetCall` | - | Call | 获取转接目标通话 | | `takeVideoSnapshot` | path: string | number | 截取视频画面并保存到指定路径 | | `takePreviewSnapshot` | path: string | number | 截取预览画面(音视频通话) | | `sendVfuRequest` | - | void | 发送视频快速更新(VFU)请求 | | `zoom` | zoomFactor: number, cx: number, cy: number | void | 设置缩放因子与中心坐标 | | `askedToAutoanswer` | - | boolean | 查询是否被要求自动接听 | | `terminateWithErrorInfo` | errorInfo: ErrorInfo | number | 携带错误信息终止通话 | | `deferUpdate` | - | number | 延迟音视频流更新(音视频通话) | | `setEchoLimiterEnabled` | enable: boolean | void | 启用(true)或禁用(false)回声限制功能 | | `isEchoLimiterEnabled` | - | boolean | 回声限制是否启用 | | `getStats` | type: LinphoneStreamType | CallStats | 获取指定媒体流的通话统计信息 | | `getTextStats` | - | CallStats | 获取文本流统计信息 | | `getStreamCount` | - | number | 获取媒体流数量 | | `getReplacedCall` | - | Call | 获取被替换的旧通话对象 | | `mediaInProgress` | - | boolean | 查询媒体协商是否进行中 | | `getLocalTag` | - | string | 获取本地SIP标签 | | `getRemoteTag` | - | string | 获取远端SIP标签 | | `notifyRinging` | - | void | 通知对端正在振铃 | #### CallParams 发起或接听通话时的媒体参数(如视频分辨率、音频编码)与业务参数(如呼叫类型、用户标识)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `setVideoEnabled` | enabled: boolean | void | 设置视频是否启用 | | `setRecordFile` | path: string | void | 设置录音文件路径 | | `getAccount` | - | Account | 获取账户 | | `unref` | - | void | 引用计数-1 | | `isVideoEnabled` | - | boolean | 视频是否启用 | | `setVideoDirection` | direction: 0\|1 | void | 设置视频流传输方向(0表示本地到远端,1表示远端到本地) | | `getVideoDirection` | - | number | 获取视频传输方向 | | `getReceivedVideoDefinition` | - | VideoDefinition | 获取接收到的视频分辨率设置 | | `getSentVideoDefinition` | - | VideoDefinition | 获取发送的视频分辨率设置 | | `setAudioEnabled` | enabled: boolean | void | 设置音频是否启用 | | `isAudioEnabled` | - | boolean | 音频是否启用 | | `setAudioDirection` | direction: number (0=发送, 1=接收, 2=双向) | void | 设置音频传输方向(0=发送, 1=接收, 2=双向) | | `getAudioDirection` | - | number | 获取音频传输方向 | | `getCustomHeader` | headerName: string | string | 获取自定义SIP请求头 | | `addCustomHeader` | headerName: string, headerValue: string | void | 添加自定义SIP请求头 | | `getMediaEncryption` | - | number | 获取本端设置的媒体流加密方式(0:不加密 1:SRTP 2:DTLS-SRTP) | | `setMediaEncryption` | encryption: number | void | 设置媒体流加密方式(0:关闭 1:SRTP 2:DTLS-SRTP) | | `ref` | - | void | 引用计数+1 | | `setCameraEnabled` | enable: boolean | void | 启用或禁用摄像头 | | `isCameraEnabled` | - | boolean | 摄像头是否启用 | | `setScreenSharingEnabled` | enable: boolean | void | 启用(true)或禁用(false)屏幕共享功能 | | `isScreenSharingEnabled` | - | boolean | 屏幕共享是否启用 | | `setEarlyMediaSendingEnabled` | enable: boolean | void | 启用(true)或禁用(false)早期媒体发送功能 | | `isEarlyMediaSendingEnabled` | - | boolean | 早期媒体发送是否启用 | | `setLowBandwidthEnabled` | enable: boolean | void | 启用(true)或禁用(false)低带宽模式 | | `isLowBandwidthEnabled` | - | boolean | 低带宽模式是否启用 | | `setPrivacy` | privacy: number | void | 设置隐私设置(0:关闭,1:基础隐私-仅隐藏用户姓名和联系方式,2:严格隐私-隐藏所有可识别用户身份的信息) | | `getPrivacy` | - | number | 获取隐私等级(0=关闭,1=基础隐私,2=严格隐私) | | `getRecordFile` | - | string | 获取录音文件路径 | | `getSessionName` | - | string | 获取会话名称 | | `setSessionName` | name: string | void | 设置会话名称 | | `setAccount` | account: Account | void | 设置账户 | | `setAvpfEnabled` | enable: boolean | void | 启用(true)或禁用(false)AVPF(音视频前向纠错)功能 | | `isAvpfEnabled` | - | boolean | AVPF是否启用 | | `isRecording` | - | boolean | 是否正在录音 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `getUserData` | - | string | 获取用户自定义数据 | | `copy` | - | CallParams | 复制通话参数对象 | | `isValid` | - | boolean | 当前对象实例是否有效 | | `setRealtimeTextEnabled` | enable: boolean | number | 启用(1)/禁用(0)实时文本功能(Real-Time Text, RTT) | | `isRealtimeTextEnabled` | - | boolean | 实时文本是否启用 | | `setRealtimeTextKeepaliveInterval` | interval: number | void | 设置RTT保活间隔 | | `getRealtimeTextKeepaliveInterval` | - | number | 获取RTT保活间隔 | | `getConferenceVideoLayout` | - | number | 获取会议视频布局类型 | | `setConferenceVideoLayout` | layout: number | void | 设置会议视频布局类型(0=网格布局,1=主讲人布局) | | `getLocalConferenceMode` | - | boolean | 获取当前通话是否属于本地管理的会议 | | `getAudioBandwidthLimit` | - | number | 获取上行音频带宽限制(kbps) | | `setAudioBandwidthLimit` | bandwidth: number | void | 设置音频上行带宽限制(千比特每秒) | | `setMicEnabled` | enabled: boolean | void | 启用(true)或禁用(false)麦克风 | | `isMicEnabled` | - | boolean | 麦克风是否启用 | | `setInputAudioDevice` | device: AudioDevice | void | 设置输入音频设备 | | `setOutputAudioDevice` | device: AudioDevice | void | 设置输出音频设备 | | `getInputAudioDevice` | - | AudioDevice | 获取输入音频设备 | | `getOutputAudioDevice` | - | AudioDevice | 获取输出音频设备 | | `getReceivedFramerate` | - | number | 获取接收端的视频帧率 | | `getSentFramerate` | - | number | 获取发送端视频帧率 | | `ringingDisabled` | - | boolean | 获取铃声和提示音是否被禁用的状态 | | `disableRinging` | disable: boolean | void | 禁用振铃 | | `isToneIndicationsEnabled` | - | boolean | 提示音指示是否启用 | | `setToneIndicationsEnabled` | enable: boolean | void | 设置提示音指示是否启用 | | `getAvpfRrInterval` | - | number | 获取AVPF的RR(接收方报告)间隔时间 | | `setAvpfRrInterval` | interval: number | void | 设置AVPF的RR(接收方报告)间隔时间 | | `setFromHeader` | fromValue: string | void | 设置SIP消息中的From头字段值 | | `getFromHeader` | - | string | 获取From头字段值 | | `getRtpProfile` | - | string | 获取当前使用的RTP协议参数配置 | | `getUsedAudioPayloadType` | - | number | 获取音频Payload类型 | | `getUsedVideoPayloadType` | - | number | 获取已使用的视频Payload类型 | | `getUsedTextPayloadType` | - | number | 获取已使用的文本Payload类型 | | `isFecEnabled` | - | boolean | FEC功能是否启用 | | `isMandatoryMediaEncryptionEnabled` | - | boolean | 强制媒体加密是否启用 | | `setMandatoryMediaEncryptionEnabled` | enable: boolean | void | 设置强制媒体加密是否启用 | | `setAudioMulticastEnabled` | enable: boolean | void | 设置音频多播功能是否启用 | | `isAudioMulticastEnabled` | - | boolean | 音频多播是否启用 | | `setVideoMulticastEnabled` | enable: boolean | void | 设置视频多播是否启用 | | `isVideoMulticastEnabled` | - | boolean | 视频多播是否启用 | | `isRtpBundleEnabled` | - | boolean | RTP捆绑功能是否启用 | | `isCapabilityNegotiationReinviteEnabled` | - | boolean | 会话能力协商重邀请功能是否启用 | | `setCapabilityNegotiationReinviteEnabled` | enable: boolean | void | 设置会话能力协商重邀请是否启用 | | `isCapabilityNegotiationsEnabled` | - | boolean | 能力协商是否启用 | | `setCapabilityNegotiationsEnabled` | enable: boolean | void | 设置会议能力协商是否启用 | | `isCfgLinesMergingEnabled` | - | boolean | 配置文件行与TCAP行合并功能是否启用 | | `setCfgLinesMergingEnabled` | enable: boolean | void | 设置配置文件行与TCAP行合并是否启用 | | `isTcapLineMergingEnabled` | - | boolean | TCAP行合并是否启用 | | `setTcapLineMergingEnabled` | enable: boolean | void | 设置TCAP行合并是否启用 | | `addCustomSdpAttribute` | name: string, value: string | void | 添加自定义SDP属性 | | `addCustomSdpMediaAttribute` | mediaType: number, name: string, value: string | void | 添加自定义SDP媒体属性 | | `hasCustomSdpAttribute` | name: string | boolean | 是否包含自定义SDP属性 | | `getCustomSdpAttribute` | name: string | string | 获取自定义SDP属性 | | `hasCustomSdpMediaAttribute` | mediaType: number, name: string | boolean | 是否包含自定义SDP媒体属性 | | `getCustomSdpMediaAttribute` | mediaType: number, name: string | string | 获取自定义SDP媒体属性 | | `clearCustomSdpAttributes` | - | void | 清空自定义SDP属性 | | `clearCustomSdpMediaAttributes` | mediaType: number | void | 清空自定义SDP媒体属性 | | `getCustomContents` | - | Content[] | 获取所有自定义内容对象 | | `addCustomContent` | content: Content | void | 添加自定义内容对象 | | `realEarlyMediaEnabled` | - | boolean | 是否启用了早期媒体发送 | | `hasAvpfEnabledBeenSet` | - | boolean | 是否已设置AVPF是否启用 | #### CallStats 通话媒体流统计信息(丢包、带宽、抖动等)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getDownloadBandwidth` | - | number | 获取下载带宽 | | `getUploadBandwidth` | - | number | 获取上传带宽 | | `getEstimatedDownloadBandwidth` | - | number | 获取预估下载带宽 | | `getJitterBufferSizeMs` | - | number | 获取抖动缓冲区大小(毫秒) | | `getRoundTripDelay` | - | number | 获取往返延迟 | | `getSenderInterarrivalJitter` | - | number | 获取发送端数据包到达间隔抖动 | | `getReceiverInterarrivalJitter` | - | number | 获取接收端数据包到达间隔抖动 | | `getLocalLossRate` | - | number | 获取本地丢包率 | | `getSenderLossRate` | - | number | 获取发送端丢包率 | | `getReceiverLossRate` | - | number | 获取接收端丢包率 | | `getType` | - | number | 获取流类型 | | `getIceState` | - | number | 获取ICE状态 | | `getUpnpState` | - | number | 获取UPNP状态 | | `getIpFamilyOfRemote` | - | number | 获取远端IP地址类型(IPv4/IPv6) | | `getRtpPacketSent` | - | number | 获取发送的RTP包数量 | | `getRtpPacketRecv` | - | number | 获取接收的RTP包数量 | | `getRtpSent` | - | number | 获取发送的RTP字节数 | | `getRtpRecv` | - | number | 获取接收的RTP字节数 | | `getRtpCumPacketLoss` | - | number | 获取RTP会话累计丢包数 | | `getRtpDiscarded` | - | number | 获取被丢弃的RTP包数量 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### CallLog 历史通话记录条目。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getCallId` | - | string | 获取通话ID | | `getDir` | - | number | 获取通话方向(0: 呼出(OUTBOUND),1: 呼入(INBOUND)) | | `getDuration` | - | number | 获取会议时长(秒) | | `getFromAddress` | - | Address \| null | 获取From 头地址 | | `getToAddress` | - | Address \| null | 获取To 头地址 | | `getLocalAddress` | - | Address \| null | 获取本地地址 | | `getRemoteAddress` | - | Address \| null | 获取远程地址 | | `setRemoteAddress` | address: Address | void | 设置远程地址 | | `getStartDate` | - | number | 获取开始时间戳 | | `getStatus` | - | number | 获取通话状态(0:空闲,1:拨出中,2:拨入中,3:通话中,4:挂断中),返回值含义参见本文档「枚举」章节中的CallState枚举 | | `getQuality` | - | number | 获取基于网络延迟、抖动和丢包率计算得出的通话质量评分(0-100分,分数越高表示质量越好) | | `isVideoEnabled` | - | boolean | 视频是否启用 | | `wasConference` | - | boolean | 查询通话记录是否为会议 | | `getRefKey` | - | string | 获取用于关联其他系统数据的唯一标识键 | | `setRefKey` | refkey: string | void | 设置引用键 | | `getErrorInfo` | - | ErrorInfo \| null | 获取错误信息 | | `getUserData` | - | object \| null | 获取用户自定义数据(键值对形式) | | `setUserData` | data: object | void | 设置用户自定义数据(键值对形式) | | `getConferenceInfo` | - | ConferenceInfo \| null | 获取包含聊天室数据的会议信息 | | `getChatRoom` | - | ChatRoom \| null | 获取聊天室 | | `toStr` | - | string | 转换为字符串 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### CallListener 通话事件回调接口(如接收DTMF信号)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onDtmfReceived` | call: Call, dtmf: number | void | 收到远端DTMF按键回调 | ### 核心引擎 #### Core Linphone核心引擎,统一管理账户、通话、IM、联系人、音视频设备与网络。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getCalls` | - | Call[] | 获取当前通话列表 | | `setNativeVideoWindowId` | id: string | void | 设置远端视频渲染的原生窗口ID(设置后视频将输出到指定窗口) | | `getMediastreamerFactory` | - | Factory | 获取Mediastreamer工厂对象 | | `setVideoCaptureEnabled` | enable: boolean | void | 设置视频采集是否启用 | | `setVideoDisplayEnabled` | enable: boolean | void | 设置视频显示是否启用 | | `setPreferredVideoDefinitionByName` | name: string | void | 按名称设置首选视频分辨率(如 720p) | | `setPreferredFramerate` | fps: number | void | 设置首选视频帧率 | | `getVideoDevicesList` | - | string[] | 获取可用视频设备列表 | | `setVideoEnabled` | vcap_enabled: boolean, display_enabled: boolean | void | 同时设置视频采集和显示功能是否启用 | | `setCaptureDevice` | devId: string | void | 设置音频采集设备 | | `setPlaybackDevice` | devId: string | void | 设置音频播放设备 | | `addAuthInfo` | authInfo: AuthInfo | void | 添加 SIP 认证凭据 | | `createAccount` | accountParams: AccountParams | Account | 根据 AccountParams 创建 SIP 账户 | | `addAccount` | account: Account | void | 将账户注册到 Core | | `setDefaultAccount` | account: Account | void | 设置默认 SIP 账户 | | `setEchoCancellationEnabled` | enable: boolean | void | 启用(true)或禁用(false)回声消除功能 | | `inviteWithParams` | url: string, callParams: CallParams | Call \| null | 使用指定CallParams发起外呼 | | `iterate` | - | void | 执行Linphone核心事件循环处理(须在专用线程定期调用,建议每20ms调用一次) | | `iterateAsync` | - | void | 异步触发核心事件迭代 | | `removeAccount` | account: Account | void | 从 Core 移除 SIP 账户 | | `unref` | - | void | 引用计数-1 | | `createAddress` | address: string | Address | 从URI字符串创建Address对象 | | `addListener` | coreListener: CoreListener | void | 注册高级事件监听器 | | `removeListener` | coreListener: CoreListener | void | 移除监听器 | | `setAutoIterateEnabled` | enable: boolean | void | 设置自动迭代处理是否启用 | | `start` | - | void | 启动核心服务 | | `stop` | - | void | 停止核心服务 | | `stopAsync` | - | void | 异步停止核心服务 | | `getDefaultAccount` | - | Account | 获取默认账户 | | `createAccountParams` | - | AccountParams | 创建账户参数 | | `loadConfigFromXml` | path: string | void | 从XML文件加载配置 | | `createMagicSearch` | - | MagicSearch | 创建MagicSearch(maxResults?),maxResults参数为可选 | | `inviteAddressWithParams` | add: Address, callParam: CallParams | Call \| null | 向指定Address发起带参数外呼 | | `createCallParams` | call: Call \| null | CallParams | 创建呼叫参数 | | `getCurrentCall` | - | Call | 获取当前通话 | | `inviteAddress` | add: Address | Call \| null | 向指定地址发起呼叫 | | `startEchoCancellerCalibration` | - | number | 启动回声消除器校准 | | `setPreviewWindowId` | id: string | void | 绑定本地摄像头预览窗口ID | | `setVideoDevice` | id: string | number | 设置视频采集设备 | | `setMicEnabled` | enabled: boolean | void | 启用(true)或禁用(false)麦克风 | | `createFriend` | address: string | Friend | 创建联系人对象 | | `createFriendWithAddress` | addr: string | Friend | 根据地址字符串创建联系人对象 | | `createFriendList` | - | FriendList | 创建联系人列表(可传入分组名称作为可选参数) | | `addFriendList` | list: FriendList | void | 添加联系人列表 | | `removeFriendList` | list: FriendList | void | 移除联系人列表 | | `getFriendsLists` | - | FriendList[] | 获取联系人列表集合 | | `getFriendListByName` | name: string | FriendList \| null | 根据名称获取联系人列表 | | `getDefaultFriendList` | - | FriendList | 获取默认联系人列表 | | `createChatRoom` | params: ConferenceParams, participants: Address[] | ChatRoom | 使用远程地址创建1v1聊天室,或使用会议参数和参与者列表创建群聊 | | `getChatRooms` | - | ChatRoom[] | 获取聊天室列表 | | `searchChatRoom` | params: ConferenceParams, localAddress: Address \| null, remoteAddress: Address \| null, participants: Address[] | ChatRoom \| null | 根据条件搜索聊天室 | | `getAccountList` | - | Account[] | 获取账户列表 | | `getCallsNb` | - | number | 获取当前通话数量 | | `isNetworkReachable` | - | boolean | 网络是否可达 | | `getAudioDevices` | - | AudioDevice[] | 获取音频设备列表 | | `reloadSoundDevices` | - | void | 重新加载音频设备列表 | | `getVideoDevice` | - | string | 获取视频采集设备 | | `getUnreadChatMessageCount` | - | number | 获取未读聊天消息数量 | | `playDtmf` | dtmf: string, durationMs: number | void | 播放DTMF音调 | | `stopDtmf` | - | void | 停止播放DTMF音调 | | `useRfc2833ForDtmf` | - | boolean | 使用RFC2833发送DTMF(Linphone核心引擎) | | `setUseRfc2833ForDtmf` | use: boolean | void | 设置是否使用RFC2833协议发送DTMF信号 | | `useInfoForDtmf` | - | boolean | 使用SIP INFO发送DTMF(Linphone核心引擎) | | `setUseInfoForDtmf` | use: boolean | void | 设置是否使用SIP INFO消息发送DTMF | | `getUserAgent` | - | string | 获取User-Agent字符串 | | `setUserAgent` | agent: string | void | 设置User-Agent字符串 | | `isPushNotificationAvailable` | - | boolean | 推送通知是否可用 | | `isInBackground` | - | boolean | 应用是否在后台运行 | | `setInBackground` | background: boolean | void | 设置后台运行状态 | | `getFileTransferServerUrl` | - | string | 获取文件传输服务器URL | | `setFileTransferServerUrl` | url: string | void | 设置文件传输服务器URL | | `getMaxSizeForAutoDownloadIncomingFiles` | - | number | 获取入站文件自动下载大小上限 | | `setMaxSizeForAutoDownloadIncomingFiles` | size: number | void | 设置入站文件自动下载大小上限 | | `getRingDuringIncomingEarlyMedia` | - | boolean | 在呼叫建立前阶段是否播放振铃 | | `setRingDuringIncomingEarlyMedia` | enable: boolean | void | 设置早期媒体阶段是否播放来电铃声 | | `ref` | - | void | 引用计数+1 | | `setNetworkReachable` | reachable: boolean | void | 设置网络可达状态 | | `getGlobalState` | - | number | 获取全局状态 | | `getVersion` | - | string | 获取SDK版本号 | | `isMicEnabled` | - | boolean | 麦克风是否启用 | | `getCaptureDevice` | - | string | 获取采集设备 | | `getPlaybackDevice` | - | string | 获取播放设备 | | `getRingerDevice` | - | string | 获取振铃设备 | | `setRingerDevice` | deviceId: string | void | 设置振铃设备 | | `isEchoCancellationEnabled` | - | boolean | 回声消除是否启用 | | `terminateCall` | call: Call | void | 终止指定通话 | | `pauseCall` | call: Call | void | 暂停指定通话 | | `resumeCall` | call: Call | void | 恢复已暂停的通话 | | `findChatRoom` | peerAddress: Address, localAddress: Address | ChatRoom | 查找聊天室 | | `findOneToOneChatRoom` | localAddress: Address, peerAddress: Address, encrypted?: boolean | ChatRoom \| null | 1v1 房间:先搜索Flexisip类型的聊天室,若无结果再搜索Basic类型,这个方法的搜索逻辑和返回结果处理与linphone_core_find_one_to_one_chat_room_2方法相同 | | `getConfig` | - | Config | 获取配置对象 | | `addFriend` | friend: Friend | void | 添加联系人 | | `terminateAllCalls` | - | number | 终止所有通话 | | `pauseAllCalls` | - | number | 暂停所有当前通话 | | `getCallByRemoteAddress` | address: string | Call | 根据远程地址获取通话 | | `getCallByCallId` | callId: string | Call | 根据通话ID获取通话 | | `getCurrentCallRemoteAddress` | - | Address | 获取当前通话的远程地址 | | `getCallLogs` | - | CallLog[] | 获取通话记录 | | `clearCallLogs` | - | void | 清空通话记录 | | `getCallHistory` | address: Address | CallLog[] | 获取通话历史 | | `missedCallsCount` | - | number | 获取未接来电数量 | | `setOutputVolume` | volume: number | void | 设置输出音量 | | `getOutputVolume` | - | number | 获取输出音量 | | `setPlaybackGain` | gain: number | void | 设置播放增益 | | `getPlaybackGain` | - | number | 获取播放增益 | | `isSpeakerEnabled` | - | boolean | 扬声器是否启用 | | `isVideoSupported` | - | boolean | 是否支持视频通话 | | `isVideoCaptureEnabled` | - | boolean | 视频采集是否启用 | | `isVideoDisplayEnabled` | - | boolean | 视频显示是否启用 | | `getPreferredVideoDefinition` | - | VideoDefinition | 获取首选视频分辨率 | | `setPreferredVideoDefinition` | def: VideoDefinition | void | 设置首选视频分辨率 | | `getSupportedVideoDefinitions` | - | VideoDefinition[] | 获取支持的视频分辨率列表 | | `getMediaEncryption` | - | number | 获取媒体加密方式 | | `setMediaEncryption` | encryption: number | void | 设置媒体流加密方式(0:关闭 1:SRTP 2:DTLS-SRTP) | | `isMediaEncryptionMandatory` | - | boolean | 媒体加密是否强制 | | `setMediaEncryptionMandatory` | mandatory: boolean | void | 设置媒体加密是否强制 | | `getSupportedMediaEncryptions` | - | number[] | 获取支持的媒体加密方式列表 | | `getPrimaryContact` | - | string | 获取主联系人URI | | `setPrimaryContact` | contact: string | void | 设置主联系人URI | | `getIdentity` | - | string | 获取身份URI | | `getTransports` | - | { udp: number, tcp: number, tls: number } | 获取SIP传输端口配置 | | `setTransports` | transports: { udp: number, tcp: number, tls: number } | void | 设置SIP传输端口配置 | | `getSipTransportPort` | - | number | 获取SIP传输端口 | | `setSipTransportPort` | port: number | void | 设置SIP传输端口 | | `findAuthInfo` | realm: string, username: string, domain: string | AuthInfo | 查找认证信息 | | `removeAuthInfo` | authInfo: AuthInfo | void | 移除认证信息 | | `clearAllAuthInfo` | - | void | 清空所有认证信息 | | `getAuthInfoList` | - | AuthInfo[] | 获取认证信息列表 | | `getChatRoom` | address: Address | ChatRoom | 获取聊天室 | | `getChatRoomFromUri` | uri: string | ChatRoom | 根据URI获取聊天室 | | `deleteChatRoom` | chatRoom: ChatRoom | void | 删除聊天室 | | `setChatRoomEnabled` | enable: boolean | void | 启用(true)或禁用(false)聊天室功能 | | `isChatRoomEnabled` | - | boolean | 聊天室功能是否启用 | | `createPresenceModel` | - | PresenceModel | 创建在线状态模型 | | `createPresenceModelWithActivity` | activity: number, note: string | PresenceModel | 创建带活动状态的在线状态模型 | | `getPresenceModel` | - | PresenceModel | 获取在线状态模型 | | `setPresenceModel` | model: PresenceModel | void | 设置在线状态模型 | | `getConfigPath` | - | string | 获取配置文件路径 | | `getDataPath` | - | string | 获取数据目录路径 | | `getDownloadPath` | - | string | 获取下载目录路径 | | `getSoundDevices` | - | string[] | 获取音频设备列表 | | `getEnabledSoundDevices` | - | string[] | 获取已启用的音频设备列表 | | `setSpeakerDevice` | device: string | void | 设置扬声器设备 | | `getSpeakerDevice` | - | string | 获取扬声器设备 | | `getCurrentCallbacks` | - | CoreCbs | 返回底层Cbs对象;该对象与Listener接口类型相比,Listener接口提供了明确的类型检查和更完善的IDE自动补全、参数提示等支持,建议使用addListener()/removeListener()管理事件监听 | | `addCallbacks` | cbs: CoreCbs | void | 底层C API风格的CoreCbs对象操作 | | `removeCallbacks` | cbs: CoreCbs | void | 移除底层Cbs回调 | | `enableLogCollection` | state: number | void | 启用或禁用日志收集 | | `getLogCollectionPath` | - | string | 获取日志收集目录路径 | | `setLogCollectionPath` | path: string | void | 设置日志收集目录路径 | | `getLogCollectionPrefix` | - | string | 获取日志收集文件前缀 | | `setLogCollectionPrefix` | prefix: string | void | 设置日志收集文件前缀 | | `getLogCollectionMaxFileSize` | - | number | 获取日志收集文件大小上限 | | `setLogCollectionMaxFileSize` | size: number | void | 设置日志收集文件大小上限 | | `setLogCollectionUploadServerUrl` | url: string | void | 设置日志上传服务器URL | | `getLogCollectionUploadServerUrl` | - | string | 获取日志上传服务器URL | | `uploadLogCollection` | - | void | 上传日志收集文件到配置的服务器 | | `resetLogCollection` | - | void | 重置日志收集 | | `isIpv6Enabled` | - | boolean | IPv6是否启用 | | `setIpv6Enabled` | enable: boolean | void | 启用(true)或禁用(false)IPv6 | | `isWifiOnlyEnabled` | - | boolean | 仅WiFi模式是否启用 | | `setWifiOnlyEnabled` | enable: boolean | void | 启用(true)或禁用(false)仅WiFi模式 | | `setGuessHostname` | enable: boolean | void | 设置是否自动猜测主机名 | | `getGuessHostname` | - | boolean | 是否自动猜测主机名 | | `isRetransmissionOnNackEnabled` | - | boolean | NACK重传是否启用 | | `setRetransmissionOnNackEnabled` | enable: boolean | void | 启用(true)或禁用(false)NACK重传功能 | | `setLimeX3DhEnabled` | enable: boolean | void | 启用(true)或禁用(false)LIME X3DH加密功能 | | `isLimeX3DhEnabled` | - | boolean | LIME X3DH加密是否启用 | | `limeX3DhAvailable` | - | boolean | LIME X3DH是否可用 | | `isIncomingInvitePending` | - | boolean | 是否有待处理的来电邀请 | | `inCall` | - | boolean | 查询是否正在通话 | | `invite` | url: string | Call \| null | 向指定URI发起呼叫 | | `interpretUrl` | url: string, applyPrefix: boolean | Address | 将拨号字符串解析为SIP Address | | `startReferedCall` | call: Call, params: CallParams | Call | 处理SIP REFER呼叫转接请求并建立新呼叫 | | `createConference` | params: ConferenceParams | Conference | 创建会议 | | `getConference` | - | Conference | 获取会议 | | `isInConference` | - | boolean | 是否处于会议中 | | `getConferenceSize` | - | number | 获取会议规模 | | `enterConference` | - | void | 进入会议 | | `leaveConference` | - | void | 离开会议 | | `createConferenceParams` | - | ConferenceParams | 创建会议参数 | | `createLocalPlayer` | soundCard: string, videoDisplay: string, windowId: string | Player | 创建本地播放器 | | `createRecorder` | params: RecorderParams | Recorder | 创建录制器 | | `createRecorderParams` | - | RecorderParams | 创建录制器参数 | | `setLabel` | label: string | void | 设置标签 | | `getLabel` | - | string | 获取标签 | | `setMaxCallLogs` | max: number | void | 设置通话记录上限 | | `getMaxCallLogs` | - | number | 获取通话记录上限 | | `checkForUpdate` | version: string | void | 检查SDK/应用更新 | | `setDownloadBandwidth` | bandwidth: number | void | 设置下载带宽限制 | | `getDownloadBandwidth` | - | number | 获取下载带宽 | | `setUploadBandwidth` | bandwidth: number | void | 设置上传带宽限制 | | `getUploadBandwidth` | - | number | 获取上传带宽 | | `setAdaptiveRateControlEnabled` | enable: boolean | void | 设置自适应码率控制是否启用 | | `isAdaptiveRateControlEnabled` | - | boolean | 自适应码率控制是否启用 | | `setAdaptiveRateAlgorithm` | algorithm: string | void | 设置自适应码率算法 | | `getAdaptiveRateAlgorithm` | - | string | 获取自适应码率算法 | | `setDownloadPtime` | ptime: number | void | 设置下载音频打包时长 | | `getDownloadPtime` | - | number | 获取下载音频打包时长 | | `setUploadPtime` | ptime: number | void | 设置上传音频打包时长 | | `getUploadPtime` | - | number | 获取上传音频打包时长 | | `setGenericComfortNoiseEnabled` | enable: boolean | void | 设置舒适噪声是否启用 | | `isGenericComfortNoiseEnabled` | - | boolean | 舒适噪声是否启用 | | `setSipTransportTimeout` | timeout: number | void | 设置SIP传输超时时间 | | `getSipTransportTimeout` | - | number | 获取SIP传输超时时间 | | `setDnsSrvEnabled` | enable: boolean | void | 设置DNS SRV是否启用 | | `isDnsSrvEnabled` | - | boolean | DNS SRV是否启用 | | `setDnsSearchEnabled` | enable: boolean | void | 设置DNS搜索是否启用 | | `isDnsSearchEnabled` | - | boolean | DNS搜索是否启用 | | `isDnsSetByApp` | - | boolean | DNS是否由应用设置 | | `setDnsServers` | servers: string[] | void | 设置DNS服务器列表 | | `getAudioPayloadTypes` | - | PayloadType[] | 获取音频Payload类型列表 | | `getVideoPayloadTypes` | - | PayloadType[] | 获取视频Payload类型列表 | | `getTextPayloadTypes` | - | PayloadType[] | 获取文本Payload类型列表 | | `getPayloadType` | type: string, rate: number, channels: number | PayloadType | 获取指定Payload类型 | | `setVideoCodecPriorityPolicy` | policy: number | void | 设置视频编解码器优先级策略 | | `getVideoCodecPriorityPolicy` | - | number | 获取视频编解码器优先级策略 | | `clearAccounts` | - | void | 清空所有账户 | | `getAccountByIdkey` | idkey: string | Account | 根据idkey获取账户 | | `isEchoLimiterEnabled` | - | boolean | 回声限制是否启用 | | `setEchoLimiterEnabled` | enable: boolean | void | 启用(true)或禁用(false)回声限制功能 | | `getSoftVolume` | - | number | 获取软件音量 | | `setSoftVolume` | volume: number | void | 设置软件音量 | | `getRing` | - | string | 获取来电铃声文件路径 | | `setRing` | path: string | void | 设置来电铃声文件 | | `getRingback` | - | string | 获取回铃音文件 | | `setRingback` | path: string | void | 设置回铃音文件 | | `getPlayFile` | - | string | 获取播放文件路径 | | `setPlayFile` | path: string | void | 设置播放文件路径 | | `getRecFile` | - | string | 获取录音文件路径 | | `setRecFile` | path: string | void | 设置录音文件路径 | | `getGlobalStateText` | - | string | 获取全局状态文本描述 | | `isStarted` | - | boolean | 核心服务是否已启动 | | `getVideoCodecsList` | - | string[] | 获取支持的视频编解码器列表 | | `getAudioCodecsList` | - | string[] | 获取支持的音频编解码器列表 | | `isVideoCodecSupported` | codec: string | boolean | 是否支持指定视频编解码器 | | `isAudioCodecSupported` | codec: string | boolean | 是否支持指定音频编解码器 | | `createNatPolicy` | - | NatPolicy | 创建NAT策略对象 | | `getNatPolicy` | - | NatPolicy | 获取NAT策略 | | `setNatPolicy` | policy: NatPolicy | void | 设置NAT策略 | | `acceptCall` | call: Call | void | 接听指定通话 | | `acceptCallWithParams` | call: Call, params: CallParams | void | 使用指定参数接听通话 | | `declineCall` | call: Call, reason: number | void | 拒绝指定通话 | | `declineCallWithErrorInfo` | call: Call, errorInfo: ErrorInfo | void | 携带错误信息拒绝通话 | | `addAllToConference` | - | void | 将所有通话加入会议 | | `addToConference` | call: Call | void | 将通话加入会议 | | `removeFromConference` | call: Call | void | 将通话移出会议 | | `terminateConference` | - | number | 终止会议 | | `getConferenceList` | - | Conference[] | 获取会议列表 | | `getInputAudioDevice` | - | AudioDevice | 获取输入音频设备 | | `setInputAudioDevice` | device: AudioDevice | void | 设置输入音频设备 | | `getOutputAudioDevice` | - | AudioDevice | 获取输出音频设备 | | `setOutputAudioDevice` | device: AudioDevice | void | 设置输出音频设备 | | `isAgcEnabled` | - | boolean | 自动增益控制(AGC)是否启用 | | `setAgcEnabled` | enable: boolean | void | 设置自动增益控制是否启用 | | `isAudioAdaptiveJittcompEnabled` | - | boolean | 音频自适应抖动补偿是否启用 | | `setAudioAdaptiveJittcompEnabled` | enable: boolean | void | 设置音频自适应抖动补偿是否启用 | | `getAudioJittcomp` | - | number | 获取音频抖动补偿值 | | `setAudioJittcomp` | jittcomp: number | void | 设置音频抖动补偿值 | | `getVideoJittcomp` | - | number | 获取视频抖动补偿值 | | `setVideoJittcomp` | jittcomp: number | void | 设置视频抖动补偿值 | | `isAudioMulticastEnabled` | - | boolean | 音频多播是否启用 | | `setAudioMulticastEnabled` | enable: boolean | void | 设置音频多播是否启用 | | `isVideoMulticastEnabled` | - | boolean | 视频多播是否启用 | | `setVideoMulticastEnabled` | enable: boolean | void | 设置视频多播是否启用 | | `isAutoDownloadIcalendarsEnabled` | - | boolean | 是否自动下载iCalendar | | `setAutoDownloadIcalendarsEnabled` | enable: boolean | void | 设置自动下载iCalendar是否启用 | | `isAutoSendRingingEnabled` | - | boolean | 是否自动发送振铃信号 | | `setAutoSendRingingEnabled` | enable: boolean | void | 设置自动发送振铃是否启用 | | `isCallRingingDisabled` | - | boolean | 呼叫振铃是否禁用 | | `setCallRingingDisabled` | disable: boolean | void | 设置呼叫振铃禁用状态 | | `isCallToneIndicationsEnabled` | - | boolean | 通话提示音是否启用 | | `setCallToneIndicationsEnabled` | enable: boolean | void | 设置通话提示音是否启用 | | `isCapabilityNegotiationEnabled` | - | boolean | 会议能力协商是否启用 | | `setCapabilityNegotiationEnabled` | enable: boolean | void | 设置会议设备音视频编解码能力协商功能是否启用 | | `isAutomaticHttpProxyDetectionEnabled` | - | boolean | 是否自动检测HTTP代理 | | `setAutomaticHttpProxyDetectionEnabled` | enable: boolean | void | 设置自动HTTP代理检测是否启用 | | `getHttpProxyHost` | - | string | 获取HTTP代理主机 | | `setHttpProxyHost` | host: string | void | 设置HTTP代理主机 | | `getHttpProxyPort` | - | number | 获取HTTP代理端口 | | `setHttpProxyPort` | port: number | void | 设置HTTP代理端口 | | `addContentTypeSupport` | contentType: string | void | 添加支持的内容类型 | | `isContentTypeSupported` | contentType: string | boolean | 是否支持指定内容类型 | | `addLinphoneSpec` | spec: string | void | 添加Linphone扩展规范 | | `getLinphoneSpecs` | - | string | 获取Linphone扩展规范 | | `addSupportedTag` | tag: string | void | 添加支持的SIP标签 | | `isAlertsEnabled` | - | boolean | 警报功能是否启用 | | `setAlertsEnabled` | enable: boolean | void | 设置警报功能是否启用 | | `getZrtpSecretsCache` | - | string | 获取ZRTP密钥缓存 | | `setZrtpSecretsCache` | cache: string | void | 设置ZRTP密钥缓存 | | `findFriend` | address: Address | Friend \| null | 根据地址查找联系人 | | `findFriendByAddress` | address: Address | Friend \| null | 根据地址查找联系人 | | `findFriendByUri` | uri: string | Friend \| null | 根据URI查找联系人 | | `findFriendByRefKey` | refKey: string | Friend \| null | 根据引用键查找联系人 | | `isMicMuted` | - | boolean | 麦克风是否静音 | | `setMicMuted` | muted: boolean | void | 设置麦克风是否静音 | | `addRemoteContactDirectory` | directory: RemoteContactDirectory | void | 添加远程发现目录 | | `removeRemoteContactDirectory` | directory: RemoteContactDirectory | void | 移除远程发现目录 | | `getRemoteContactDirectories` | - | RemoteContactDirectory[] | 获取远程发现目录列表 | | `createLdapParams` | - | LdapParams | 创建LDAP参数 | | `createCardDavParams` | - | CardDavParams | 创建CardDAV参数 | | `createCardDavRemoteContactDirectory` | params: CardDavParams | RemoteContactDirectory \| null | 创建CardDAV远程发现目录 | | `createLdapRemoteContactDirectory` | params: LdapParams | RemoteContactDirectory \| null | 创建LDAP远程发现目录 | #### CoreListener 核心事件回调(包括账户注册、通话、消息和聊天室状态变化)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onAccountRegistrationStateChanged` | core: Core, account: Account, state: number, message: string | void | 账户注册状态变化回调 | | `onCallStateChanged` | core: Core, call: Call, status: number, message: string | void | 通话状态变化回调 | | `onPushNotificationReceived` | core: Core, payload: string | void | 收到推送通知载荷回调 | | `onGlobalStateChanged` | core: Core, status: number, payload: string | void | 核心全局状态变化回调 | | `onCallStatsUpdated` | core: Core, call: Call, state: CallStats | void | 通话统计数据更新回调 | | `onMessagesReceived` | core: Core, room: ChatRoom, messages: ChatMessage[] | void | 批量收到聊天消息回调 | | `onChatRoomStateChanged` | core: Core, room: ChatRoom, state: number, identifier: string, peerAddress: string, subject: string, lastUpdateTime: number, creationTime: number, isMuted: boolean, ephemeralEnabled: boolean, ephemeralLifetime: number, canHandleParticipants: boolean | void | 聊天室状态变化回调,参数identifier、peerAddress、subject、lastUpdateTime、creationTime、isMuted、ephemeralEnabled、ephemeralLifetime和canHandleParticipants在核心线程提前获取,避免跨线程访问已释放对象 | #### CoreCbs 底层使用C语言风格(函数指针)实现回调接口;`CoreListener` 接口类型提供了明确的类型检查和更丰富的IDE智能提示功能(支持自动补全和参数提示),强烈推荐通过实现 `CoreListener` 接口并使用 `addListener()` 方法注册监听器。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 即时消息 #### ChatRoom 聊天室(1v1 或群聊),支持发送文本消息、传输文件以及由发送方设置消息在发送后自动销毁的倒计时(以秒为单位)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getSubject` | - | string | 获取主题 | | `setSubject` | subject: string | void | 设置主题 | | `getParticipants` | - | Participant[] | 获取参与者列表 | | `addParticipant` | addr: Address | void | 向群聊中添加参与者(address) | | `removeParticipant` | p: Participant | void | 移除参与者 | | `sendText` | text: string | ChatMessage | 便捷方法:创建 UTF-8 文本消息并发送 | | `sendMessage` | msg: ChatMessage | void | 发送已创建的 ChatMessage | | `getHistory` | count: number | ChatMessage[] | 获取聊天历史消息 | | `getHistoryRange` | begin: number, end: number | ChatMessage[] | 获取指定范围的聊天历史消息 | | `getHistorySize` | - | number | 获取聊天历史消息数量 | | `deleteHistory` | - | void | 删除聊天历史消息 | | `markAsRead` | - | void | 将消息标记为已读 | | `getUnreadMessagesCount` | - | number | 获取未读消息数量 | | `setMuted` | muted: boolean | void | 设置静音状态 | | `isMuted` | - | boolean | 是否已静音 | | `getMuted` | - | boolean | 获取静音状态 | | `leave` | - | void | 离开聊天室 | | `setEphemeralEnabled` | enable: boolean | void | 启用(true)或禁用(false)临时消息功能 | | `activateEphemeral` | lifetime: number, notReadLifetime: number | number | 激活临时消息自动销毁 | | `setEphemeralLifetime` | seconds: number | void | 设置临时消息在系统中保留的时间(秒) | | `getEphemeralLifetime` | - | number | 获取临时消息的存活时间(秒) | | `getPeerAddress` | - | Address | 获取对等节点地址 | | `getLocalAddress` | - | Address | 获取本地地址 | | `addListener` | listener: ChatRoomListener | void | 注册高级事件监听器 | | `removeListener` | listener: ChatRoomListener | void | 移除事件监听器 | | `unref` | - | void | 引用计数-1 | | `createMessage` | - | ChatMessage | 创建聊天消息 | | `createEmptyMessage` | - | ChatMessage | 创建空聊天消息 | | `createMessageFromUtf8` | text: string | ChatMessage | 从UTF-8文本创建聊天消息 | | `isGroup` | - | boolean | 是否为群聊 | | `hasBeenLeft` | - | boolean | 用户是否已离开聊天 | | `ref` | - | void | 引用计数+1 | | `createForwardMessage` | msg: ChatMessage | ChatMessage | 创建转发消息 | | `createReplyMessage` | msg: ChatMessage | ChatMessage | 创建回复消息 | | `createFileTransferMessage` | content: Content | ChatMessage | 创建文件传输消息 | | `createVoiceRecordingMessage` | recorder: Recorder | ChatMessage | 创建语音录音消息 | | `deleteMessage` | msg: ChatMessage | void | 删除指定消息 | | `findMessage` | messageId: string | ChatMessage | 按消息 ID 查找聊天消息 | | `findEventLog` | messageId: string | EventLog \| null | 查找事件日志 | | `getLastMessageInHistory` | - | ChatMessage | 获取历史记录中最后一条消息 | | `getUnreadHistory` | - | ChatMessage[] | 获取未读消息历史 | | `receiveChatMessage` | msg: ChatMessage | void | 接收聊天消息(聊天室) | | `getIdentifier` | - | string | 获取聊天室标识符 | | `getAccount` | - | Account | 获取账户 | | `getState` | - | number | 获取聊天室状态 | | `getCreationTime` | - | number | 获取创建时间 | | `getLastUpdateTime` | - | number | 获取最后更新时间 | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部使用,外部直接调用可能导致内存泄漏或程序崩溃等未定义行为) | | `getCall` | - | Call | 获取通话 | | `getSecurityLevel` | - | number | 获取聊天室安全级别(0=安全失败,1=明文,2=已加密,3=安全) | | `getCapabilities` | - | number | 获取会议能力列表(包含音频编解码、视频分辨率、屏幕共享、白板协作和文件传输能力) | | `hasCapability` | capability: number | boolean | 是否包含指定的会议能力(参见`getCapabilities`方法中的能力位定义) | | `getConferenceAddress` | - | Address | 获取会议的唯一标识地址 | | `getCurrentParams` | - | ChatRoomParams | 获取当前聊天室的配置参数 | | `getConferenceInfo` | - | ConferenceInfo | 获取会议基本信息(包括会议ID、URI地址、主题、描述、创建时间、持续时间、主持人、参与者列表、会议状态、安全级别和iCalendar数据) | | `isReadOnly` | - | boolean | 是否为只读模式 | | `isEmpty` | - | boolean | 会议是否为空 | | `getMe` | - | Participant | 获取当前用户信息 | | `getNbParticipants` | - | number | 获取参与者数量 | | `findParticipant` | addr: Address | Participant | 根据地址查找参与者 | | `addParticipants` | addresses: Address[] | boolean | 添加参与者列表 | | `removeParticipants` | participants: Participant[] | void | 移除参与者列表 | | `setParticipantAdminStatus` | participant: Participant, isAdmin: boolean | void | 设置参与者管理员权限 | | `canHandleParticipants` | - | boolean | 是否支持管理参与者列表 | | `isEphemeralEnabled` | - | boolean | 是否启用临时消息显示功能 | | `getEphemeralMode` | - | number | 获取临时消息的显示模式(0=倒计时显示,1=不显示) | | `setEphemeralMode` | mode: number | void | 设置临时消息的显示模式(0=倒计时显示,1=不显示) | | `isEphemeralSupportedByAllParticipants` | - | boolean | 所有参与者是否均支持临时消息 | | `isRemoteComposing` | - | boolean | 是否有其他用户正在输入消息 | | `compose` | - | void | 发送正在输入状态通知 | | `getComposingAddresses` | - | Address[] | 获取正在输入的地址列表 | | `getMediaContents` | - | Content[] | 获取媒体内容 | | `getDocumentContents` | - | Content[] | 获取文档内容列表 | | `getHistory2` | nbMessage: number, filters: number | EventLog[] | 获取聊天历史事件 | | `getHistoryRange2` | begin: number, end: number, filters: number | EventLog[] | 获取指定范围的聊天历史事件 | | `getHistorySize2` | filter: number | number | 获取聊天历史事件数量 | | `getHistoryRangeNear` | before: number, after: number, event: EventLog \| null, filters: number | EventLog[] | 按时间范围获取附近历史事件 | | `getHistoryRangeBetween` | firstEvent: EventLog \| null, lastEvent: EventLog \| null, filters: number | EventLog[] | 获取两个事件之间的历史记录 | | `getHistoryMessageEvents` | nbEvents: number | EventLog[] | 获取聊天历史消息事件 | | `getHistoryRangeMessageEvents` | begin: number, end: number | EventLog[] | 获取指定范围的消息事件 | | `getHistoryEvents` | nbEvents: number | EventLog[] | 获取聊天历史事件 | | `getHistoryRangeEvents` | begin: number, end: number | EventLog[] | 获取指定范围的历史事件 | | `getHistoryEventsSize` | - | number | 获取历史事件数量 | | `searchChatMessageByText` | text: string, from?: EventLog, direction?: number | EventLog \| null | 按文本搜索聊天消息 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `getCurrentCallbacks` | - | ChatRoomCbs | 返回当前聊天室的回调对象;该对象与Listener接口类型相比,Listener接口提供了明确的类型检查和更完善的IDE自动补全、参数提示等支持,建议使用addListener()/removeListener()管理事件监听 | | `getChar` | - | number | 获取RTT实时文本字符 | | `getSubjectUtf8` | - | string | 获取UTF-8编码格式的主题 | | `setSubjectUtf8` | subject: string | void | 设置UTF-8编码格式的主题 | | `stateToString` | state: number | string | 将状态码转换为可读字符串 | | `setConferenceAddress` | address: Address | void | 设置会议地址 | | `notifyParticipantDeviceRegistration` | address: Address | void | 通知参与者设备注册 | | `deactivateEphemeral` | - | number | 停用临时消息自动销毁功能 | | `composeTextMessage` | - | void | 进入文本消息编辑界面 | #### ChatMessage ChatMessage对象,含文本、附件、发送状态与表情符号回复/点赞等互动功能。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getText` | - | string | 获取消息文本内容 | | `setUtf8Text` | text: string | number | 设置消息的文本内容,返回操作状态码 | | `isOutgoing` | - | boolean | 是否为发出的消息 | | `getTime` | - | number | 获取消息创建时间 | | `getState` | - | number | 获取消息的发送状态(0=创建未发送,1=发送中,2=已送达服务器,3=未送达,4=文件传输错误,5=文件传输完成,6=已送达接收方设备,7=已读,8=文件传输中,9=等待发送,10=取消文件传输) | | `isRead` | - | boolean | 消息是否已读 | | `getFromAddress` | - | Address | 获取From头地址 | | `getToAddress` | - | Address | 获取To头地址 | | `getMessageId` | - | string | 获取消息 ID | | `getPeerAddress` | - | Address | 获取对等节点地址 | | `isEphemeral` | - | boolean | 消息是否为临时消息 | | `send` | - | void | 发送消息 | | `unref` | - | void | 引用计数-1 | | `getContents` | - | Content[] | 获取消息内容列表 | | `addContent` | content: Content | void | 添加消息内容 | | `cancel` | - | void | 取消当前操作 | | `ref` | - | void | 引用计数+1 | | `isForward` | - | boolean | 是否为转发消息 | | `forward` | chatRoom: ChatRoom | ChatMessage | 将消息转发到指定聊天室 | | `getAppdata` | - | string | 获取应用自定义数据 | | `setAppdata` | appdata: string | void | 设置应用自定义数据 | | `getFileTransferFilePath` | - | string | 获取文件传输本地路径 | | `setFileTransferFilePath` | path: string | void | 设置文件传输本地路径 | | `downloadContent` | content: Content | void | 下载消息附件到本地 | | `isFileTransferInProgress` | - | boolean | 文件传输是否正在进行中 | | `getCore` | - | Core | 获取核心模块实例 | | `getContentType` | - | string | 获取消息内容的类型 | | `setContentType` | type: string | void | 设置内容类型 | | `getExternalBodyUrl` | - | string | 获取消息外部内容存储URL | | `setExternalBodyUrl` | url: string | void | 设置外部内容URL | | `getChatRoom` | - | ChatRoom | 获取聊天室 | | `isSecured` | - | boolean | 消息是否已加密 | | `getLocalAddress` | - | Address | 获取本地地址 | | `addCustomHeader` | name: string, value: string | void | 添加自定义SIP请求头 | | `getCustomHeader` | headerName: string | string | 获取自定义SIP请求头 | | `removeCustomHeader` | name: string | void | 移除自定义SIP请求头 | | `markAsRead` | - | void | 将消息标记为已读 | | `getReason` | - | number | 获取SIP协议错误原因码 | | `getErrorInfo` | - | ErrorInfo | 获取错误详细信息(包含错误码和描述) | | `getForwardInfo` | - | string | 获取消息转发信息 | | `isReply` | - | boolean | 是否为回复消息 | | `getReplyMessageId` | - | string | 获取被回复消息ID | | `getReplyMessageSenderAddress` | - | Address | 获取被回复消息发送方地址 | | `getReplyMessage` | - | ChatMessage | 获取被回复的消息 | | `getEphemeralLifetime` | - | number | 获取临时消息的存活时间(秒) | | `getEphemeralExpireTime` | - | number | 获取临时消息的过期时间 | | `addFileContent` | content: Content | void | 添加文件内容 | | `addUtf8TextContent` | text: string | void | 添加UTF-8文本内容 | | `removeContent` | content: Content | void | 移除内容 | | `downloadContents` | - | void | 下载所有附件内容 | | `getCallId` | - | string | 获取通话ID | | `hasConferenceInvitationContent` | - | boolean | 是否包含会议邀请内容 | | `addListener` | listener: ChatMessageListener | void | 注册高级事件监听器 | | `removeListener` | listener: ChatMessageListener | void | 移除事件监听器 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `getToBeStored` | - | boolean | 获取消息是否应被存储的标志 | | `setToBeStored` | toBeStored: boolean | void | 设置消息存储标识 | | `store` | - | number | 将消息数据存储到本地 | | `getFileTransferInformation` | - | Content | 获取文件传输信息 | | `cancelFileTransfer` | - | void | 取消文件传输 | | `putChar` | character: number | number | 输入RTT实时文本字符 | | `getParticipantsByImdnState` | state: number | ParticipantImdnState[] | 按IMDN(即时消息处置通知)状态获取参与者列表 | | `getReactions` | - | ChatMessageReaction[] | 获取消息的表情反应列表 | | `getOwnReaction` | - | ChatMessageReaction \| null | 获取当前用户表情反应 | | `createReaction` | utf8Reaction: string | ChatMessageReaction | 创建表情反应 | | `cancelEditing` | - | void | 取消消息编辑 | #### ChatRoomParams 创建聊天室时需要提供的参数列表及各项说明。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getSubject` | - | string | 获取主题 | | `setSubject` | subject: string | void | 设置主题 | | `isEncryptionEnabled` | - | boolean | 加密是否启用 | | `setEncryptionEnabled` | enable: boolean | void | 启用(true)或禁用(false)加密功能 | | `isGroupEnabled` | - | boolean | 群聊功能是否启用 | | `setGroupEnabled` | enable: boolean | void | 配置群聊功能启用状态 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### ChatParams 聊天室服务端使用的WebSocket协议类型、TLS加密方式和临时消息自动销毁功能的配置参数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getBackend` | - | number | 获取聊天后端类型(0:WebSocket, 1:Socket.IO) | | `setBackend` | backend: number | void | 设置聊天后端类型(0:WebSocket,1:Socket.IO) | | `getEphemeralLifetime` | - | number | 获取临时消息的存活时间(秒) | | `setEphemeralLifetime` | lifetime: number | void | 设置临时消息在系统中保留的时间(秒) | | `getEphemeralMode` | - | number | 获取临时消息的显示模式(0=倒计时显示,1=不显示) | | `setEphemeralMode` | mode: number | void | 设置临时消息的显示模式(0=倒计时显示,1=不显示) | | `isEncryptionEnabled` | - | boolean | 加密是否启用 | | `getEncryptionBackend` | - | number | 获取加密后端类型(0:默认,1:AES,2:RSA) | | `setEncryptionBackend` | backend: number | void | 设置加密后端类型(0:默认,1:AES,2:RSA) | | `isRttEnabled` | - | boolean | 查询实时文本传输(RTT)是否启用 | | `setRttEnabled` | enable: boolean | void | 启用或禁用实时文本传输(RTT) | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### Content 消息体或附件(包括MIME类型、文件路径、尺寸等属性)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getUserData` | - | object \| null | 获取用户自定义数据(键值对形式) | | `setUserData` | data: object | void | 设置用户自定义数据(键值对形式) | | `getType` | - | string | 获取类型(如'text/plain')与子类型(如'charset=utf-8') | | `setType` | type: string | void | 设置类型 | | `getSubtype` | - | string | 获取子类型 | | `setSubtype` | subtype: string | void | 设置子类型 | | `addContentTypeParameter` | name: string, value: string \| null | void | 添加内容类型参数 | | `getBuffer` | - | ArrayBuffer \| null | 获取缓冲区的二进制数据 | | `setBuffer` | buffer: ArrayBuffer | void | 设置缓冲区二进制数据 | | `getUtf8Text` | - | string | 获取UTF-8文本内容 | | `setUtf8Text` | text: string | void | 设置UTF-8文本内容 | | `getSize` | - | number | 获取缓冲区大小 | | `setSize` | size: number | void | 设置缓冲区大小 | | `getFileSize` | - | number | 获取文件大小 | | `getEncoding` | - | string | 获取内容编码和内容传输方式信息 | | `setEncoding` | encoding: string | void | 设置内容编码 | | `getDisposition` | - | string | 获取内容处置方式 | | `setDisposition` | disposition: string | void | 设置内容处置方式 | | `getName` | - | string | 获取文件名称 | | `setName` | name: string | void | 设置文件名称 | | `getFilePath` | - | string | 获取文件路径 | | `setFilePath` | path: string | void | 设置文件路径 | | `exportPlainFile` | - | string | 导出纯文本文件 | | `getKey` | - | ArrayBuffer \| null | 获取密钥 | | `getKeySize` | - | number | 获取密钥大小 | | `setKey` | key: ArrayBuffer | void | 设置内容加密密钥 | | `isText` | - | boolean | 是否为文本类型 | | `isFile` | - | boolean | 是否为文件类型 | | `isFileTransfer` | - | boolean | 文件传输功能是否已启用 | | `isMultipart` | - | boolean | 是否为多部分内容 | | `isVoiceRecording` | - | boolean | 语音录音功能是否处于活动状态 | | `isIcalendar` | - | boolean | 是否为iCalendar内容 | | `isFileEncrypted` | - | boolean | 文件加密是否启用 | | `getFileDuration` | - | number | 获取文件持续时间 | | `getCreationTimestamp` | - | number | 获取创建时间戳 | | `getParts` | - | Content[] | 获取多部分内容片段列表 | | `getPart` | index: number | Content \| null | 获取多部分内容片段 | | `findPartByHeader` | headerName: string, headerValue: string | Content \| null | 按SIP头查找多部分内容片段 | | `getCustomHeader` | headerName: string | string | 获取自定义SIP请求头 | | `addCustomHeader` | headerName: string, headerValue: string | void | 添加自定义SIP请求头 | | `getRelatedChatMessageId` | - | string | 获取关联消息ID | #### ChatMessageListener 针对聊天消息的状态变更(如发送中、已发送、已读等)与文件传输事件(如下载进度、传输终止等)的回调。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onMsgStateChanged` | msg: ChatMessage, state: MessageState | void | 消息状态变更事件回调 | | `onFileTransferTerminated` | msg: ChatMessage, content: Content | void | 文件传输终止事件回调(无论成功或失败) | | `onFileTransferProgress` | msg: ChatMessage, content: Content, offset: number, total: number | void | 文件传输进度事件回调 | | `onFileTransferRecv` | msg: ChatMessage, content: Content, buffer: ArrayBuffer | number | 文件接收数据块事件回调(需返回写入字节数) | | `onFileTransferSend` | msg: ChatMessage, content: Content, offset: number, size: number | ArrayBuffer | 文件传输发送事件回调 | | `onEphemeralMessageTimerStarted` | msg: ChatMessage | void | 临时消息自动销毁倒计时开始回调 | | `onEphemeralMessageDeleted` | msg: ChatMessage | void | 临时消息删除回调 | | `onNewMessageReaction` | msg: ChatMessage, reaction: ChatMessageReaction | void | 收到新表情反应回调 | | `onReactionRemoved` | msg: ChatMessage, address: Address | void | 表情反应移除事件回调 | | `onParticipantImdnStateChanged` | msg: ChatMessage, participant: Participant, state: number | void | 消息参与者IMDN(即时消息处置通知,Instant Message Disposition Notification)状态变化回调 | #### ChatRoomListener 聊天室级事件回调(包括新消息、参与者变化、主题变更事件)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onMessageReceived` | room: ChatRoom, msg: ChatMessage | void | 聊天室收到新消息回调 | | `onParticipantAdded` | room: ChatRoom, participant: Participant | void | 聊天室/会议新增参与者回调 | | `onParticipantRemoved` | room: ChatRoom, participant: Participant | void | 聊天室/会议参与者被移除回调 | | `onSubjectChanged` | room: ChatRoom, subject: string | void | 聊天室主题变更回调 | | `onConferenceJoined` | room: ChatRoom | void | 加入会议聊天室回调 | | `onConferenceLeft` | room: ChatRoom | void | 离开会议聊天室回调 | | `onStateChanged` | room: ChatRoom, state: number (0=空闲, 1=通话中, 2=关闭) | void | 聊天室状态变更回调 | | `onIsComposingReceived` | room: ChatRoom, remoteAddress: Address | void | 收到对方正在输入通知回调 | | `onEphemeralEvent` | room: ChatRoom | void | 临时消息自动销毁功能启用或禁用状态变更回调 | | `onEphemeralMessageTimerStarted` | room: ChatRoom, msg: ChatMessage | void | 临时消息自动销毁倒计时开始回调 | | `onEphemeralMessageDeleted` | room: ChatRoom, msg: ChatMessage | void | 临时消息删除回调 | | `onChatMessageParticipantImdnStateChanged` | room: ChatRoom, msg: ChatMessage, imdnState: number | void | 群聊参与者已读/送达状态变化(状态值:7=Displayed,当状态为Displayed时将启动临时消息自动销毁倒计时) | #### ChatRoomCbs ChatRoomCbs是用C语言实现的聊天室事件回调接口;`ChatRoomListener` 接口类型具有明确的类型定义和更完善的接口文档,建议通过实现 `ChatRoomListener` 并使用 `addListener()` 方法进行事件监听。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### ChatMessageReaction ChatMessageReaction提供消息中的表情符号反应功能,允许用户对消息添加表情符号。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getBody` | - | string | 获取消息体 | | `getFromAddress` | - | Address | 获取From头 | | `getCallId` | - | string | 获取通话ID | | `send` | - | void | 发送消息 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### ParticipantImdnState 参与者IMDN(即时消息处置通知,Instant Message Disposition Notification)状态。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getParticipant` | - | Participant | 获取参与者 | | `getState` | - | number | 获取IMDN(即时消息处置通知)状态 | | `getStateChangeTime` | - | number | 获取状态变更时间 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 联系人与搜索 #### Friend 联系人支持存储多个地址、多个电话号码以及VCard格式。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getAddress` | - | Address \| null | 获取地址 | | `setAddress` | address: Address | number | 设置地址 | | `clearAddress` | - | void | 清空地址 | | `addAddress` | address: Address | void | 添加地址 | | `getAddresses` | - | Address[] | 获取地址列表 | | `removeAddress` | address: Address | void | 删除地址 | | `addPhoneNumber` | phone: string | void | 添加电话号码 | | `getPhoneNumbers` | - | string[] | 获取电话号码列表 | | `removePhoneNumber` | phone: string | void | 删除电话号码 | | `hasPhoneNumber` | phone: string | boolean | 是否包含指定电话号码 | | `addPhoneNumberWithLabel` | phoneNumber: FriendPhoneNumber | void | 添加带标签的电话号码 | | `getPhoneNumbersWithLabel` | - | FriendPhoneNumber[] | 获取带标签的电话号码列表 | | `removePhoneNumberWithLabel` | phoneNumber: FriendPhoneNumber | void | 删除带标签的电话号码 | | `getName` | - | string | 获取联系人名称 | | `setName` | name: string | number | 设置联系人名称 | | `getFirstName` | - | string | 获取联系人名字 | | `setFirstName` | firstName: string | void | 设置联系人名字 | | `getLastName` | - | string | 获取联系人姓氏 | | `setLastName` | lastName: string | void | 设置联系人姓氏 | | `getOrganization` | - | string | 获取组织信息 | | `setOrganization` | organization: string | void | 设置组织 | | `getJobTitle` | - | string | 获取职位 | | `setJobTitle` | jobTitle: string | void | 设置职位 | | `getPhoto` | - | string | 获取头像 | | `setPhoto` | photo: string | void | 设置头像 | | `setStarred` | starred: boolean | void | 设置收藏标记 | | `isStarred` | - | boolean | 是否已收藏 | | `getStarred` | - | boolean | 获取收藏状态 | | `edit` | - | void | 进入编辑模式 | | `done` | - | void | 完成编辑 | | `save` | core: Core | void | 将联系人变更保存到服务器 | | `applyContactEdit` | core: Core, displayName: string, firstName: string, lastName: string, organization: string, jobTitle: string, photo: string, starred: boolean, sipAddresses: string[], phones: string[] | boolean | 在核心线程中严格按照顺序执行编辑(edit)→更新联系人字段→完成编辑(done)→保存变更到服务器(save)的操作序列 | | `remove` | - | void | 放弃当前编辑中的联系人变更 | | `dumpVcard` | - | string | 导出VCard格式的联系人数据 | | `createVcard` | name: string | boolean | 创建vCard | | `getRefKey` | - | string | 获取引用键 | | `setRefKey` | refkey: string | void | 设置引用键 | | `getUserData` | - | object \| null | 获取用户自定义数据(键值对形式) | | `setUserData` | data: object | void | 设置用户自定义数据(键值对形式) | | `isSubscribesEnabled` | - | boolean | 订阅是否启用 | | `setSubscribesEnabled` | enable: boolean | void | 设置订阅是否启用 | | `getIncSubscribePolicy` | - | number | 获取入站订阅策略 | | `setIncSubscribePolicy` | policy: number | void | 设置入站订阅策略 | | `getSubscriptionState` | - | number | 获取订阅状态 | | `getPresenceModel` | - | PresenceModel \| null | 获取在线状态模型 | | `getConsolidatedPresence` | - | number | 获取聚合在线状态 | | `isPresenceReceived` | - | boolean | 在线状态是否已接收 | | `getSecurityLevel` | - | number | 获取当前连接的安全级别(0=不安全,1=无加密,2=端到端加密,3=端到端加密且已验证,4=点对点加密) | | `getCore` | - | Core \| null | 获取Core对象及联系人列表 | | `getFriendList` | - | FriendList \| null | 获取联系人列表 | | `inList` | - | boolean | 查询是否在列表中 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `isMe` | - | boolean | 是否为当前用户本人 | #### FriendList 联系人列表默认存储在设备本地,用户可以选择与CardDAV服务器同步。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getUserData` | - | object \| null | 获取用户自定义数据(键值对形式) | | `setUserData` | data: object | void | 设置用户自定义数据(键值对形式) | | `getType` | - | number | 获取类型标识符 | | `setType` | type: number | void | 设置对象类型 | | `getDisplayName` | - | string | 获取显示名称 | | `setDisplayName` | displayName: string | void | 设置对象的显示名称 | | `getName` | - | string | 获取终端设备名称 | | `getRlsAddress` | - | Address \| null | 远程日志服务(RLS)地址 | | `setRlsAddress` | address: Address | void | 设置远程日志服务(RLS)地址 | | `getRlsUri` | - | string | 获取远程日志服务(RLS)的URI | | `setRlsUri` | uri: string | void | 设置远程日志服务(RLS)的URI | | `getUri` | - | string | 获取当前对象的资源URI | | `setUri` | uri: string | void | 设置资源URI | | `setSubscriptionsEnabled` | enable: boolean | void | 设置订阅功能是否启用 | | `isSubscriptionsEnabled` | - | boolean | 订阅功能是否启用 | | `isSubscriptionBodyless` | - | boolean | 订阅消息是否不包含消息体 | | `setSubscriptionBodyless` | bodyless: boolean | void | 设置订阅是否不包含消息体 | | `addFriend` | friend: Friend | number | 添加Friend | | `addLocalFriend` | friend: Friend | number | 添加本地联系人 | | `synchronizeFriendsWith` | friends: Friend[] | boolean | 根据联系人引用标识符(refKey)同步联系人列表,用给定的Friend列表完全替换当前列表 | | `removeFriend` | friend: Friend | number | 删除联系人 | | `getFriends` | - | Friend[] | 获取联系人列表 | | `findFriendByAddress` | address: Address | Friend \| null | 根据地址查找联系人 | | `findFriendByPhoneNumber` | phone: string | Friend \| null | 根据电话号码查找联系人 | | `findFriendByRefKey` | refKey: string | Friend \| null | 根据引用键查找联系人 | | `findFriendByUri` | uri: string | Friend \| null | 根据URI查找联系人 | | `findFriendsByAddress` | address: Address | Friend[] | 根据地址精确查找联系人列表 | | `findFriendsByUri` | uri: string | Friend[] | 根据URI查找联系人列表 | | `notifyPresence` | presence: PresenceModel | void | 通知在线状态 | | `updateSubscriptions` | - | void | 更新联系人订阅状态 | | `syncFromServer` | - | void | 从服务器同步数据 | | `synchronizeFriendsFromServer` | - | void | 从服务器同步联系人数据 | | `updateDirtyFriends` | - | void | 更新需要同步的联系人记录(标记为本地修改但未与服务器同步的数据) | | `updateRevision` | revision: string | void | 更新版本号 | | `importVcard` | path: string | void | 从文件导入vCard | | `importVcardFromBuffer` | buffer: string | number | 从缓冲区导入vCard | | `exportVcard` | path: string | void | 导出联系人数据到vCard文件 | | `setDatabaseStorageEnabled` | enable: boolean | void | 设置联系人数据库存储是否启用 | | `isDatabaseStorageEnabled` | - | boolean | 数据库存储功能是否启用 | | `getCore` | - | Core \| null | 获取核心模块对象 | | `addListener` | listener: FriendListListener | void | 监听联系人列表变化的监听器 | #### FriendPhoneNumber 带有分类标签(如'家庭'、'工作'等)的电话号码。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | FriendPhoneNumber | 克隆电话号码对象 | | `setPhoneNumber` | phoneNumber: string | void | 设置联系人的电话号码 | | `getPhoneNumber` | - | string | 获取电话号码 | | `setLabel` | label: string | void | 设置联系人的标签 | | `getLabel` | - | string | 获取标签 | #### Vcard VCard(电子名片格式标准)联系人卡片。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | Vcard | 克隆电子名片对象 | | `asVcard4String` | - | string | 以字符串形式返回vCard数据 | | `asVcard4StringWithBase64Picture` | - | string | 导出为包含Base64编码图片的vCard4字符串 | | `getFullName` | - | string | 获取完整姓名 | | `setFullName` | name: string | void | 设置全名 | | `getFamilyName` | - | string | 获取姓氏 | | `setFamilyName` | name: string | void | 设置姓氏 | | `getGivenName` | - | string | 获取名字 | | `setGivenName` | name: string | void | 设置名字 | | `addSipAddress` | address: string | void | 添加SIP地址 | | `removeSipAddress` | address: string | void | 删除SIP地址 | | `editMainSipAddress` | oldAddress: string, newAddress: string | void | 编辑主SIP地址 | | `getSipAddresses` | - | Address[] | 获取SIP地址列表 | | `setSipAddresses` | addresses: Address[] | void | 设置SIP地址列表 | | `addPhoneNumber` | phoneNumber: string | void | 添加电话号码 | | `removePhoneNumber` | phoneNumber: string | void | 删除电话号码 | | `getPhoneNumbers` | - | string[] | 获取电话号码列表 | | `addPhoneNumberWithLabel` | phoneNumber: FriendPhoneNumber | void | 添加带标签的电话号码 | | `removePhoneNumberWithLabel` | phoneNumber: FriendPhoneNumber | void | 删除带标签的电话号码 | | `getPhoneNumbersWithLabel` | - | FriendPhoneNumber[] | 获取带标签的电话号码列表 | | `setOrganization` | organization: string | void | 设置组织与职位 | | `getOrganization` | - | string | 获取组织信息 | | `removeOrganization` | - | void | 删除组织 | | `setJobTitle` | jobTitle: string | void | 设置职位 | | `getJobTitle` | - | string | 获取职位 | | `removeJobTitle` | - | void | 删除职位 | | `setPhoto` | photo: string | void | 设置头像 | | `getPhoto` | - | string | 获取头像 | | `removePhoto` | - | void | 删除头像 | | `generateUniqueId` | - | void | 生成唯一ID | | `setUid` | uid: string | void | 设置Uid | | `getUid` | - | string | 获取Uid | | `setEtag` | etag: string | void | 设置Etag | | `getEtag` | - | string | 获取Etag | | `setUrl` | url: string | void | 设置URL | | `getUrl` | - | string | 获取URL | | `getExtendedPropertiesValuesByName` | name: string | string[] | 扩展属性 | | `addExtendedProperty` | name: string, value: string | void | 添加扩展属性 | | `removeExtendedPropertiesByName` | name: string | void | 删除指定名称的扩展属性 | #### MagicSearch MagicSearch 提供了本地联系人、LDAP 和 CardDAV 三种不同来源的联系人统一搜索功能。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `setLimitedSearch` | enable: boolean | void | 设置搜索结果数量限制是否启用 | | `setSearchLimit` | limit: number | void | 设置搜索结果数量上限 | | `addListener` | listener: MagicSearchListener | void | 注册跨平台事件监听器 | | `getContactsListAsync` | filter: string(过滤条件), domain: string(搜索域), sourceFlags: number(数据源标志), aggregation: number(聚合级别) | void | 异步搜索联系人(合并本地、云端和社交平台联系人数据),结果通过监听器回调返回 | | `getLastSearch` | - | Array | 获取最后一次搜索的结果 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `setMinWeight` | weight: number | void | 设置搜索结果的最小权重 | | `getMinWeight` | - | number | 获取联系人匹配的最小权重值 | | `setMaxWeight` | weight: number | void | 设置搜索结果的最大权重 | | `getMaxWeight` | - | number | 获取搜索权重的最大值 | | `setDelimiter` | delimiter: string | void | 设置搜索分隔符 | | `getDelimiter` | - | string | 获取搜索分隔符 | | `setUseDelimiter` | enable: boolean | void | 设置搜索分隔符是否启用 | | `getUseDelimiter` | - | boolean | 搜索分隔符是否启用 | | `getSearchLimit` | - | number | 获取搜索结果的返回数量限制 | | `getLimitedSearch` | - | boolean | 搜索结果数量限制是否启用 | | `resetSearchCache` | - | void | 重置搜索缓存 | | `getContactsList` | filter: string, domain: string, sourceFlags: number, aggregation: number | SearchResult[] | 获取MagicSearch模块的联系人列表 | | `removeListener` | listener: MagicSearchListener | void | 移除事件监听器 | | `getCurrentCallbacks` | - | MagicSearchCbs | 返回当前Cbs对象;该对象与Listener接口类型相比,Listener接口提供了明确的类型检查和更完善的IDE自动补全、参数提示等支持,建议使用addListener()/removeListener()管理事件监听 | #### SearchResult MagicSearch 的单条搜索结果。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getAddress` | - | Address | 获取地址信息 | | `getName` | - | string | 获取终端设备名称 | | `getPhoneNumber` | - | string | 获取电话号码 | | `getFriend` | - | Friend \| null | 获取Friend对象 | | `getSource` | - | number | 获取来源类型(1:系统内部生成,2:外部API导入)及该来源对应的权重值 | | `getWeight` | - | number | 获取匹配权重 | | `hasSourceFlag` | flag: number | boolean | 是否包含指定搜索结果来源标志 | | `getCapabilities` | - | number | 获取会议能力标志位(位掩码形式,每个位对应一种会议功能:1=音频,2=视频,4=屏幕共享,8=白板协作,16=文件传输等) | | `hasCapability` | capability: number | boolean | 是否包含指定的会议能力(参见`getCapabilities`方法中的能力位定义) | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### MagicSearchListener 搜索结果回调函数和结果上限通知回调函数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onSearchResultsReceived` | search: MagicSearch | void | 搜索结果回调 | | `onMoreResultsAvailable` | search: MagicSearch, sourcesFlag: number | void | 当MagicSearch结果数达到或超过最大搜索数量限制(searchLimit)时回调 | #### FriendListListener 联系人列表同步状态回调(包括SYNC_STARTED、SYNC_COMPLETED和SYNC_FAILED三种状态)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onSyncStatusChanged` | friendList: FriendList, state: number, message: string | void | 联系人列表同步变化回调 | #### MagicSearchCbs MagicSearch模块的回调接口;`MagicSearchListener` 接口类型提供了明确的类型检查和IDE自动补全支持,建议使用该接口来替代回调接口的直接使用。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 会议 #### Conference 多方音视频会议实例。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getParticipantList` | - | Participant[] | 获取会议中的所有参与者列表 | | `getParticipantDeviceList` | - | ParticipantDevice[] | 获取会议中参与者的设备列表 | | `getParticipantCount` | - | number | 获取当前会议中的参与者数量 | | `getMe` | - | Participant | 获取当前用户 | | `terminate` | - | number | 终止当前会议 | | `enter` | - | number | 进入会议 | | `leave` | - | number | 离开会议 | | `isIn` | - | boolean | 是否在会话中 | | `isMe` | address: Address | boolean | 当前地址是否为本人 | | `getSubject` | - | string | 获取主题 | | `setSubject` | subject: string | void | 设置主题 | | `getSubjectUtf8` | - | string | 获取UTF-8编码格式的主题 | | `setSubjectUtf8` | subject: string | void | 设置UTF-8编码格式的主题 | | `getUsername` | - | string | 获取用户名 | | `setUsername` | username: string | void | 设置用户名 | | `getDuration` | - | number | 获取会议时长(秒) | | `getStartTime` | - | number | 获取会议开始时间(Unix时间戳) | | `getIdentifier` | - | string | 获取唯一标识符 | | `getState` | - | number | 获取会议状态 | | `getConferenceAddress` | - | Address | 获取会议地址 | | `setConferenceAddress` | address: Address | void | 设置会议地址 | | `getCore` | - | Core | 获取当前Core指针实例(该指针用于SDK内部核心功能调用) | | `getChatRoom` | - | ChatRoom | 获取聊天室 | | `getCall` | - | Call | 获取通话 | | `getAccount` | - | Account | 获取账户 | | `getPlayer` | - | Player | 获取播放器 | | `getInputAudioDevice` | - | AudioDevice | 获取输入音频设备 | | `getOutputAudioDevice` | - | AudioDevice | 获取输出音频设备(如扬声器或耳机) | | `setInputAudioDevice` | device: AudioDevice | void | 设置输入音频设备 | | `setOutputAudioDevice` | device: AudioDevice | void | 设置输出音频设备 | | `getMicrophoneMuted` | - | boolean | 获取麦克风静音状态 | | `setMicrophoneMuted` | muted: boolean | void | 设置麦克风是否静音 | | `getInputVolume` | - | number | 获取麦克风输入音量 | | `startRecording` | path: string | number | 开始音频录制 | | `stopRecording` | - | number | 停止音频录制 | | `isRecording` | - | boolean | 是否正在录制 | | `findParticipant` | address: Address | Participant | 根据地址查找参与者 | | `removeParticipant` | participant: Participant | number | 移除参与者 | | `setParticipantAdminStatus` | participant: Participant, isAdmin: boolean | void | 设置参与者管理员权限 | | `inviteParticipants` | addresses: Address[], params?: CallParams | number | 邀请参与者列表 | | `addParticipants` | calls: Call[] | number | 通过通话列表添加参与者 | | `addParticipants2` | addresses: Address[] | number | 通过地址列表添加参与者 | | `addParticipant` | callOrAddress: Call \| Address | number | 添加参与者地址 | | `getScreenSharingParticipant` | - | Participant | 获取屏幕共享参与者 | | `getScreenSharingParticipantDevice` | - | ParticipantDevice | 获取屏幕共享参与者的设备 | | `getActiveSpeakerParticipantDevice` | - | ParticipantDevice | 获取当前发言者的音频设备 | | `setLocalParticipantStreamCapability` | direction: number, streamType: number | void | 设置本地参与者发送或接收音视频流的能力 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `checkClass` | conferenceClass: number | boolean | 检查会议类型是否与指定类型匹配 | | `stateToString` | state: number | string | 将数字状态转换为字符串 | #### ConferenceParams 创建会议时的主题、音视频、聊天和其他(如屏幕共享、录制等)配置参数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getConferenceFactoryAddress` | - | Address | 获取会议工厂的合约地址 | | `setConferenceFactoryAddress` | address: Address | void | 设置会议工厂合约地址 | | `isVideoEnabled` | - | boolean | 视频是否启用 | | `setVideoEnabled` | enable: boolean | void | 设置视频是否启用 | | `isAudioEnabled` | - | boolean | 音频是否启用 | | `setAudioEnabled` | enable: boolean | void | 设置音频是否启用 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getSubject` | - | string | 获取主题 | | `setSubject` | subject: string | void | 设置主题 | | `getSubjectUtf8` | - | string | 获取UTF-8编码格式的主题 | | `setSubjectUtf8` | subject: string | void | 设置UTF-8编码格式的主题 | | `isChatEnabled` | - | boolean | 聊天功能是否启用 | | `setChatEnabled` | enable: boolean | void | 启用(true)或禁用(false)聊天功能 | | `isGroupEnabled` | - | boolean | 群聊功能是否启用 | | `setGroupEnabled` | enable: boolean | void | 配置群聊功能启用状态 | | `getChatParams` | - | ChatParams | 获取聊天参数,具体有:消息超时时间(毫秒)、最大参与者数(个)、消息存储大小限制(兆字节)、消息加密算法类型(0-无加密,1-Lime x3dh 加密) | | `getAccount` | - | Account | 获取账户 | | `setAccount` | account: Account | void | 设置账户 | | `getSecurityLevel` | - | number | 获取会议安全级别(0=无安全,1=点对点加密,2=端到端加密) | | `setSecurityLevel` | level: number | void | 设置会议安全级别(0=无安全,1=点对点加密,2=端到端加密) | | `isHidden` | - | boolean | 会议是否隐藏 | | `setHidden` | hidden: boolean | void | 设置会议是否隐藏 | | `isValid` | - | boolean | 当前配置是否有效 | #### ConferenceInfo 已预定或历史会议的基本信息,包括会议主题、时间、参与人数等关键数据。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | ConferenceInfo | 克隆会议信息对象 | | `getOrganizer` | - | Address \| null | 获取会议组织者地址 | | `setOrganizer` | address: Address | void | 设置会议组织者 | | `getParticipantInfos` | - | ParticipantInfo[] | 获取参与者信息列表 | | `setParticipantInfos` | participants: ParticipantInfo[] | void | 设置参与者信息列表 | | `addParticipantInfos` | participants: ParticipantInfo[] | void | 添加参与者信息 | | `addParticipant` | address: Address | void | 添加参与者 | | `updateParticipant` | participantInfo: ParticipantInfo | void | 更新参与者信息 | | `removeParticipant` | address: Address | void | 移除参与者 | | `findParticipant` | address: Address | ParticipantInfo \| null | 查找参与者信息 | | `getUri` | - | Address \| null | 获取会议URI地址 | | `getDateTime` | - | number | 获取UNIX时间戳 | | `setDateTime` | datetime: number | void | 设置会议日期时间 | | `getDuration` | - | number | 获取会议时长(秒) | | `setDuration` | duration: number | void | 设置时长(秒) | | `getSubject` | - | string | 获取主题 | | `setSubject` | subject: string | void | 设置会议主题 | | `getSubjectUtf8` | - | string | 获取UTF-8编码格式的主题 | | `setSubjectUtf8` | subject: string | void | 设置会议主题(UTF-8编码格式) | | `getDescription` | - | string | 获取会议的详细描述 | | `setDescription` | description: string | void | 设置会议描述 | | `getDescriptionUtf8` | - | string | 获取UTF-8编码格式的会议描述 | | `setDescriptionUtf8` | description: string | void | 设置UTF-8编码格式的会议描述 | | `getCcmpUri` | - | string | 获取会议协作通信协议(CCMP)的URI | | `setCcmpUri` | uri: string | void | 设置会议协作通信协议(CCMP)的URI | | `getSecurityLevel` | - | number | 获取会议安全级别(0=无安全,1=点对点加密,2=端到端加密) | | `setSecurityLevel` | level: number | void | 设置会议安全级别(0=无安全,1=点对点加密,2=端到端加密) | | `getCapability` | capability: number | boolean | 检查是否具备指定的功能(屏幕共享、录制或音频控制) | | `setCapability` | capability: number, enable: boolean | void | 启用或禁用屏幕共享、录制或音频控制功能 | | `getIcalendarString` | - | string | 获取iCalendar字符串 | | `getState` | - | number | 获取会议状态(0:未开始,1:进行中,2:已结束) | | `getIcsUid` | - | string | 获取iCalendar会议UID | | `setIcsUid` | uid: string | void | 设置iCalendar会议UID | #### Participant 会议或聊天室参与者。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getAddress` | - | Address | 获取设备地址 | | `isAdmin` | - | boolean | 当前用户是否为管理员 | | `getRole` | - | number | 获取参与者的角色编号(1:主持人 2:嘉宾 3:观众) | | `unref` | - | void | 引用计数-1 | | `ref` | - | void | 引用计数+1 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `isFocus` | - | boolean | 是否为会议焦点参与者 | | `getSecurityLevel` | - | number | 获取聊天室安全级别(0=安全失败,1=明文,2=已加密,3=安全) | | `getDevices` | - | ParticipantDevice[] | 获取参与者设备列表 | | `findDevice` | address: Address | ParticipantDevice | 按地址查找参与者设备 | | `findDevice2` | call: Call | ParticipantDevice | 按通话查找参与者设备 | | `getCreationTime` | - | number | 获取对象创建时间(毫秒级Unix时间戳) | #### ParticipantDevice 参与者的终端设备信息。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getAddress` | - | Address | 获取设备地址 | | `getName` | - | string | 获取终端设备名称 | | `getState` | - | number | 获取连接状态(0=离线,1=在线,2=忙碌) | | `getSecurityLevel` | - | number | 获取聊天室安全级别(0=安全失败,1=明文,2=已加密,3=安全) | | `isInConference` | - | boolean | 是否处于会议中 | | `getTimeOfJoining` | - | number | 获取加入时间(Unix时间戳,单位为毫秒) | | `getTimeOfDisconnection` | - | number | 获取断开连接时间(Unix时间戳,单位为毫秒) | | `getJoiningMethod` | - | number | 获取加入方式(0=主动加入,1=被邀请) | | `getDisconnectionMethod` | - | number | 获取断开连接方式(0=主动断开,1=被动断开) | | `getDisconnectionReason` | - | string | 获取断开连接原因 | | `getStreamLabel` | streamType: number | string | 获取媒体流标签(格式为字符串标识符) | | `getThumbnailStreamLabel` | - | string | 获取缩略图媒体流标签 | | `getStreamCapability` | streamType: number | number | 获取媒体流的编码能力 | | `getThumbnailStreamCapability` | - | number | 获取缩略图媒体流能力 | | `getStreamAvailability` | streamType: number | boolean | 媒体流是否可用 | | `getThumbnailStreamAvailability` | - | boolean | 缩略图媒体流是否可用 | | `getSsrc` | streamType: number | number | 获取同步源标识符(SSRC) | | `getThumbnailSsrc` | - | number | 获取缩略图流的同步源标识符(SSRC) | | `getIsSpeaking` | - | boolean | 获取发言状态 | | `getIsMuted` | - | boolean | 获取静音状态 | | `isScreenSharingEnabled` | - | boolean | 屏幕共享功能是否启用 | | `getParticipant` | - | Participant \| null | 获取参与者 | | `setNativeVideoWindowId` | windowId: object | void | 设置远端视频渲染的原生窗口ID(设置后视频将输出到指定窗口) | | `getNativeVideoWindowId` | - | object \| null | 获取原生视频窗口ID | | `createNativeVideoWindowId` | - | object \| null | 创建原生视频窗口ID(用于视频渲染的窗口标识符) | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### ParticipantInfo Participant角色与扩展参数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | ParticipantInfo | 克隆参与者信息对象 | | `getAddress` | - | Address \| null | 获取参与者的网络地址信息 | | `getRole` | - | number | 获取参与者的角色类型(0:普通参与者 1:主持人) | | `setRole` | role: number | void | 设置参与者角色 | | `addParameter` | name: string, value: string | void | 添加参与者扩展参数 | | `getParameterValue` | name: string | string | 获取参与者扩展参数值 | | `hasParameter` | name: string | boolean | 是否包含参与者扩展参数 | | `removeParameter` | name: string | void | 删除参与者扩展参数 | | `getCcmpUri` | - | string | 获取会议协作通信协议(CCMP)的URI | ### 媒体与设备 #### AudioDevice 音频输入/输出设备。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getId` | - | string | 获取设备ID | | `getDeviceName` | - | string | 获取设备名称 | | `getDriverName` | - | string | 获取驱动名称 | | `getCapabilities` | - | number | 获取设备支持的音频输入和视频输出能力标志位(每个二进制位代表一种特定能力,如采样率支持、声道数支持、位深度支持、编解码器支持等具体能力,可通过同接口的 `hasCapability` 方法检测特定能力) | | `getType` | - | number | 获取设备类型 | | `hasCapability` | capability: number | boolean | 是否包含指定能力 | | `getFollowsSystemRoutingPolicy` | - | boolean | 获取设备是否遵循系统定义的音频/视频路由策略 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### VideoDefinition 视频分辨率定义。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `clone` | - | VideoDefinition | 克隆视频分辨率定义对象 | | `getWidth` | - | number | 获取视频宽度 | | `setWidth` | width: number | void | 设置视频宽度 | | `getHeight` | - | number | 获取视频高度 | | `setHeight` | height: number | void | 设置视频高度 | | `setDefinition` | width: number, height: number | void | 设置分辨率 | | `getName` | - | string | 获取视频名称 | | `setName` | name: string | void | 设置视频名称 | | `equals` | other: VideoDefinition | boolean | 比较当前视频分辨率与另一个视频分辨率是否相同 | | `strictEquals` | other: VideoDefinition | boolean | 精确比较(比较两个视频分辨率定义的width和height属性是否完全一致) | | `isUndefined` | - | boolean | 视频分辨率宽高是否均为undefined | #### Player 本地音频文件播放器(支持MP3、WAV等格式)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `open` | filename: string | number | 打开指定的媒体文件 | | `start` | - | number | 开始播放 | | `pause` | - | number | 暂停播放 | | `seek` | timeMs: number | number | 定位到指定时间位置(毫秒) | | `getState` | - | number | 获取播放状态 | | `getDuration` | - | number | 获取媒体文件时长(秒) | | `getCurrentPosition` | - | number | 获取当前播放位置(毫秒) | | `close` | - | void | 关闭播放器 | | `isVideoAvailable` | - | boolean | 视频是否可用 | | `setVolumeGain` | gain: number | void | 设置音量增益 | | `getVolumeGain` | - | number | 获取音量增益值 | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部使用,外部直接调用可能导致内存泄漏或程序崩溃等不可预期的行为) | | `addListener` | listener: PlayerListener | void | 注册高级事件监听器 | | `removeListener` | listener: PlayerListener | void | 移除事件监听器 | | `getCurrentCallbacks` | - | PlayerCbs | 返回底层Cbs对象;该对象与Listener接口类型相比,Listener接口提供了明确的类型检查和更完善的IDE自动补全、参数提示等支持,建议使用addListener()/removeListener()管理事件监听 | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | #### PlayerListener 播放器事件回调,包括播放结束等状态变化通知。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `onEofReached` | player: Player | void | 播放器播放到文件末尾回调 | #### PlayerCbs 底层回调接口;`PlayerListener` 接口类型提供了明确的类型检查和IDE自动补全支持,建议使用 `PlayerListener` 进行事件监听。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### Recorder 提供通话录制功能以及本地设备音视频录制功能。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `open` | filePath: string | number | 打开录制文件 | | `close` | - | void | 关闭录制器 | | `start` | - | number | 开始录制 | | `pause` | - | number | 暂停录制 | | `getState` | - | number | 获取录制状态 | | `getFile` | - | string | 获取录制的音频文件 | | `getDuration` | - | number | 获取录制时长(秒) | | `getCaptureVolume` | - | number | 获取麦克风输入音量 | | `createContent` | - | Content \| null | 创建一个内容为空的Content对象(用于SIP消息体的初始化) | | `getParams` | - | RecorderParams | 获取录音参数配置 | | `setParams` | params: RecorderParams | void | 设置录音参数,具体包含窗口ID、文件格式、音频设备、摄像头名称和视频编解码器 | | `getCore` | - | Core \| undefined | 获取当前Core指针实例(仅限SDK内部功能实现使用,通过非SDK提供的接口方式调用可能导致内存泄漏或程序崩溃等未定义行为) | | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | #### RecorderParams 录制参数包含音频格式、输入设备和摄像头输入分辨率设置。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getWindowId` | - | bigint | 获取窗口ID | | `setWindowId` | id: bigint | void | 设置窗口ID | | `setFileFormat` | format: number | void | 设置文件格式(0:Unknown,1:Wav,2:Mkv,3:Smff) | | `getFileFormat` | - | number | 获取文件格式 | | `setAudioDevice` | device: AudioDevice | void | 设置音频设备 | | `getAudioDevice` | - | AudioDevice \| null | 获取音频设备 | | `setWebcamName` | name: string | void | 设置摄像头名称 | | `getWebcamName` | - | string | 获取摄像头名称 | | `setVideoCodec` | codec: string | void | 设置视频编解码器 | | `getVideoCodec` | - | string | 获取视频编解码器 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### PayloadType 音视频编解码器使用的Payload类型定义,用于标识不同的音视频编码格式。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | PayloadType | 克隆编解码载荷类型对象 | | `getType` | - | number | 获取音频Payload类型的编号 | | `getClockRate` | - | number | 获取时钟频率(Hz) | | `getChannels` | - | number | 获取音频通道数 | | `getMimeType` | - | string | 获取MIME类型 | | `getNumber` | - | number | 获取编解码器编号 | | `setNumber` | number: number | void | 设置编解码器编号 | | `getDescription` | - | string | 获取编解码器的详细描述信息 | | `enable` | enabled: boolean | number | 设置PayloadType是否启用 | | `enabled` | - | boolean | PayloadType是否启用 | | `getNormalBitrate` | - | number | 获取默认比特率 | | `setNormalBitrate` | bitrate: number | void | 设置标准比特率 | | `getRecvFmtp` | - | string | 接收流的格式参数 | | `setRecvFmtp` | fmtp: string | void | 设置接收端FMTP参数 | | `getSendFmtp` | - | string | 获取发送端FMTP参数 | | `setSendFmtp` | fmtp: string | void | 设置发送端FMTP参数 | | `getEncoderDescription` | - | string | 编码器描述 | | `isVbr` | - | boolean | VBR编码是否启用 | | `isUsable` | - | boolean | PayloadType是否可用 | | `weakEquals` | other: PayloadType | boolean | 比较两个PayloadType是否相等 | ### 网络与目录 #### NatPolicy 配置NAT穿透和ICE参数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `clone` | - | NatPolicy | 克隆NAT策略对象 | | `clear` | - | void | 清空NAT策略配置 | | `isStunEnabled` | - | boolean | STUN是否启用 | | `setStunEnabled` | enable: boolean | void | 启用(true)或禁用(false)STUN功能 | | `isTurnEnabled` | - | boolean | TURN是否启用 | | `setTurnEnabled` | enable: boolean | void | 启用(true)或禁用(false)TURN功能 | | `isIceEnabled` | - | boolean | ICE是否启用 | | `setIceEnabled` | enable: boolean | void | 启用(true)或禁用(false)ICE功能 | | `isUpnpEnabled` | - | boolean | UPnP是否启用 | | `setUpnpEnabled` | enable: boolean | void | 启用(true)或禁用(false)UPnP功能 | | `getStunServer` | - | string | 获取STUN服务器地址 | | `setStunServer` | server: string | void | 设置STUN服务器地址 | | `getStunServerUsername` | - | string | 获取STUN服务器用户名 | | `setStunServerUsername` | username: string | void | 设置STUN服务器用户名 | | `getNatV4Address` | - | string | 获取NAT IPv4地址 | | `setNatV4Address` | addr: string | void | 设置NAT IPv4地址 | | `getNatV6Address` | - | string | 获取NAT IPv6地址 | | `setNatV6Address` | addr: string | void | 设置NAT IPv6地址 | | `resolveStunServer` | - | void | 执行STUN服务器的DNS解析 | | `isUdpTurnTransportEnabled` | - | boolean | UDP TURN传输是否启用 | | `setUdpTurnTransportEnabled` | enable: boolean | void | 启用(true)或禁用(false)UDP TURN传输 | | `isTcpTurnTransportEnabled` | - | boolean | TCP TURN传输是否启用 | | `setTcpTurnTransportEnabled` | enable: boolean | void | 启用(true)或禁用(false)TCP TURN传输 | | `isTlsTurnTransportEnabled` | - | boolean | TLS TURN传输是否启用 | | `setTlsTurnTransportEnabled` | enable: boolean | void | 启用(true)或禁用(false)TLS TURN传输 | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部模块使用) | | `getTurnConfigurationEndpoint` | - | string | 获取TURN配置端点 | | `setTurnConfigurationEndpoint` | endpoint: string | void | 设置TURN配置端点 | #### RemoteContactDirectory RemoteContactDirectory是支持LDAP/CardDAV协议的远程发现目录服务。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getType` | - | number | 获取LDAP/CardDAV服务器的连接协议类型 | | `getCardDavParams` | - | CardDavParams \| null | 获取CardDAV参数 | | `getLdapParams` | - | LdapParams \| null | 获取LDAP参数 | | `getServerUrl` | - | string | 获取服务器URL | | `setServerUrl` | url: string | void | 设置服务器URL | | `getLimit` | - | number | 获取搜索结果上限 | | `setLimit` | limit: number | void | 设置搜索结果上限 | | `getMinCharacters` | - | number | 获取搜索所需的最小字符数 | | `setMinCharacters` | min: number | void | 设置搜索所需的最小字符数 | | `getTimeout` | - | number | 获取请求超时时间(秒) | | `setTimeout` | seconds: number | void | 设置请求超时时间(秒) | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### CardDavParams CardDavParams 用于配置CardDAV服务连接的参数对象。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserInputFields` | - | Array | 获取用户信息配置所需的输入字段列表(包含但不限于用户名、邮箱和电话号码) | | `setUserInputFields` | fields: Array | void | 设置用户输入字段 | | `getDomainFields` | - | Array | 获取DNS域名解析所需的字段列表(包含但不限于主机名和IP地址) | | `setDomainFields` | fields: Array | void | 设置域名字段 | | `getUseExactMatchPolicy` | - | boolean | 获取是否在LDAP查询中使用精确匹配策略 | | `setUseExactMatchPolicy` | exact: boolean | void | 设置LDAP查询中的精确匹配策略 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### LdapParams 用于配置LDAP目录服务连接和查询操作的参数。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getServer` | - | string | 获取LDAP服务器地址和端口号 | | `setServer` | server: string | void | 设置LDAP服务器地址和端口号 | | `getBindDn` | - | string | 获取LDAP绑定DN(Distinguished Name) | | `setBindDn` | bindDn: string | void | 设置LDAP绑定DN(Distinguished Name) | | `getPassword` | - | string | 获取密码 | | `setPassword` | password: string | void | 设置密码 | | `getBaseObject` | - | string | 获取LDAP基础对象 | | `setBaseObject` | baseObject: string | void | 设置LDAP基础对象 | | `getFilter` | - | string | 获取LDAP查询过滤器 | | `setFilter` | filter: string | void | 设置LDAP查询过滤器 | | `getMaxResults` | - | number | 获取最大结果数 | | `setMaxResults` | maxResults: number | void | 设置最大结果数 | | `getMinChars` | - | number | 获取最小字符数 | | `setMinChars` | minChars: number | void | 设置最小字符数 | | `getTimeout` | - | number | 获取请求超时时间(秒) | | `setTimeout` | timeout: number | void | 设置请求超时(秒) | | `getDelay` | - | number | 获取请求延迟(毫秒) | | `setDelay` | delay: number | void | 设置请求延迟(毫秒) | | `getNameAttribute` | - | string | 获取LDAP对象的名称属性 | | `setNameAttribute` | attr: string | void | 设置LDAP对象的名称属性 | | `getSipAttribute` | - | string | 获取SIP属性 | | `setSipAttribute` | attr: string | void | 设置SIP属性 | | `getSipDomain` | - | string | 获取SIP域 | | `setSipDomain` | domain: string | void | 设置SIP域 | | `getAuthMethod` | - | number | 获取认证方式 | | `setAuthMethod` | method: number | void | 设置认证方式 | | `isTlsEnabled` | - | boolean | TLS是否启用 | | `setTlsEnabled` | enable: boolean | void | 设置TLS是否启用 | | `getTimeoutTlsMs` | - | number | 获取TLS请求超时时间(毫秒) | | `setTimeoutTlsMs` | timeout: number | void | 设置TLS请求超时时间(毫秒) | | `isEnabled` | - | boolean | 当前模块是否启用 | | `setEnabled` | enable: boolean | void | 设置是否启用 | | `check` | - | number | 返回表示连接状态(0=断开,1=连接中,2=已连接)的数字代码 | | `isSalEnabled` | - | boolean | 服务抽象层(SAL, Service Abstraction Layer)是否启用 | | `setSalEnabled` | enable: boolean | void | 设置服务抽象层(SAL, Service Abstraction Layer)是否启用 | | `getDebugLevel` | - | number | 获取当前调试级别(0=关闭,1=基础,2=详细,3=全面) | | `setDebugLevel` | level: number | void | 设置调试级别 | | `getServerCertificatesVerificationMode` | - | number | 获取服务器证书验证模式(0=不验证,1=基本验证,2=严格验证) | | `setServerCertificatesVerificationMode` | mode: number | void | 设置服务器证书验证模式(0=不验证,1=基本验证,2=严格验证) | | `getCustomValue` | key: string | string | 获取存储在指定键下的字符串类型自定义配置值 | | `setCustomValue` | key: string, value: string | void | 设置自定义配置值 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 事件与状态 #### Event 用于SIP协议的事件订阅基础对象。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `refreshSubscribe` | - | number | 刷新当前订阅状态 | | `acceptSubscription` | - | number | 接受联系人订阅请求 | | `denySubscription` | reason: number | number | 拒绝联系人订阅请求 | | `refreshPublish` | - | number | 刷新Publish状态 | | `acceptPublish` | - | number | 接受发布 | | `denyPublish` | reason: number | number | 拒绝发布 | | `pausePublish` | - | void | 暂停发布 | | `getReason` | - | number | 获取拒绝原因码 | | `getErrorInfo` | - | ErrorInfo | 获取错误详情信息 | | `getSubscriptionState` | - | number | 获取订阅状态值 | | `getPublishState` | - | number | 获取当前发布操作的状态码 | | `getSubscriptionDir` | - | number | 查询订阅数据流向方向的值 | | `addCustomHeader` | name: string, value: string | void | 添加自定义SIP请求头 | | `removeCustomHeader` | name: string | void | 移除自定义SIP请求头 | | `getCustomHeader` | headerName: string | string | 获取自定义SIP请求头 | | `terminate` | - | void | 终止当前会话 | | `getName` | - | string | 获取终端设备名称 | | `getFromAddress` | - | Address | 获取From头地址 | | `getToAddress` | - | Address | 获取To头地址 | | `getResource` | - | Address | 获取事件资源地址 | | `getRemoteContact` | - | Address | 获取远端联系人 | | `getCore` | - | Core | 获取当前Core指针实例(仅限SDK内部使用,外部直接调用可能导致内存泄漏或未定义行为) | | `getCallId` | - | string | 获取通话ID | | `getCurrentCallbacks` | - | EventCbs | 获取当前事件回调函数对象(建议在需要动态管理事件监听时使用addListener) | | `getRequestAddress` | - | Address | 获取请求地址 | #### EventLog 聊天室事件日志(参与者加入、主题变更)。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getType` | - | number | 获取Payload类型 | | `getCreationTime` | - | number | 获取创建时间(Unix时间戳) | | `getChatMessage` | - | ChatMessage \| null | 聊天消息事件 | | `getParticipantAddress` | - | Address \| null | 参与者事件 | | `getDeviceAddress` | - | Address \| null | 参与者设备事件 | | `getSubject` | - | string | 主题事件 | | `getPeerAddress` | - | Address \| null | 会议事件 | | `getLocalAddress` | - | Address \| null | 获取本地地址 | | `getNotifyId` | - | number | 获取通知ID | | `getCallLog` | - | CallLog \| null | 会议呼叫事件 | | `getConferenceInfo` | - | ConferenceInfo \| null | 获取会议信息 | | `getSecurityEventType` | - | number | 安全事件类型 | | `getSecurityEventFaultyDeviceAddress` | - | Address \| null | 获取安全事件故障设备地址 | | `getEphemeralMessageLifetime` | - | number | 获取临时消息的存活时间(秒) | | `deleteFromDatabase` | - | void | 从数据库中删除数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### EventCbs 用于存储和管理事件回调函数的数据结构。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getUserData` | - | string | 获取用户自定义数据 | | `setUserData` | data: string | void | 设置用户自定义数据 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | #### ErrorInfo Linphone API返回的错误码及对应的错误描述信息。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | | `getReason` | - | number | 获取原因码 | | `getProtocol` | - | string | 获取错误协议类型 | | `getProtocolCode` | - | number | 获取错误协议类型 Code | | `getPhrase` | - | string | 获取错误描述 | | `getWarnings` | - | string | 获取SIP警告头字段 | | `getRetryAfter` | - | number | 获取重试等待时间 | | `getSubErrorInfo` | - | ErrorInfo | 获取子错误信息 | | `setReason` | reason: number | void | 设置错误原因 | | `setProtocol` | protocol: string | void | 设置Protocol | | `setProtocolCode` | code: number | void | 设置错误协议类型 Code | | `setPhrase` | phrase: string | void | 设置错误描述 | | `setWarnings` | warnings: string | void | 设置SIP警告头字段 | | `setRetryAfter` | retryAfter: number | void | 设置重试等待时间 | | `setSubErrorInfo` | errorInfo: ErrorInfo | void | 设置子错误信息 | #### PresenceModel 在线状态(presence)模型。 | 方法 | 参数 | 返回值 | 说明 | |------|------|--------|------| | `getStatus` | - | number | 获取在线状态 | | `setStatus` | status: number | void | 设置状态 | | `getActivity` | - | number | 获取当前活跃TCP连接的数量 | | `setActivity` | activity: number | void | 设置当前活跃的TCP/IP网络连接数量 | | `getNote` | - | string | 获取备注信息 | | `setNote` | note: string | void | 设置备注信息 | | `isOnline` | - | boolean | 网络是否在线 | | `getTimestamp` | - | number | 获取时间戳 | | `ref` | - | void | 引用计数+1 | | `unref` | - | void | 引用计数-1 | ### 模块常量 #### 模块常量 FriendList 类型、同步状态与 MagicSearch 数据源常量定义在 `libohos_linphone.so` 动态链接库中。 | 常量 | 值 | 说明 | |------|-----|------| | `FRIEND_LIST_TYPE_CARDDAV` | number = 0 | FriendList类型常量:CardDAV (0) | | `FRIEND_LIST_TYPE_APPLICATION_CACHE` | number = 2 | FriendList类型常量:应用缓存 (2) | | `FRIEND_LIST_SYNC_STARTED` | number = 0 | 联系人列表同步状态:已开始 (0) | | `FRIEND_LIST_SYNC_SUCCESSFUL` | number = 1 | 联系人列表同步状态:成功 (1) | | `FRIEND_LIST_SYNC_FAILURE` | number = 2 | 联系人列表同步状态:失败 (2) | | `MAGIC_SEARCH_SOURCE_FRIENDS` | number = 1 | MagicSearch数据源标志:本地联系人 (1) | | `MAGIC_SEARCH_SOURCE_LDAP` | number = 4 | MagicSearch数据源标志:LDAP (4) | | `MAGIC_SEARCH_SOURCE_REMOTE_CARDDAV` | number = 128 | MagicSearch数据源标志:远程CardDAV (128) | | `MAGIC_SEARCH_AGGREGATION_FRIEND` | number = 1 | MagicSearch聚合模式:按Friend聚合 (1) | ## 目录结构 ``` linphone_napi/ ├── AppScope/ # 应用级配置与资源 │ ├── app.json5 │ └── resources/ ├── entry/ # 示例应用入口模块 │ ├── src/main/ets/ │ │ ├── components/ # 可复用 UI 组件 │ │ ├── entryability/ # 应用启动 Ability │ │ ├── entrybackupability/ # 备份 Ability │ │ ├── pages/ # 登录、通话、聊天、联系人等页面 │ │ ├── utils/ # UI 侧工具辅助类 │ │ ├── viewmodel/ # 页面 ViewModel │ │ └── voipability/ # VoIP 相关 Ability │ ├── src/main/resources/ │ └── module.json5 ├── ohos_linphone/ # OpenHarmony Linphone SDK 模块 │ ├── libs/arm64-v8a/ # 预编译原生共享库 │ ├── src/main/cpp/ # NAPI 桥接层与原生封装 │ │ ├── account/ # 账号 API │ │ ├── account_listener/ # 账号监听封装 │ │ ├── call/ # 通话 API │ │ ├── call_listener/ # 通话监听封装 │ │ ├── call_log/ # 通话记录 API │ │ ├── call_stats/ # 通话统计 API │ │ ├── chat_message/ # 消息 API │ │ ├── chat_room/ # 聊天室 API 与监听器 │ │ ├── conference/ # 会议 API │ │ ├── core/ # Linphone Core 封装 │ │ ├── core_listener/ # Linphone Core 监听封装 │ │ ├── event/ # 事件 API │ │ ├── factory/ # 工厂封装 │ │ ├── friend_list/ # 联系人列表 API 与监听器 │ │ ├── player/ # 播放器 API │ │ ├── recorder/ # 录音器 API │ │ ├── search/ # MagicSearch 相关 API │ │ ├── tool/ # 公共原生工具 │ │ ├── types/ # 面向 ETS 的类型声明 │ │ ├── video/ # 视频相关封装 │ │ ├── video_definition/ # 视频定义类型 │ │ ├── CMakeLists.txt │ │ └── napi_init.cpp │ ├── src/main/ets/ │ │ └── Factory.ets # 全局唯一工厂对象 │ └── Index.ets ├── README.md └── README_zh.md ``` ## 关于混淆 - 代码混淆,请查看[代码混淆简介](https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/arkts-utils/source-obfuscation.md) - 如果希望linphone库在代码混淆过程中不会被混淆,需要在混淆规则配置文件obfuscation-rules.txt中添加相应的排除规则: ``` -keep ./oh_modules/@ohos/linphone ``` ## 约束与限制 在下述版本验证通过: DevEco Studio: 5.0.4 Release, SDK: API16 Release(5.0.4.150)。 ## 贡献代码 使用过程中发现任何问题都可以提 [issue](https://gitee.com/openharmony-tpc-incubate/linphone_napi/issues),当然,也非常欢迎发 [PR](https://gitee.com/openharmony-tpc-incubate/linphone_napi/pulls) 共建。 ## 开源协议 本项目基于 [Apache License 2.0](https://gitee.com/openharmony-tpc-incubate/linphone_napi/blob/master/LICENSE) ,请自由的享受和参与开源。 ## 遗留问题 目前该demo在音频通话时打开摄像头会出现己方画面无法显示的问题。 **关于服务端依赖功能的说明:** 本 Demo 的部分功能需要与 linphone 官方公共 SIP 服务器进行交互。受官方服务稳定性影响,相关操作可能存在响应延迟或偶发失败的情况。该现象属于服务端环境限制,并非 SDK 或 Demo 本身的功能缺陷。建议在操作失败时进行重试,或搭建私有 SIP 服务器以获得更稳定的使用体验。