Electron SDK 接入
在 Electron 桌面应用的 Main 进程中初始化 TiRTC,再通过连接和媒体输出实现设备音视频播放。Renderer 通过应用自己的 IPC 操作这些对象。
接入要求
- Node.js
22及以上,Electron^43.3.0。 - 支持 macOS arm64 / x64。安装包中的 Windows x64 原生文件尚未完成运行验证,不作为当前受支持平台。
- SDK 在
app.whenReady()后使用;媒体对象和TiVideoView均由 Main 进程持有。
安装 SDK
以下步骤使用支持自定义音频输入的预发布包 2.6.0-alpha.18。
npm install https://github.com/tangeai/tirtc-sdk-electron/releases/download/v2.6.0-alpha.18/tirtc-electron-2.6.0-alpha.18.tgz
npm install --save-dev electron@43.3.0提交更新后的依赖声明和锁文件。需要正式版时可使用 npm install tirtc-electron@2.5.0,该版本不支持自定义音频输入。切换到上述预发布包时替换依赖来源,包名和导入路径不变。
初始化
在 Main 入口中调用。SDK cache 位于 app.getPath('userData') 下;如需调整,先通过 Electron 将 userData 设置为可写的绝对路径。
import { app } from 'electron';
import { TiRtc } from 'tirtc-electron';
async function initialize(): Promise<void> {
await app.whenReady();
TiRtc.init({ appId: 'your-app-id' });
// 初始化成功后创建连接、媒体输出和窗口。
}
initialize().catch(console.error);TiRtc.init() 正常返回表示初始化成功;失败会抛出异常。连接、订阅和播放的完整顺序见 Electron API 说明。
配置窗口与麦克风
窗口保持 contextIsolation: true、sandbox: true、nodeIntegration: false。Preload 只暴露业务所需的窄 IPC;不要把 SDK 对象、任意文件路径或长期密钥交给 Renderer。
使用 SDK 麦克风时,在打包配置的 Info.plist 中设置 NSMicrophoneUsageDescription,并在 Main 中先取得授权:
import { systemPreferences } from 'electron';
async function requestMicrophone(): Promise<void> {
if (!await systemPreferences.askForMediaAccess('microphone')) {
throw new Error('未取得麦克风权限');
}
}应用自行配置签名和沙箱权限。仅接收音视频,或发送外部 PCM 时,不需要 SDK 麦克风授权。
打包应用
原生目录必须整体解包到 ASAR 外,包含 .node 和同目录动态库;不要只复制 .node。以下为 electron-builder 的关键配置,发布时只保留目标架构的原生目录,并保留 SDK 的 licenses:
const tuples = ['darwin-arm64', 'darwin-x64', 'win32-x64'];
const tuple = `darwin-${process.arch}`; // 在目标架构的 macOS 上打包
if (process.platform !== 'darwin' || !tuples.includes(tuple)) {
throw new Error('请使用受支持的 macOS 架构打包');
}
module.exports = {
asar: true,
npmRebuild: false,
files: [
'dist/**/*', 'package.json',
'node_modules/tirtc-electron/package.json',
'node_modules/tirtc-electron/identity.json',
'node_modules/tirtc-electron/dist/**/*',
...tuples.filter(item => item !== tuple)
.map(item => `!node_modules/tirtc-electron/native/${item}{,/**/*}`),
`node_modules/tirtc-electron/native/${tuple}/**/*`,
],
asarUnpack: [`node_modules/tirtc-electron/native/${tuple}/**/*`],
extraResources: [{
from: 'node_modules/tirtc-electron/licenses',
to: 'tirtc-licenses',
}],
mac: {
extendInfo: { NSMicrophoneUsageDescription: '用于与设备进行语音对讲' },
},
};SDK 已带所需原生库,安装时不另行下载 Runtime,也不需要在应用中重建原生模块。完整应用结构可参考公开示例。