@deltachat/calls-webapp

中文文档
0.12.1-beta-debug发布于 2026/02/18ES Module近 30 天下载 2366

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端.

中文使用文档
文档目录9 节
  1. 如何运作
  2. 整合
  3. 捐款
  4. 安装依赖关系
  5. 正在检查代码格式
  6. 在浏览器中测试应用程序
  7. 大楼
  8. 释放
  9. 贷项

打电话

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端.

如何运作

以下是Delta Chat如何与这个应用程序合作的序列图. 如果你看到一个字组而不是一个图表,请去 这里。 。 。 .

sequenceDiagram
    participant Alice as Alice's Delta Chat
    participant ATURN as Alice's TURN / STUN servers
    participant BTURN as Bob's TURN / STUN servers<br> (could be the same as Alice's)
    participant Bob as Bob's Delta Chat

    Note over Alice: Alice presses<br>"Start Call with Bob"
    Alice ->> ATURN: What's my public address?
    Alice ->> ATURN: Please relay my packets
    ATURN -->> Alice: Your address is<br>42.42.42.42:12345<br>(srflx candidate gathered)
    ATURN -->> Alice: I will relay your packets<br>(TURN (relay) candidate<br>gathered)
    Note over Alice: Wait for relay candidate<br>or for timeout
    Alice ->> Bob: (email) I want to start a call. My address is 42.42.42.42:12345,<br>or you can reach me at my TURN server.<br>(WebRTC offer)

    Note over Bob: Bob presses "Accept Call"
    Bob ->> BTURN: What's my public address?
    Bob ->> BTURN: Please relay my packets
    ATURN ->> Alice: BTW your other address is<br>42.42.42.43:54321
    BTURN -->> Bob: Your address is<br>43.43.43.43:55555<br>(srflx candidate gathered)
    BTURN -->> Bob: I will relay your packets<br>(TURN (relay) candidate<br>gathered)
    Note over Bob: Wait for relay candidate<br>or for timeout
    Bob ->> Alice: (email) Sure, let's have a call. My address is 43.43.43.43:55555,<br>or you can reach me at my TURN server.<br>(WebRTC answer)

    loop
        Alice <<-->> Bob: P2P video stream (if possible)
        Alice <<->> ATURN: relayed video stream<br>(if P2P not possible)
        ATURN <<->> BTURN: relayed video stream<br>(if P2P not possible)
        BTURN <<->> Bob: relayed video stream<br>(if P2P not possible)
    end

    BTURN ->> Bob: BTW your other address is<br>43.43.43.43:55556

    loop An additional WebRTC data channel can be established (via relay or P2P)<br>to promote more ICE candidates after the initial connection is established
        Alice ->> Bob: My other address is 42.42.42.43:54321
        Bob ->> Alice: My other address is 43.43.43.43:55556
    end

整合

要融入您的 Delta 聊天客户端, 您需要提供 window.calls 下列 API 对象 :

  • startCall: (offerPayload: string) => void (执行必须调用 dc_place_outgoing_call 聊天邮件核心 API)
  • acceptCall: (answerPayload: string) => void (执行必须调用 dc_accept_incoming_call 聊天邮件核心 API)
  • endCall: () => void (执行必须调用 dc_end_call 聊天邮件核心 API)
  • getIceServers: () => string | Promise<string> (返回 JSON 字符串,并按预期设置冰上服务器配置) https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/setConfuguation 互联网档案馆的存檔,存档日期2013-12-22(中文(简体) )
  • getAvatar: () => string (返回聊天的外观图像 URL;可以是普通的URL或数据-URL,前. "data:image/png;base64,..."(中文(简体) )

通过 URL 散列给予应用程序命令 :

  • #startCall: 告诉应用程序生成要约有效载荷并呼叫 startCall(),这就是当用户开始发出一个调用时应用程序应该如何打开.
  • #offerIncomingCall=PAYLOAD:告诉应用程序显示"来电". 回答吗? 屏幕 然后,如果用户点击"Answer",则生成一个WebRTC对所提供的报价的回答 PAYLOAD电话 window.calls.acceptCall(webrtcAnswer)。如果用户拒绝调用,应用程序将引用 window.calls.endCall。 。 。 .
  • #acceptCall=PAYLOAD: 与 #offerIncomingCall,但并没有显示"来电。 回答,”然后自动并立即接受电话.
  • #onAnswer=PAYLOAD:通知应用程序,发出呼叫被接受,并提供应答有效载荷

关键是: PAYLOAD 必须 被 Base64 编码( NOTE: 您可能还需要 URL- encode 该 base64 字符串才能成为有效的 URL 散列) , 然后再将其传递到 URL 散列中的应用 .

为了在音频模式下启动应用程序, 提供 noOutgoingVideoInitially 在查询(搜索)字符串中 初始URL,例如:. /index.html?noOutgoingVideoInitially#startCall。 。 。 .

为了完全禁用进出视频, 提供 disableVideoCompletely 在 URL 查询字符串中. 见 https://github.com/deltachat/calls-webapp/issues/31 互联网档案馆的存檔,存档日期2013-12-02。 。 。 .

捐款

安装依赖关系

复制后, 安装依赖性 :

pnpm i

正在检查代码格式

pnpm check

在浏览器中测试应用程序

开发时要在浏览器中测试您的工作 :

pnpm start

在两个单独的分页中打开模拟实例(模拟器中实例上的"共享"按钮). 然后添加 #startCall 到一个实例的 URL 结尾.

在Safari上的macOS上,您可能无法同时给相机两个分页的访问权限;在这种情况下,尝试Firefox.

大楼

要构建用于释放的应用程序:

pnpm build

在 Delta Chat 中以开发工具包装应用程序以调试 NODE_ENV 用于“ 调试” 的环境变量 :

NODE_ENV=debug pnpm build

由此产生的优化 .html 文件保存于 dist/ 文件夹.

释放

自动创建并创建新的 GitHub 版本 .html 文件 :

git tag -a v1.0.1
git push origin v1.0.1

贷项

灵感来自 无服务器 WebRTC 但从零开始建造 简单得多: 没有支持数据通道、文件传输和仅支持浏览器.

请参看博客文章

版本与发布记录

@deltachat/calls-webapp 共发布 4 个版本,首次发布于 2025/10/13;过去 12 个月发布了 2 个版本。

版本发布日期距今
0.12.1-beta-debuglatest2026/02/188 个月前
0.12.0-beta-debug2026/02/059 个月前
0.11.0-beta-debug2025/11/121 年前
0.10.0-beta-debug2025/10/131.1 年前

关于 @deltachat/calls-webapp 的常见问题

@deltachat/calls-webapp 是什么?

P2P视频通过WebRTC进行调用,以融入Delta Chat客户端.

如何安装 @deltachat/calls-webapp?

在项目目录运行 npm install @deltachat/calls-webapp,或使用 pnpm add / yarn add / bun add。

@deltachat/calls-webapp 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/deltachat__calls-webapp 是否存在。

@deltachat/calls-webapp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@deltachat/calls-webapp 可以商用吗?

@deltachat/calls-webapp 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@deltachat/calls-webapp 的下载量有多少?

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

@deltachat/calls-webapp 还在维护吗?

最新版本 0.12.1-beta-debug 发布于 2026/02/18(8 个月前);至今共发布 4 个版本,其中过去 12 个月发布了 2 个;首次发布于 2025/10/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。