Skip to content

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。

bash
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 设置为可写的绝对路径。

ts
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 中先取得授权:

ts
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:

js
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,也不需要在应用中重建原生模块。完整应用结构可参考公开示例。

TiRTC 开发文档