计费模型与单价
按分钟计费的维度(音视频/录制/推流/转码)、单价表、账单口径与免费额度。
ni-meet 的计费模型是按分钟计费(不是按峰值、不是按席位):每一类用量产生 UsageEvent,按分钟累加后乘单价。
计费维度
| 类型 | 计量什么 | 默认单价(USD / 1000 分钟) | 免费额度(分钟) |
|---|---|---|---|
audio | 音频通话时长 | 0.99 | 10,000 |
video | 视频通话时长 | 3.99 | 10,000 |
recording | 云端录制时长 | 7.99 | 0 |
streaming | 推流(Media Push / 旁路推流)时长 | 2.99 | 0 |
transcoding | 云转码时长 | 4.99 | 0 |
计算方式(与实现一致):
amount(type) = max(0, minutes(type) - freeMinutes(type)) / 1000 * unitPricePerThousandMinutes(type)
账单金额 = Σ amount(type) // 按类型分别扣免费额度,不是共用免费额度按类型分别扣:音频 10,000 分钟与视频 10,000 分钟是两份额度,不是共享的 10,000。
一分钟从哪来
| 事件 | 何时记账 |
|---|---|
| 参与者入会 → 退会 | 按参与者在该频道的在线时长累计(UsageEvent.minutes) |
| 录制任务 running → stopped | 按任务运行时长 |
| 推流 converter running → stopped | 按推流时长 |
| 转码任务 running → destroyed | 按任务运行时长 |
口径细节:
- 分钟是浮点,最终汇总时保留 2 位小数(
round(minutes, 2)); - 同一个人在同一频道重复进出会累加,不会合并成「一个人」;
- 空频道(最后一个参与者离开后的宽限期)不产生音频时长;
- 录制/推流/转码即使没有观众也照常计费——它们跑在独立节点上。
查询账单数据
curl -s "$NIMEET_API_BASE/v1/analytics/usage?from=2026-10-01T00:00:00Z&to=2026-10-31T23:59:59Z&granularity=day" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"返回 buckets[](每个时间桶的 minutes/channels/users)与 totals(minutes、peakChannels、amount、currency)。 granularity 支持 hour / day / month。字段级说明见 水晶球 API。
与声网的计费差异(迁移时最容易被问到)
| 维度 | 声网 | ni-meet |
|---|---|---|
| 计费单位 | 分钟(按分辨率分档) | 分钟(按 audio/video 两类,不分分辨率档) |
| 免费额度 | 每月 10,000 分钟(促销) | 按类型配置,默认同上 |
| 账单粒度 | 天/月 | hour / day / month 查询 |
| 结算 | 预付费套餐 + 后付费 | 你的部署决定;我们只提供用量与金额计算 |
成本控制的四个开关
- 分辨率:视频按分钟计费,降分辨率不降分钟数,但能减少带宽与转码成本;
- 录制模式:
composite(合流)比individual(单流)便宜——一条任务录所有人; - 推流目标数量:每个 converter 一个 egress 任务,多目标 = 多份推流成本;
- 空闲回收:
idleTimeout配小一点,避免「人走了任务还在跑」。
端到端示例
调用 GET /v1/analytics/usage 查询用量,GET /v1/analytics/calls 查询通话列表与通话详情;响应中的金额按本页单价与用量计算。字段定义见 水晶球。