# @capgo/capacitor-stream-call 中文文档

规范地址：https://npmcn.com/package/%40capgo/capacitor-stream-call/

版本：8\.0\.80
npm 元数据更新时间：2026-11-09T07:29:41.223Z
中文译文更新时间：2026-11-09T05:41:54.542Z
软件包许可：MPL-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40capgo/capacitor-stream-call
原文对照：https://npmcn.com/package/%40capgo/capacitor-stream-call/?lang=original
项目主页：https://capgo.app/docs/plugins/streamcall/
源码仓库：https://github.com/Cap-go/capacitor-streamcall

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：813 kB，42 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- peer 依赖：@capacitor/core \>=8\.0\.0
- 首次发布：2025-03-04T12:41:06.361Z
- 最新版本发布：2026-11-09T07:29:40.963Z
- 近 30 天下载量：6155（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：193（近 12 个月 92 个）

## 中文简介

使用 [https://getstream.io/ (中文(简体) )](https://getstream.io/) SDK 执行 Capacitor 调用

## 安装

```sh
npm install @capgo/capacitor-stream-call
```

也可以使用：`pnpm add @capgo/capacitor-stream-call`、`yarn add @capgo/capacitor-stream-call`、`bun add @capgo/capacitor-stream-call`

## README

# @ capgo/ 电容器- spress- call

在您的 Capacitor app 中添加视频和音频调用Stream Video SDK , 包括 iOS 和 Android 上的接通呼叫处理和本地调用屏幕.

[![Capgo - Build Capacitor apps with AI, ship updates instantly](https://capgo.app/readme-banner.svg?repo=Cap-go/capacitor-streamcall)](https://capgo.app/?ref=plugin_streamcall)

**队长**:在几分钟内将修正推给您的 Capacitor 用户,在没有Mac的情况下构建已签名的iOS和Android apps,并在一击中回滚.

## [\*免费开始\*](https://capgo.app/register/?ref=plugin_streamcall)

14天无限自由审判. 不需要信用卡

> 🤖 **建筑与AI编码代理?** 安装 [Capgo 技能](https://capgo.app/skills/?ref=plugin_streamcall) 所以克劳德代码,代码,光标,副驾驶,或双子座CLI知道如何安装和使用 `@capgo/capacitor-stream-call` 在您的电容应用程序中: `npx skills add Cap-go/capgo-skills`。然后问你的经纪人: _添加@capgo/电容-流调用到我的电容软件上_ [代理设置指南](https://capgo.app/agents/?ref=plugin_streamcall) • 妇女 [主机磁共振](https://capgo.app/docs/ai/mcp/?ref=plugin_streamcall)

![@capgo/capacitor-stream-call for Capacitor apps](https://raw.githubusercontent.com/Cap-go/capacitor-streamcall/main/assets/github-social-preview.png)

## 主要特点

-   **会议**数字 : `login()` 财务报告和审定财务报表 `logout()` 带有流式用户符号.
-   **电话**数字 : `call()`, (中文(简体) ), `acceptCall()`, (中文(简体) ), `rejectCall()` 财务报告和审定财务报表 `endCall()`,与 `callEvent` 财务报告和审定财务报表 `incomingCall` 听众.
-   **媒体控制**数字 : `setMicrophoneEnabled()`, (中文(简体) ), `setCameraEnabled()`, (中文(简体) ), `switchCamera()` 财务报告和审定财务报表 `setSpeaker()`。 。 。 .
-   **调用信息**数字 : `getCallStatus()`, (中文(简体) ), `getCallInfo()` 财务报告和审定财务报表 `getCurrentUser()`。 。 。 .
-   **动态 API 密钥**数字 : `setDynamicStreamVideoApikey()` 存储本地创建客户端时使用的 Stream API 密钥.
-   **平台**: iOS,Android和Web. 互联网档案馆的存檔,存档日期2013-12-02. Web使用Stream视频客户端.

## 文档

这里有最完整的医生: [https://capgo.app/docs/plugins/流调/](https://capgo.app/docs/plugins/streamcall/)

## 兼容性

| 插件版本 | 电容兼容性 | 维护 |
| --- | --- | --- |
| 联合国 | 联合国 | ✅ |
| 页:1 | 页:1 | 应要求 |
| 页:1 | 页:1 | ❌ |
| 页:1 | 页:1 | ❌ |

> **说明:** 此插件的主要版本沿用了Capacitor的主要版本. 使用匹配您的 Capacitor 安装的版本( 如 Capacitor 8 的插件 v8) 。 只有最新的主要版本得到积极维护.

## 安装

您可以使用我们的 AI 辅助设置安装插件 。 使用以下命令将 Capgo 技能添加到您的 AI 工具 :

```bash
npx skills add https://github.com/cap-go/capacitor-skills --skill capacitor-plugins
```

然后使用下列提示:

```text
Use the `capacitor-plugins` skill from `cap-go/capacitor-skills` to install the `@capgo/capacitor-stream-call` plugin in my project.
```

如果您更喜欢手动设置,请通过运行以下命令来安装插件,并遵循下面的平台特定指令:

```bash
npm install @capgo/capacitor-stream-call
npx cap sync
```

## 配置

### iOS 设置

#### 1\. API 密钥配置

添加您的流视频 API 密钥到 `ios/App/App/Info.plist`数字 :

```xml
<dict>
  <key>CAPACITOR_STREAM_VIDEO_APIKEY</key>
  <string>your_api_key_here</string>
  <!-- other keys -->
</dict>
```

#### 2\. 本地化(可选)

支持多种语言:

1.  添加本地化文件到您的 Xcode 项目 :
    
    -   `/App/App/en.lproj/Localizable.strings`
    -   `/App/App/en.lproj/Localizable.stringsdict`
2.  添加翻译 `Localizable.strings`数字 :
    

```swift
"stream.video.call.incoming" = "Incoming call from %@";
"stream.video.call.accept" = "Accept";
"stream.video.call.reject" = "Reject";
"stream.video.call.hangup" = "Hang up";
"stream.video.call.joining" = "Joining...";
"stream.video.call.reconnecting" = "Reconnecting...";
```

3.  配置您的本地化 `AppDelegate.swift`数字 :

```swift
import StreamVideo

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        Appearance.localizationProvider = { key, table in
            Bundle.main.localizedString(forKey: key, value: nil, table: table)
        }
        return true
    }
}
```

### Android 设置

#### 1\. API 密钥配置

添加您的流视频 API 密钥到 `android/app/src/main/res/values/strings.xml`数字 :

```xml
<string name="CAPACITOR_STREAM_VIDEO_APIKEY">your_api_key_here</string>
```

#### 2\. 主要活动配置

修改您的 `MainActivity.java` 处理来电:

```java
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  // Enable activity to show over lock screen
  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O_MR1) {
    setShowWhenLocked(true);
    setTurnScreenOn(true);
  } else {
    getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
  }
}
```

#### 3\. 应用程序类配置

创建或修改您的应用程序类以初始化插件 :

```java
import ee.forgr.capacitor.streamcall.StreamCallPlugin;

@Override
public void onCreate() {
  super.onCreate();
  
  // Initialize Firebase
  com.google.firebase.FirebaseApp.initializeApp(this);
  
  // Pre-initialize StreamCall plugin
  try {
    StreamCallPlugin.preLoadInit(this, this);
  } catch (Exception e) {
    Log.e("App", "Failed to pre-initialize StreamVideo Plugin", e);
  }
}
```

> **说明:** 如果你没有应用类,你需要创建一个 并在你的 `AndroidManifest.xml` 与 `android:name=".YourApplicationClass"`。 。 。 .

#### 4\. 本地化(可选)

为不同语言添加字符串资源 :

**默认( E)`values/strings.xml`:**

```xml
<resources>
    <string name="stream_video_call_incoming">Incoming call from %1$s</string>
    <string name="stream_video_call_accept">Accept</string>
    <string name="stream_video_call_reject">Reject</string>
    <string name="stream_video_call_hangup">Hang up</string>
    <string name="stream_video_call_joining">Joining...</string>
    <string name="stream_video_call_reconnecting">Reconnecting...</string>
</resources>
```

**法语`values-fr/strings.xml`:**

```xml
<resources>
    <string name="stream_video_call_incoming">Appel entrant de %1$s</string>
    <string name="stream_video_call_accept">Accepter</string>
    <string name="stream_video_call_reject">Refuser</string>
    <string name="stream_video_call_hangup">Raccrocher</string>
    <string name="stream_video_call_joining">Connexion...</string>
    <string name="stream_video_call_reconnecting">Reconnexion...</string>
</resources>
```

## 显示呼叫者信息

接收来电时,您可以访问呼叫者信息,包括姓名,用户ID,以及配置图像. 此信息会自动从调用数据中取出并传递到事件系统.

### 获取呼叫信息

电话信息有两种方式:

**1\. 通过呼叫活动**

这个 `callEvent` 听众为来电提供呼叫信息 :

```typescript
StreamCall.addListener('callEvent', (event) => {
  if (event.state === 'ringing' && event.caller) {
    console.log('Incoming call from:', event.caller.name || event.caller.userId);
    console.log('Caller image:', event.caller.imageURL);
    // Update your UI to show caller information
    showIncomingCallUI(event.caller);
  }
});
```

**2\. 通过来电事件(Android锁屏)**

这个 `incomingCall` 收听者还包括呼叫者信息:

```typescript
StreamCall.addListener('incomingCall', (payload) => {
  if (payload.caller) {
    console.log('Lock-screen call from:', payload.caller.name || payload.caller.userId);
    // Update your lock-screen UI
    updateLockScreenUI(payload.caller);
  }
});
```

### 呼叫者信息结构

```typescript
interface CallMember {
  userId: string;      // User ID (always present)
  name?: string;       // Display name (optional)
  imageURL?: string;   // Profile image URL (optional)
  role?: string;       // User role (optional)
}
```

### 实例

以下是如何执行一个有呼叫者信息的适当来电屏幕:

```typescript
export class CallService {
  private callerInfo: CallMember | null = null;

  constructor() {
    this.setupCallListeners();
  }

  private setupCallListeners() {
    StreamCall.addListener('callEvent', (event) => {
      if (event.state === 'ringing') {
        this.callerInfo = event.caller || null;
        this.showIncomingCallScreen();
      } else if (event.state === 'joined' || event.state === 'left') {
        this.callerInfo = null;
        this.hideIncomingCallScreen();
      }
    });

    // Android lock-screen support
    if (Capacitor.getPlatform() === 'android') {
      StreamCall.addListener('incomingCall', (payload) => {
        this.callerInfo = payload.caller || null;
        this.showLockScreenIncomingCall();
      });
    }
  }

  private showIncomingCallScreen() {
    const callerName = this.callerInfo?.name || 'Unknown Caller';
    const callerImage = this.callerInfo?.imageURL || 'default-avatar.png';
    
    // Update your UI components
    document.getElementById('caller-name').textContent = callerName;
    document.getElementById('caller-image').src = callerImage;
    document.getElementById('incoming-call-screen').style.display = 'block';
  }
}
```

## API 密码

-   [`login(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-login)
-   [`logout()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-logout)
-   [`call(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-call)
-   [`endCall()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-endcall)
-   [`joinCall(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-joincall)
-   [`setMicrophoneEnabled(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-setmicrophoneenabled)
-   [`setCameraEnabled(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-setcameraenabled)
-   [`addListener('callEvent', ...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-addlistenercallevent-)
-   [`addListener('incomingCall', ...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-addlistenerincomingcall-)
-   [`removeAllListeners()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-removealllisteners)
-   [`enableBluetooth()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-enablebluetooth)
-   [`acceptCall()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-acceptcall)
-   [`rejectCall()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-rejectcall)
-   [`isCameraEnabled()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-iscameraenabled)
-   [`getCallStatus()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getcallstatus)
-   [`getRingingCall()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getringingcall)
-   [`toggleViews()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-toggleviews)
-   [`setSpeaker(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-setspeaker)
-   [`switchCamera(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-switchcamera)
-   [`getCallInfo(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getcallinfo)
-   [`setDynamicStreamVideoApikey(...)`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-setdynamicstreamvideoapikey)
-   [`getDynamicStreamVideoApikey()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getdynamicstreamvideoapikey)
-   [`getCurrentUser()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getcurrentuser)
-   [`getPluginVersion()`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-getpluginversion)
-   [接口](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-interfaces)
-   [类型异名](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-type-aliases)
-   [数字](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-enums)

### 登录(...)

```typescript
login(options: LoginOptions) => Promise<SuccessResponse>
```

登录到流视频服务

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `[LoginOptions](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-loginoptions)` | \- 登录配置 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 登录( c)

```typescript
logout() => Promise<SuccessResponse>
```

从流视频服务登录

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 调用(...)

```typescript
call(options: CallOptions) => Promise<SuccessResponse>
```

启动给另一个用户的呼叫

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `[CallOptions](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-calloptions)` | \- 调用配置 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 端点呼叫( C)

```typescript
endCall() => Promise<SuccessResponse>
```

结束当前呼叫

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 加入呼叫(...)

```typescript
joinCall(options: { callId: string; callType: string; }) => Promise<SuccessResponse>
```

加入已有的调用

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ callId: string; callType: string; }` | \- 麦克风状态 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### set 麦克风

```typescript
setMicrophoneEnabled(options: { enabled: boolean; }) => Promise<SuccessResponse>
```

启用或禁用麦克风

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ enabled: boolean; }` | \- 麦克风状态 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 设置 CameraEnabled (...)

```typescript
setCameraEnabled(options: { enabled: boolean; }) => Promise<SuccessResponse>
```

启用或禁用相机

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ enabled: boolean; }` | \- 相机状态 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 添加倾听器( “ callEvent, ” )..

```typescript
addListener(eventName: 'callEvent', listenerFunc: (event: CallEvent) => void) => Promise<{ remove: () => Promise<void>; }>
```

为呼叫事件添加听众

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`eventName`** | `'callEvent'` | \- 要聆听的活动名称 |
| **`listenerFunc`** | `(event: [CallEvent](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callevent)) => void` | \- 回调函数 |

**回返情况:** `Promise<{ remove: () => Promise<void>; }>`

* * *

### 添加收听器('incoming Call',...)

```typescript
addListener(eventName: 'incomingCall', listenerFunc: (event: IncomingCallPayload) => void) => Promise<{ remove: () => Promise<void>; }>
```

监听锁屏接通电话(仅限Android). 在用户互动前通过全屏意图显示应用程序时被解除.

| 参数 | 类型 |
| --- | --- |
| **`eventName`** | `'incomingCall'` |
| **`listenerFunc`** | `(event: [IncomingCallPayload](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-incomingcallpayload)) => void` |

**回返情况:** `Promise<{ remove: () => Promise<void>; }>`

* * *

### 删除所有收听器( )

```typescript
removeAllListeners() => Promise<void>
```

删除全部事件听众

* * *

### 启用蓝牙 ()

```typescript
enableBluetooth() => Promise<SuccessResponse>
```

启用蓝牙音频

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 接受呼叫( C)

```typescript
acceptCall() => Promise<SuccessResponse>
```

接受接听的电话

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 拒绝呼叫( C)

```typescript
rejectCall() => Promise<SuccessResponse>
```

拒绝来电

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### is CameraEnabled () (帮助)

```typescript
isCameraEnabled() => Promise<CameraEnabledResponse>
```

检查是否启用相机

**回返情况:** `Promise<[CameraEnabledResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-cameraenabledresponse)>`

* * *

### 获取呼叫状态( C)

```typescript
getCallStatus() => Promise<CallEvent>
```

获取当前呼叫状态

**回返情况:** `Promise<[CallEvent](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callevent)>`

* * *

### 获得 RingCall ()

```typescript
getRingingCall() => Promise<CallEvent>
```

获取当前铃声

**回返情况:** `Promise<[CallEvent](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callevent)>`

* * *

### 切换视图( )

```typescript
toggleViews() => Promise<{ newLayout: StreamCallLayout; }>
```

通过可用视频布局循环

**回返情况:** `Promise<{ newLayout: [StreamCallLayout](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-streamcalllayout); }>`

* * *

### 设置语法(...)

```typescript
setSpeaker(options: { name: string; }) => Promise<SuccessResponse>
```

打开扬声器

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ name: string; }` | \- 扬声器名称 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 切换Camera(...)

```typescript
switchCamera(options: { camera: 'front' | 'back'; }) => Promise<SuccessResponse>
```

切换相机

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ camera: 'front' | 'back'; }` | \- 要切换到的相机 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 获取CallInfo(...)

```typescript
getCallInfo(options: { callId: string; }) => Promise<CallEvent>
```

获取一个活动电话的详细信息, 包括呼叫者的详细信息

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ callId: string; }` | \- 包含呼叫ID的选项 |

**回返情况:** `Promise<[CallEvent](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callevent)>`

* * *

### 设置 DynamicStreamVideo Apikey (...)

```typescript
setDynamicStreamVideoApikey(options: { apiKey: string; }) => Promise<SuccessResponse>
```

设置一个动态流视频 API 密钥来覆盖静态

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| **`options`** | `{ apiKey: string; }` | \- 要设置的 API 密钥 |

**回返情况:** `Promise<[SuccessResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-successresponse)>`

* * *

### 获得DynamicStreamVideo Apikey ()

```typescript
getDynamicStreamVideoApikey() => Promise<DynamicApiKeyResponse>
```

获取当前设置的动态流视频 API 密钥

**回返情况:** `Promise<[DynamicApiKeyResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-dynamicapikeyresponse)>`

* * *

### 获取当前用户( C)

```typescript
getCurrentUser() => Promise<CurrentUserResponse>
```

获取当前用户的信息

**回返情况:** `Promise<[CurrentUserResponse](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-currentuserresponse)>`

* * *

### 获取 PluginVersion ()

```typescript
getPluginVersion() => Promise<{ version: string; }>
```

获取本地 Capacitor 插件版本

**回返情况:** `Promise<{ version: string; }>`

* * *

### 接口

#### 成功答复

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`success`** | `boolean` | 操作是否成功 |
| **`callId`** | `string` |  |

#### 登录选项

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`token`** | `string` | 流视频 API 令牌 |
| **`userId`** | `string` | 当前用户的用户ID |
| **`name`** | `string` | 显示当前用户的名称 |
| **`imageURL`** | `string` | 当前用户的可选可变 URL |
| **`apiKey`** | `string` | 流视频 API 密钥 |
| **`magicDivId`** | `string` | 显示视频的 HTML 元素的标识 |
| **`pushNotificationsConfig`** | `[PushNotificationsConfig](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-pushnotificationsconfig)` |  |

#### 推进通知

| Prop | 类型 |
| --- | --- |
| **`pushProviderName`** | `string` |
| **`voipProviderName`** | `string` |

#### 调用选项

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`userIds`** | `string[]` | 打电话者的用户身份 |
| **`type`** | `[CallType](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-calltype)` | 呼叫类型, 默认为“ 默认 ” |
| **`ring`** | `boolean` | 是否按下另一个用户, 默认为真 |
| **`team`** | `string` | 要呼叫的团队名称 |
| **`video`** | `boolean` | 是否启用视频启动调用, 默认为虚假 |
| **`custom`** | `[Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)< string, | string | boolean | number | null | [Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)<string, string | boolean | number | null> | string[] | boolean[] | number[] >` | 自定义数据传递给呼叫 |

#### 调用事件

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`callId`** | `string` | 电话号码 |
| **`state`** | `[CallState](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callstate)` | 呼叫现状 |
| **`userId`** | `string` | 触发事件的电话参与者的用户代号 |
| **`reason`** | `string` | 更改呼叫状态的理由(如适用) |
| **`caller`** | `[CallMember](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callmember)` | 关于打电话者的信息(接听电话) |
| **`members`** | `CallMember[]` | 呼叫成员名单 |
| **`custom`** | `[Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)< string, | string | boolean | number | null | [Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)<string, string | boolean | number | null> | string[] | boolean[] | number[] >` |  |
| **`count`** | `number` |  |

#### 呼叫状态

[呼叫状态](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callstate) 是调用当前状态 被SFU看见了.

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`participants`** | `Participant[]` | 参与者是该电话的参与者名单。 在大叫中,可以缩短名单,在这种情况下,参与者名单中包含的参与者少于在参与者 计数中返回的计数. 匿名与会者是: **没有** 列入清单. |
| **`startedAt`** | `[Timestamp](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp)` | 启动时间是呼叫会话实际开始的时间. |
| **`participantCount`** | `[ParticipantCount](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-participantcount)` | 参与者 计数包含计数摘要. |
| **`pins`** | `Pin[]` | 呼叫中的针头列表。 平板按下行顺序排列(最重要的第一). |

#### 参加者

在电话里的人

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`userId`** | `string` |  |
| **`sessionId`** | `string` |  |
| **`publishedTracks`** | `TrackType[]` | 轨迹 id 映射到轨迹类型 |
| **`joinedAt`** | `[Timestamp](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp)` |  |
| **`trackLookupPrefix`** | `string` |  |
| **`connectionQuality`** | `[ConnectionQuality](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-connectionquality)` |  |
| **`isSpeaking`** | `boolean` |  |
| **`isDominantSpeaker`** | `boolean` |  |
| **`audioLevel`** | `number` |  |
| **`name`** | `string` |  |
| **`image`** | `string` |  |
| **`custom`** | `[Struct](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-struct)` |  |
| **`roles`** | `string[]` |  |

#### 时间戳

A 类 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 代表独立于任何时区或当地时间点 日历,编码为秒数和分数秒数 纳秒分辨率。 计数时间是UTC午夜时段 1970年1月1日,在延长Gregorian日历中 格雷高历倒向了第一年.

所有分钟都是60秒长。 漏出秒数是"相思"的,所以不会跳跃 口译需要第二表,使用 [24小时线性 涂鸦](https://developers.google.com/time/smear)。 。 。 .

范围从0001-01-01T00:00:00Z到9999-12-31T23:59:99999999Z. 以 我们保证,我们可在此范围内进行改造 [RFC (RFC ) (法语) 3339 (英语)](https://www.ietf.org/rfc/rfc3339.txt) 日期字符串.

# 实例

例1:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从POSIX调用 `time()`。 。 。 .

```
<a href="#timestamp">Timestamp</a> timestamp;
timestamp.set_seconds(time(NULL));
timestamp.set_nanos(0);
```

示例2:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从POSIX调用 `gettimeofday()`。 。 。 .

```
struct timeval tv;
gettimeofday(&tv, NULL);

<a href="#timestamp">Timestamp</a> timestamp;
timestamp.set_seconds(tv.tv_sec);
timestamp.set_nanos(tv.tv_usec * 1000);
```

例3:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从 Win32 `GetSystemTimeAsFileTime()`。 。 。 .

```
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
UINT64 ticks = (((UINT64)ft.dwHighDateTime) &lt;&lt; 32) | ft.dwLowDateTime;

// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
// is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
<a href="#timestamp">Timestamp</a> timestamp;
timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
```

例4:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从 Java 中 `System.currentTimeMillis()`。 。 。 .

```
long millis = System.currentTimeMillis();

<a href="#timestamp">Timestamp</a> timestamp = <a href="#timestamp">Timestamp</a>.newBuilder().setSeconds(millis / 1000)
    .setNanos((int) ((millis % 1000) * 1000000)).build();
```

例5:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从 Java 中 `Instant.now()`。 。 。 .

```
Instant now = Instant.now();

<a href="#timestamp">Timestamp</a> timestamp =
    <a href="#timestamp">Timestamp</a>.newBuilder().setSeconds(now.getEpochSecond())
        .setNanos(now.getNano()).build();
```

例6:计算 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 从现在的 Python.

```
timestamp = <a href="#timestamp">Timestamp</a>()
timestamp.GetCurrentTime()
```

# JSON 绘图

在JSON格式中 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 类型在 [RFC 3339 (法语)](https://www.ietf.org/rfc/rfc3339.txt) 格式。 这就是 格式为“{年}-{月}-{日}T{小时}:{min}:{sec}\[.{frac sec\] 兹" 在 {年份} 总是用 {month} 、{day} 的四位数表示, {hour},{min},和{sec}各为零加到两位数 。 分数 秒,最多可达9位数(即可达1纳秒分辨率), 是可选的。 Z后缀表示时区 ("UTC"); 时区 需要时间。 原型3 JSON 序列器应始终使用世界协调时(如 (Z) 打印时 [时间戳](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-timestamp) 类型和原型3 JSON 剖析器应为 能够同时接受协调世界时和其他时区(如冲抵所示).

例如:"2017-01-15T01:30:15.01Z"编码为15.01秒过去 协调世界时2017年1月15日01:30.

在 JavaScript 中,可以使用 标准 [to ISO String () (中文(简体) )](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) 方法。 在Python,一个标准 `datetime.datetime` 对象可以转换 使用 [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) 与 时间格式 “%Y-%m-%dT%H:%M:%S.%fZ”。 同样,在爪哇,人们可以使用 乔达时间 [`ISODateTimeFormat.dateTime()`](http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D) 以获取一个能够以这种格式生成时间戳的材料.

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`seconds`** | `string` | 代表自Unix Epoch 1970-01-01T00:00Z起协调世界时时间的秒. 必须是从0001-01-01T00:00Z到9999-12-31T23:59:59Z包含. |
| **`nanos`** | `number` | 在纳秒分辨率下为一秒的非负分. 带有分数的负二等值仍必须具有非负二等纳米值,在时间上可以向前计数. 一定是从0到999,999,999 包括. |

#### 结构

[`Struct`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-struct) 代表结构化数据值,由字段组成 哪个映射到动态输入值。 在某些语言中, `Struct` 可由本地代表支持。 例如,在 象JS一样的文字语言 对象。 详细情况一并介绍 与原始支持的语言.

JSON代表 [`Struct`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-struct) 是 JSON 对象.

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`fields`** | `{ [key: string]: [Value](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-value); }` | 动态输入值的无序映射 . |

#### 数值

[`Value`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-value) 表示一个动态键入的值,可以是 无,一个数字,一个字符串,一个布尔,一个递归结构值,或者 数值列表。 价值的生产者预计将确定其中之一 变相. 没有任何变体表示错误.

JSON代表 [`Value`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-value) 这是JSON值.

| Prop | 类型 |
| --- | --- |
| **`kind`** | `{ oneofKind: 'nullValue'; nullValue: [NullValue](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-nullvalue); } | { oneofKind: 'numberValue'; numberValue: number; } | { oneofKind: 'stringValue'; stringValue: string; } | { oneofKind: 'boolValue'; boolValue: boolean; } | { oneofKind: 'structValue'; structValue: [Struct](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-struct); } | { oneofKind: 'listValue'; listValue: [ListValue](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-listvalue); } | { oneofKind: undefined; }` |

#### 列表值

[`ListValue`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-listvalue) 是一个围绕一个重复的值域的包裹.

JSON代表 [`ListValue`](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-listvalue) 是JSON阵列.

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`values`** | `Value[]` | 重复的动态输入值域 . |

#### 参加人数

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`total`** | `number` | 该电话的参与者总数,包括匿名参与者. |
| **`anonymous`** | `number` | 该电话匿名参与者总数. |

#### 键

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`userId`** | `string` | 要标注的用户 |
| **`sessionId`** | `string` | 用户 sision id 针,如果不提供,则适用于所有会话 |

#### 调用成员

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`userId`** | `string` | 成员的用户身份 |
| **`name`** | `string` | 显示用户名称 |
| **`imageURL`** | `string` | 用户配置图像 URL |
| **`role`** | `string` | 用户在呼叫中的作用 |

#### 来电通话费

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`cid`** | `string` | 全称 CID( 如默认: 123) |
| **`type`** | `'incoming'` | 事件类型( 目前始终为" 来" ) |
| **`caller`** | `[CallMember](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-callmember)` | 关于打电话者的信息 |
| **`custom`** | `[Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)< string, | string | boolean | number | null | [Record](https://npmcn.com/package/%40capgo/capacitor-stream-call/#readme-record)<string, string | boolean | number | null> | string[] | boolean[] | number[] >` | 自定义数据传递给呼叫 |

| 方法 | 签署 | 说明 |
| --- | --- | --- |
| **获取 PluginVersion** | ()QQ承诺QQ版本:字符串;QQ | 获取本地 Capacitor 插件版本 |

#### 相机启用响应

| Prop | 类型 |
| --- | --- |
| **`enabled`** | `boolean` |

#### 动态ApiKey响应

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`apiKey`** | `string | null` | 如果设置了动态 API 密钥, 则无效 |
| **`hasDynamicKey`** | `boolean` | 目前是否设置了动态密钥 |

#### 当前用户响应

| Prop | 类型 | 说明 |
| --- | --- | --- |
| **`userId`** | `string` | 当前用户的用户ID |
| **`name`** | `string` | 显示当前用户的名称 |
| **`imageURL`** | `string` | 当前用户的外观 URL |
| **`isLoggedIn`** | `boolean` | 用户是否正在登录 |

### 类型异名

#### 调用类型

`'default' | 'audio' | 'audio_room' | 'livestream' | 'development'`

#### 记录

构造 T 类型 K 的一组属性类型

`{ [P in K]: T; }`

#### 呼叫状态

`'idle' | 'ringing' | 'joining' | 'reconnecting' | 'joined' | 'leaving' | 'left' | 'created' | 'session_started' | 'rejected' | 'participant_counts' | 'missed' | 'accepted' | 'ended' | 'camera_enabled' | 'camera_disabled' | 'speaker_enabled' | 'speaker_disabled' | 'microphone_enabled' | 'microphone_disabled' | 'outgoing_call_ended' | 'unknown'`

#### 串流呼叫拉尤特

`'grid' | 'spotlight' | 'dynamic' | 'fullScreen' | 'fullscreen'`

### 数字

#### 音轨类型

| 成员 | 数值 |
| --- | --- |
| **`UNSPECIFIED`** | `0` |
| **`AUDIO`** | `1` |
| **`VIDEO`** | `2` |
| **`SCREEN_SHARE`** | `3` |
| **`SCREEN_SHARE_AUDIO`** | `4` |

#### 连接质量

| 成员 | 数值 |
| --- | --- |
| **`UNSPECIFIED`** | `0` |
| **`POOR`** | `1` |
| **`GOOD`** | `2` |
| **`EXCELLENT`** | `3` |

#### 数值

| 成员 | 数值 | 说明 |
| --- | --- | --- |
| **`NULL_VALUE`** | `0` | 虚值. |

## 常见问题

### @capgo/capacitor-stream-call 是什么？

使用 https://getstream\.io/ \(中文\(简体\) \) SDK 执行 Capacitor 调用

### 如何安装 @capgo/capacitor-stream-call？

在项目目录运行 npm install @capgo/capacitor-stream-call，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@capacitor/core（\>=8\.0\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @capgo/capacitor-stream-call 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @capgo/capacitor-stream-call 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @capgo/capacitor-stream-call 可以商用吗？

@capgo/capacitor-stream-call 使用 MPL-2\.0 许可。弱 Copyleft：可以商用，也可以和闭源代码一起使用；但如果分发时修改了 MPL 授权的文件，这些文件的修改需以 MPL 开源。以上为概括，不构成法律意见，请以许可原文为准。

### @capgo/capacitor-stream-call 的下载量有多少？

根据 npm 官方下载统计，@capgo/capacitor-stream-call 在 2026/10/09 – 2026/11/07 这 30 天内被下载 6,155 次，日均约 205 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @capgo/capacitor-stream-call 还在维护吗？

最新版本 8\.0\.80 发布于 2026/11/09（今天）；至今共发布 193 个版本，其中过去 12 个月发布了 92 个；首次发布于 2025/03/04。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

