sell媒體
graphic_eq

Cloudflare Realtime

打造能擴展到上千人的視訊通話與即時語音——繁重的工作交給 Cloudflare 的全球網路。

$0.05/每 GB SFU 流出量
1,000GB每月免費 SFU 流量
Free搭配 SFU 的 TURN
100s全球城市數
lightbulb

Cloudflare Realtime 是什麼?

Cloudflare Realtime(前身叫 Cloudflare Calls)是用來打造即時音訊/影像應用的基礎設施——視訊通話、語音聊天、一起看影片等等——背後用的是 WebRTC,也就是瀏覽器用來傳即時影音的技術。

WebRTC(Web Real-Time Communication,網頁即時通訊)讓瀏覽器之間能以極低延遲互傳音訊與影像。難的是「很多人同時連線」這件事——而這正是 Realtime 用它的 SFU 來解決的。

hub

把它想成一個總機交換台

與其讓每個人直接打給每個人(人一多就把裝置操爆),不如每人只把自己的串流送一次到 Cloudflare 的交換台,再由它轉發給其他所有人。送一次、多人收。

help

為什麼要用它?

在單純的點對點(mesh,網狀)通話裡,每個人都要把自己的影像各複製一份送給其他所有人。5 個人就已經是 20 條串流——很快就把手機和筆電壓垮。SFU 透過「集中轉發」幫大家解決這個問題。

groups

撐得起大房間

每個用戶端只上傳一次,由 SFU 負責分送。房間人數可遠遠超過 mesh 的極限。

speed

低延遲

媒體由離每位使用者最近的 Cloudflare 資料中心轉發,讓對話保持即時。

vpn_lock

穿透防火牆

內建的 TURN 服務會在嚴格網路擋掉直連時,幫忙中繼媒體。

tune

彈性掌控

它是不預設立場的基礎設施——上層的介面與邏輯都由你自由打造。

target

什麼時候該用?

videocam

視訊會議

多人互看互聽的群組通話與會議。

podcasts

即時語音房

隨進隨聊的語音聊天、談話節目,或多人收聽的社群語音。

sports_esports

互動直播

遊戲大廳、一起看影片,或觀眾能上麥互動的活動。

support_agent

即時客服與銷售

一對一或小組視訊,用於客服、家教或遠距醫療。

rocket_launch

怎麼開始用?

Realtime 有三層:RealtimeKit(內建介面的現成 SDK)、SFU(低階 WebRTC 伺服器)、TURN(中繼服務)。下面直接用 SFU 的 HTTPS API:先建立 session,再推送一條本地軌道(track)。請先在控制台建立一個 Realtime app,取得 App ID 與 App Secret。

  1. 設定 app 憑證

    App ID 用來辨識你的 app;App Secret 是它的密碼。Secret 要放在你的伺服器,千萬別放進瀏覽器。

    bash
    export APP_ID="your-app-id"
    export APP_SECRET="your-app-secret"
  2. 建立一個 session

    一個 session 就是某位使用者與 Cloudflare 之間的一條 WebRTC 連線。回應會給你一個 sessionId,下一步會用到。

    bash
    curl -X POST \
      https://rtc.live.cloudflare.com/v1/apps/$APP_ID/sessions/new \
      -H "Authorization: Bearer $APP_SECRET"
    
    # Response:
    # { "sessionId": "<SESSION_ID>" }
  3. 推送本地軌道

    一條 track 就是一路媒體串流(音訊或影像)。瀏覽器會產生一個 WebRTC「offer」(一段 SDP),描述它想送什麼;你把它轉送到這裡。location 設成 local,表示你正把媒體往上送到 Cloudflare。

    bash
    curl -X POST \
      https://rtc.live.cloudflare.com/v1/apps/$APP_ID/sessions/$SESSION_ID/tracks/new \
      -H "Authorization: Bearer $APP_SECRET" \
      -d '{
        "sessionDescription": { "type": "offer", "sdp": "<LOCAL_OFFER_SDP>" },
        "tracks": [
          { "location": "local", "mid": "0", "trackName": "mic" },
          { "location": "local", "mid": "1", "trackName": "camera" }
        ]
      }'
  4. 套用 answer

    Cloudflare 會回一段「answer」SDP。瀏覽器套用後就完成交握,媒體開始傳輸。要讓別人觀看,他們各自建立 session,並以 remote 方式拉取這些軌道即可。

    json
    {
      "requiresImmediateRenegotiation": false,
      "sessionDescription": {
        "type": "answer",
        "sdp": "<CLOUDFLARE_ANSWER_SDP>"
      },
      "tracks": [ { "mid": "0", "trackName": "mic" } ]
    }
widgets

想更省事?用 RealtimeKit

如果你不想碰原始的 WebRTC,RealtimeKit 提供帶有現成通話介面元件的 SDK——用少很多的程式碼就能做出會議功能。

school

重點概念

cell_tower

WebRTC

瀏覽器內建的即時音訊、影像與資料標準,延遲極低,不需外掛。

account_tree

SFU(選擇性轉發單元)

Selective Forwarding Unit:一台伺服器,接收每人一份串流後,再轉發給其他人。

swap_calls

Mesh 對比 SFU

Mesh=人人互連(很吃資源)。SFU=大家連到同一個中繼(可擴展)。

link

Session(連線階段)

用戶端與 Cloudflare 之間的一條 WebRTC PeerConnection,內含一條或多條 track。

graphic_eq

Track(軌道)

單一路媒體串流——麥克風一條、鏡頭一條。track 分 local(送出)與 remote(接收)。

router

TURN(中繼伺服器)

當防火牆擋掉直連時,負責中繼媒體的伺服器。搭配 SFU 使用時免費。

tips_and_updates

小提示與計費

savings

計費方式

SFU 以「流出量(egress,從 Cloudflare 送出的媒體)」計費,每 GB 0.05 美元,每月前 1,000 GB 免費。TURN 搭配 SFU 使用時免費;單獨使用同樣是每 GB 0.05 美元、每月 1,000 GB 免費。

shield_lock

App Secret 只放伺服器端

絕對不要把 App Secret 送進瀏覽器。讓你的後端負責建立 session 與 track,再把用戶端真正需要的東西傳過去就好。

  • 想快用 RealtimeKit,想完全掌控用 SFU——兩者互補。
  • 一旦參與者超過約 3~4 人,SFU 的擴展性就遠勝 mesh。
  • 搭配 Durable Objects 或 Workers 來管理房間狀態與信令(signaling)。
  • 它是由 Cloudflare Calls 改名而來,舊文件可能仍用舊名稱。