İçeriğe atla
Cloudflare Wiki

    ↑↓ gez↵ açEsc kapatCloudflare Wiki

    RealtimeKit

    Toplantı katmanı: SDK'lar, katılımcı yönetimi, preset izinleri, hazır arayüz bileşenleri, kayıt ve transkripsiyon. Realtime SFU'nun üstünde çalışıyor ve ücretsiz katmanı yok.

    • DurumGenel kullanımda
    • FiyatKatılımcı-dakika; kayıt ve dışa yayın ayrı kalem
    • Doğrulama

    RealtimeKit nedir?

    “Cloudflare RealtimeKit lets you build your own audio and video experiences inside web and mobile apps. It routes media on Cloudflare’s global WebRTC infrastructure, so you can deliver low-latency experiences to a global audience without scaling media servers or choosing regions.” “Your application controls who can join and what they can do. RealtimeKit provides the SDKs and infrastructure that connect participants inside your web or mobile app.”

    Cloudflare’in saydığı kullanım alanları: grup görüntülü aramalar, sanal sınıflar, webinar ve canlı etkinlikler, sesli odalar ve destek görüşmeleri.

    Mimari tek cümlede: “Your backend creates Meetings and adds Participants through the RealtimeKit REST API, then passes participant auth tokens to the client SDK. RealtimeKit manages session state and routes realtime media between participants.”

    Realtime ailesindeki yeri

    Cloudflare Realtime bir şemsiye ad; altında üç ürün var. Sınırı Cloudflare’in kendi karşılaştırma tablosu çiziyor:

    RealtimeKitRealtime SFUTURN Service
    Ne zaman“You want meeting SDKs, participant management, and pre-built UI components.”“You want to compose WebRTC media and data into a custom application topology.”“You need a relay for peer-to-peer or self-hosted WebRTC connections.”
    SağladığıToplantılar, katılımcılar, preset’ler, sahne yönetimi, arayüz bileşenleriOturumlar, medya track’leri, DataChannel’larTURN tahsisi, relay taşıma
    Senin yöneteceğinÜrün entegrasyonu, marka, uygulamaya özgü davranışKimlik doğrulama, yetkilendirme, signaling, presence, track keşfiPeer bağlantıları, signaling, medya yönlendirme, uygulama durumu
    FiyatDakika bazlı0,05 USD/GB egressSFU ile ücretsiz, tek başına 0,05 USD/GB
    Ücretsiz katmanYokAyda ilk 1.000 GBAyda ilk 1.000 GB

    Ve ilişki açık: “RealtimeKit uses the Cloudflare Realtime SFU for media connections.” Yani TURN/SFU katmanını ayrıca satın almıyorsun — RealtimeKit dakika fiyatına dahil ve fiyat tablosunda GB egress kalemi yok.

    Nasıl çalışır?

    Dört kavram — ve faturanın hangisine bağlı olduğu

    KavramTanımFatura
    App“represents a workspace… Treat each App like an environment-specific container” — çoğu ekip staging ve production için ayrı App açıyor—
    Meeting“a re-usable virtual room… The Meeting itself doesn’t ‘start’ or ‘end’; it just exists.”Yok
    Session“the live instance of a meeting. It is created when the first participant joins and ends shortly after the last participant leaves.”Burada
    ParticipantAdd participant API’siyle oluşturuluyor, bir authToken dönüyorKatılımcı-dakika

    “You are charged on a per-participant basis only for the duration of an active Session, not for an idle Meeting.”

    Bir kısıt: “A meeting can have only one active session at any given time.”

    Preset — izinlerin tek kaynağı

    Preset App seviyesinde tanımlanıyor ve üç şeyi birden belirliyor: katılınan toplantı tipi (Video, Audio, Webinar, Livestream beta), yapılabilecek işler, ve arayüzün görünümü.

    İzin kategorileri: Host Controls, Stage Management, Chat, Polls, Plugins, Waiting Room, Connected Meetings ve Miscellaneous.

    Oturum içi kavramlar

    • Waiting Room — üç mod: kabul edilince katıl, yetkili biri katılınca katıl, bekleme odasına kabul et.
    • Stage — “When a participant is on the stage, they are visible in the grid and they can publish their audio and video… Participants who are off the stage cannot publish media, but they can still fully engage through features like chat, polls, Q&A, and plugins.”
    • Breakout Rooms ve Connected Meetings — toplantılar arası geçiş izinleriyle.

    SDK’lar

    PlatformCore SDKUI Kit
    Web Components (HTML, Vue, Svelte)@cloudflare/realtimekit@cloudflare/realtimekit-ui
    React@cloudflare/realtimekit-react@cloudflare/realtimekit-react-ui
    Angular@cloudflare/realtimekit@cloudflare/realtimekit-angular-ui
    Androidcom.cloudflare.realtimekit:corecom.cloudflare.realtimekit:ui-android
    iOSRealtimeKitRealtimeKitUI
    React Native@cloudflare/realtimekit-react-native@cloudflare/realtimekit-react-native-ui

    Cloudflare’in kendi karşılaştırması: Core SDK ile “Typically 5-6 days”, UI Kit ile “Can build and ship under 2 hours”. Ve seçim tek yönlü değil — “When you use our UI Kit, you also get access to the core SDK with it.”

    React Native için asgari: React Native 0.84+ ve React 19+.

    Kayıt

    “Composite recordings are powered by anonymous virtual bot users who join your meeting, record it, and then upload it to RealtimeKit’s Cloudflare R2 bucket.” “The file is kept on RealtimeKit’s server for seven days before being deleted.”

    İki mod: composite (tek dosya, plugin etkileşimleri dahil) ve track recording (katılımcı başına ayrı WebM). Codec: H.264 ve VP8. max_seconds verilmezse 24 saatte otomatik duruyor. Kendi deponuza aktarım: AWS, Azure, DigitalOcean ve Cloudflare R2.

    AI: transkripsiyon ve özet

    ModModelİşlenmeKullanım
    Gerçek zamanlıDeepgram Nova-3Toplantı sırasındaCanlı altyazı
    SonradanWhisper Large v3 TurboToplantı bitinceTranskript dosyası ve webhook

    “RealtimeKit processes each participant audio stream separately. This helps identify each speaker in the final transcript.”

    Açma: preset’te permissions.transcription_enabled: true. Özet için toplantı oluştururken summarize_on_end: true; kelime sınırı varsayılan 500, aralık 150–1.000.

    Ne zaman kullanılır, ne zaman kullanılmaz

    Uygun olduğu işler

    • Kendi uygulamanın içine gömülü görüntülü görüşme — ayrı bir platforma yönlendirmeden
    • Sanal sınıf, webinar, sesli oda: preset’lerle rol ayrımı ve sahne yönetimi hazır geliyor
    • Hızlı çıkış gereken projeler — UI Kit ile “under 2 hours”
    • Kayıt, canlı altyazı ve toplantı özeti gereken senaryolar
    • WebRTC altyapısını hiç yönetmek istemeyen ekipler

    Uygun olmadığı işler

    • Ücretsiz denemek. Ücretsiz katman yok; ilk dakikadan itibaren faturalanıyorsun.
    • Kendi topolojini kurmak. Yayın/abone mantığını kendin yönetmek istiyorsan doğru katman Realtime SFU.
    • Toplantı zamanlaması beklemek. “RealtimeKit does not include a built-in scheduling system.” Takvimi backend’in tutacak.
    • Katılımcı sayısı kesin bilinmesi gereken projeler. Üst sınır yayımlanmıyor; yalnızca hata 1206 var.
    • Kısıtlı ağlarda plansız kurulum. STUN/TURN açılmadan ICE kurulamıyor — aşağıdaki ikinci demo bunu gösteriyor.
    • Sıkı veri yerleşimi gereksinimi. Uyumluluk tablolarında Realtime satırı hiç yok.

    Somut örnekler

    1. Toplantı oluşturmak

    curl "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/realtime/kit/$APP_ID/meetings" \
      --request POST \
      --header "Authorization: Bearer $CF_API_TOKEN" \
      --header "Content-Type: application/json" \
      --data '{ "title": "Haftalık ekip toplantısı" }'

    2. Katılımcı eklemek ve token almak

    curl ".../meetings/$MEETING_ID/participants" \
      --request POST \
      --header "Authorization: Bearer $CF_API_TOKEN" \
      --header "Content-Type: application/json" \
      --data '{
        "name": "Ayşe",
        "preset_name": "group_call_host",
        "custom_participant_id": "u-10472"
      }'

    3. Toplantıyı kapatmak

    Zamanlama yok, ama kapatma var:

    curl ".../meetings/$MEETING_ID" \
      --request PATCH \
      --header "Authorization: Bearer $CF_API_TOKEN" \
      --header "Content-Type: application/json" \
      --data '{ "status": "INACTIVE" }'

    “This prevents participants from joining the meeting and prevents any new Sessions from starting.”

    4. Sesli oda — dört kat ucuz

    Preset’in Meeting Type’ını Voice yap. Katılımcılar 0,0005 USD/dk üzerinden faturalanır, 0,002 yerine.

    5. Kaydı kendi R2 bucket’ına almak

    Varsayılan yol RealtimeKit’in kendi bucket’ı ve 7 gün sonra siliniyor. Kalıcı saklama için custom cloud storage yapılandır — Cloudflare R2 destekleniyor.

    Demo 1: Toplantı kur, sonra gerçek hataları üret

    Ön koşullar: Ubuntu sunucu, Node.js, jq, ve Realtime / Realtime Admin izinli bir API token’ı. Panelden Realtime → Kit altında bir App oluştur ve APP_ID’yi al.

    export CF_ACCOUNT_ID="<hesap-id>"
    export CF_API_TOKEN="<Realtime Admin yetkili token>"
    export APP_ID="<app-id>"
    export API="https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/realtime/kit/$APP_ID"

    Adım 1 — Preset’leri listele

    curl -s -H "Authorization: Bearer $CF_API_TOKEN" "$API/presets" | jq '.result'

    App oluşturulurken varsayılan preset’ler otomatik yaratılıyor (group_call_host, webinar_participant gibi).

    Terminal — jq çıktısında preset adları ve id'leri; panelde Realtime → Kit ekranı da yan yana konabilir

    Adım 2 — Toplantı oluştur

    curl -s "$API/meetings" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" \
      --data '{"title":"Ubuntu on-prem demo"}' | tee /tmp/m.json | jq '.result | {id, title, status}'
    
    export MEETING_ID=$(jq -r '.result.id' /tmp/m.json)
    Terminal — meeting id, başlık ve status alanları görünür durumda

    Adım 3 — İki katılımcı ekle

    for R in host attendee; do
      curl -s "$API/meetings/$MEETING_ID/participants" --request POST \
        -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" \
        --data "{\"name\":\"$R\",\"preset_name\":\"<preset-adı>\",\"custom_participant_id\":\"u-$R-001\"}" \
        | jq "{name:.result.name, token:(.result.token[0:40]+\"…\")}"
    done
    Terminal — iki katılımcının adı ve kısaltılmış token'ı; token'ların tamamı ekranda olmasın

    Adım 4 — Web UI Kit’i çalıştır

    git clone https://github.com/cloudflare/realtimekit-web-examples.git
    cd realtimekit-web-examples/html-examples/examples/default-meeting-ui
    npm i && npm run dev -- --host 0.0.0.0

    Token’ları uygulamaya verip iki tarayıcı sekmesinden katıl.

    İki tarayıcı penceresi yan yana — katılımcı ızgarası, medya kontrolleri ve sohbet paneli görünür durumda

    Adım 5 — Gerçek hata: geçersiz token (0004)

    Token’ın son karakterini boz ve tekrar katılmayı dene. Tarayıcı konsolu açık kalsın.

    Tarayıcı geliştirici konsolu — RealtimeKit'in 0001/0004 hata kodu ve 'Invalid auth token' mesajı okunacak şekilde

    Resmî açıklama: “Ensure that the passed auth token is a valid JWT auth token that is not expired yet.”

    Adım 6 — Gerçek hata: izin reddi (0101)

    Preset Editor’da yeni bir preset oluştur ve Chat izinlerini kapat. Attendee’yi o preset’le ekle, sonra mesaj göndermeyi dene.

    İki bölmeli görüntü — solda konsolda 0101 Permission denied, sağda Preset Editor ekranında kapalı Chat izni; sebep ve sonuç yan yana

    Adım 7 — Gerçek hata: toplantıyı kapat

    curl -s "$API/meetings/$MEETING_ID" --request PATCH \
      -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" \
      --data '{"status":"INACTIVE"}' | jq '.result.status'

    Yeni bir sekmeden katılmayı dene — engellenmeli.

    Terminal — status INACTIVE yanıtı, yanında tarayıcıda katılım denemesinin hata vermesi

    Adım 8 — Faturayı gör

    Panel: Realtime → Kit → Sessions. Oturum süresi ve katılımcı-dakika burada.

    Hesap: 2 katılımcı × 10 dakika × 0,002 USD = 0,04 USD.

    Panel ekran görüntüsü — Sessions listesinde bu demonun oturumu, süresi ve katılımcı sayısı

    Demo 2: Ağ engelini üret, ICE hatasını yakala, kaydı doğrula

    Bu demo kurumsal ve on-prem ağlarda RealtimeKit’in neden çalışmadığını kanıtlıyor, sonra düzeltiyor. Ağ izin listesi sayfasının pratiğe dökülmüş hâli.

    Adım 1 — Temiz ağda ölçüm al

    Ubuntu masaüstünde tarayıcıdan https://test.realtime.cloudflare.com/ aç.

    Tarayıcı — kamera, mikrofon ve ağ kontrollerinin hepsi başarılı; Cloudflare Realtime uç noktalarına bağlantı yeşil

    Adım 2 — Bağlantıyı komut satırından doğrula

    for H in api.realtime.cloudflare.com socket-edge.realtime.cloudflare.com \
             stun.cloudflare.com turn.cloudflare.com r2.cloudflarestorage.com; do
      printf "%-42s " "$H"; getent hosts "$H" | head -1
    done
    
    nc -vz -u turn.cloudflare.com 3478 2>&1 | tail -1
    nc -vz    turn.cloudflare.com 5349 2>&1 | tail -1
    Terminal — beş alan adının DNS çözümlemesi ve iki nc komutunun başarılı sonucu

    Adım 3 — Gerçek hata: TURN ve STUN’u kes

    sudo iptables -A OUTPUT -p udp -d turn.cloudflare.com --dport 3478 -j DROP
    sudo iptables -A OUTPUT -p udp -d stun.cloudflare.com --dport 3478 -j DROP
    sudo iptables -A OUTPUT -p tcp -d turn.cloudflare.com --dport 3478 -j DROP
    sudo iptables -A OUTPUT -p tcp -d turn.cloudflare.com --dport 5349 -j DROP
    sudo iptables -A OUTPUT -p udp -d turn.cloudflare.com --dport 53   -j DROP
    sudo iptables -A OUTPUT -p tcp -d turn.cloudflare.com --dport 80   -j DROP
    sudo iptables -A OUTPUT -p tcp -d turn.cloudflare.com --dport 443  -j DROP
    sudo iptables -L OUTPUT -n --line-numbers | head -20

    Testi tekrarla ve toplantıya katılmayı dene.

    İki bölmeli görüntü — solda iptables kural listesi, sağda ön çağrı testinde ağ adımının kırmızı olması
    İki bölmeli tarayıcı — solda konsolda 0014 Media connection failed, sağda chrome://webrtc-internals ekranında iceConnectionState failed ve relay tipinde aday bulunmaması

    Adım 4 — Yalnızca alternatif portu açarak düzelt

    sudo iptables -D OUTPUT -p tcp -d turn.cloudflare.com --dport 443 -j DROP

    Testi tekrarla — TURN over TLS artık 443/tcp üzerinden bağlanmalı.

    Bu, dokümandaki iki cümlenin canlı kanıtı: alternatif portların açılması önerisi ve “Do not rely only on 53/udp.”

    İki bölmeli tarayıcı — solda ön çağrı testi başarılı, sağda webrtc-internals'ta relay tipinde ICE adayı
    sudo iptables -F OUTPUT

    Adım 5 — Kaydı başlat ve bot kullanıcıyı gör

    curl -s "$API/recordings" --request POST \
      -H "Authorization: Bearer $CF_API_TOKEN" -H "Content-Type: application/json" \
      --data "{\"meeting_id\":\"$MEETING_ID\",\"max_seconds\":300}" \
      | tee /tmp/rec.json | jq '.result | {id, status}'
    
    export REC_ID=$(jq -r '.result.id' /tmp/rec.json)

    Toplantı ekranında kayıt yapan bot kullanıcının ızgaraya katıldığını göreceksin — çünkü “Composite recordings are powered by anonymous virtual bot users who join your meeting.”

    Tarayıcı — katılımcı ızgarasında kayıt botunun görünmesi, yanında terminalde kayıt id'si ve durumu

    Adım 6 — Kaydı indir ve codec’ini doğrula

    watch -n 10 "curl -s -H 'Authorization: Bearer $CF_API_TOKEN' \
      $API/recordings/$REC_ID | jq '.result | {status, output_file_name}'"
    DL=$(curl -s -H "Authorization: Bearer $CF_API_TOKEN" "$API/recordings/$REC_ID" \
      | jq -r '.result.download_url')
    
    curl -sL -o /tmp/kayit.mp4 -w 'bayt=%{size_download}\n' "$DL"
    
    ffprobe -v error -show_entries stream=codec_name,width,height,r_frame_rate \
      -of default=nw=1 /tmp/kayit.mp4

    codec_name=h264 görmelisin — “we currently support the H.264 and VP8 codecs.”

    Terminal — durum geçişleri (INVOKED → UPLOADED), indirilen dosya boyutu ve ffprobe çıktısında codec_name=h264

    Ölçüm tablosu

    ÖlçütDeğer
    Temiz ağda ön çağrı testi sonucu
    TURN/STUN kesikken ICE durumu
    Alınan hata kodu
    Yalnızca 443/tcp açıkken sonuç
    Kullanılan ICE aday tipi (host / srflx / relay)
    Kaydın hazır olma süresi
    İndirilen dosya boyutu ve codec’i
    İki katılımcı × süre × 0,002 USD

    Fiyatlandırma

    Rakamlar 1 Eylül 2026’da RealtimeKit pricing sayfasından alındı; workers.cloudflare.com/pricing tablosu altı kalemde de birebir aynı — çelişki yok.

    KalemFiyat
    Audio/Video katılımcı0,002 USD / dakika
    Ses-yalnız katılımcı0,0005 USD / dakika
    Export (kayıt, RTMP veya HLS yayını)0,010 USD / dakika
    Export (ses-yalnız)0,003 USD / dakika
    Export (Raw RTP → R2)0,0005 USD / dakika
    Gerçek zamanlı transkripsiyon“Standard model pricing via Workers AI”

    Ücretsiz katman yok. Karşılaştırma için Realtime SFU ve TURN’de ayda ilk 1.000 GB ücretsiz.

    Fatura birimi katılımcı-dakika ve yalnızca aktif oturum boyunca işliyor. Boşta duran bir toplantı ücret üretmiyor.

    Transkripsiyon maliyeti — ayrı hesap

    Workers AI Neuron’u olarak faturalanıyor ve “scales by participant audio minutes, not meeting duration”:

    ModModelNeuron / ses-dakikası
    Sonradan@cf/openai/whisper-large-v3-turbo46,63
    Gerçek zamanlı@cf/deepgram/nova-3836,36

    Gerçek zamanlı yaklaşık 18 kat pahalı. Workers Free planda günlük 10.000 Neuron ücretsiz; sonrası 0,011 USD / 1.000 Neuron.

    Lisanslama ve hukuki çerçeve

    RealtimeKit tescilli bir hizmettir ve Cloudflare Hizmet Şartlarına tabidir. Kullanım için Realtime / Realtime Admin izinli bir API token’ı gerekiyor.

    Limitler büyük ölçüde yayımlanmamış. /realtime/realtimekit/limits/ sayfası 404 dönüyor (1 Eylül 2026). Bulunabilen tek sinyaller: hata kodu 1206 (“Max participants limit reached… upgrade your plan for higher limits”) ve sahne için benzer bir hata — ikisinde de sayı yok. Belgelenen sayısal değerler yalnızca şunlar: kayıt max_seconds varsayılanı 86.400 sn, kayıt saklama 7 gün, transkript ve özet saklama 7 gün, ızgarada maxActiveParticipantsCount = preset ızgara boyutu − 1.

    Veri yerleşimi — belgelenmemiş. Cloudflare’in Data Localization uyumluluk tablolarında Realtime veya RealtimeKit için satır yok: 247 KB’lık doküman gövdesinde Realtime, Cloudflare Calls ve WebRTC sıfır eşleşme veriyor (pozitif kontrol: aynı dosyada Stream 8, Cloudflare Images 2). Bu “desteklenmiyor” değil, “belgelenmemiş” demek.

    Ürün tanımının kendisi bölge seçmemek üzerine kurulu: “deliver low-latency experiences to a global audience without scaling media servers or choosing regions.” Bölgesel işleme gereksinimin varsa bu ürün o gereksinimi karşılamak için tasarlanmamış.

    Sık yapılan hatalar

    Preset’in Meeting Type’ını yanlış seçmek

    Fatura kalemini kullanıcının davranışı değil preset belirliyor. Sesli oda kurup Video preset’i kullanmak maliyeti dörde katlıyor.

    Auth token’ı tekrar kullanmak

    “Please do not re-use auth tokens for participants.” Katılımcıyı bir kez oluştur, token’ı tazele.

    Toplantının kendiliğinden biteceğini sanmak

    Toplantının başlangıcı ve bitişi yok. Kapatmak için status: "INACTIVE" gerekiyor, ve takvimi senin backend’in tutuyor.

    custom_participant_id’ye e-posta koymak

    Cloudflare açıkça uyarıyor; kalıcı bir iç kimlik kullan.

    Ağ izin listesinde yalnızca 53/udp açmak

    “Do not rely only on 53/udp, because Internet service providers and browsers can block this port.” Birincil portları aç, alternatifleri yedek olarak bırak.

    Wildcard’ın her şeyi kapsadığını sanmak

    *.realtime.cloudflare.com yazsan bile r2.cloudflarestorage.com, stun.cloudflare.com ve turn.cloudflare.com ayrıca açılmalı — “the wildcard does not cover them.”

    Kaydın kalıcı olduğunu varsaymak

    Yedi gün sonra siliniyor. Kalıcı saklama için kendi bulut deponu yapılandır.

    Watermark URL’ini kontrol etmemek

    CORS başlığı yoksa, URL doğrudan görsele işaret etmiyorsa veya yönlendirme yapıyorsa logo yüklenmiyor — kayıt tamamlandıktan sonra fark ediliyor.

    Kamera kalitesini gereksiz yükseltmek

    “Higher camera quality increases bandwidth usage and may impact meeting performance on lower-end devices.” Ekran paylaşımında varsayılan 5 FPS çoğu senaryo için yeterli.

    Cloudflare’in demo uygulamasını üretime gömmek

    “may be updated at any time without prior notice.” UI Kit’i kendi sitene kur.

    Sıkça sorulan sorular

    RealtimeKit ile Realtime SFU arasındaki fark ne?
    RealtimeKit toplantı katmanı, SFU taşıma katmanı. Cloudflare'in kendi karşılaştırma tablosundan birebir — RealtimeKit: “Meetings, participants, presets, stage management, and UI components” sağlıyor, senin uygulamandan beklediği “Product integration, branding, and application-specific behavior”. Realtime SFU: “Sessions, media tracks, DataChannels, and programmable publish and subscribe operations” sağlıyor, senden beklediği “Authentication, authorization, signaling, presence, state, and track discovery”. Ve ilişki net: “RealtimeKit uses the Cloudflare Realtime SFU for media connections.” Yani SFU'yu ayrıca satın almıyorsun, RealtimeKit dakika fiyatına dahil. Fiyat modelleri de farklı: RealtimeKit dakika bazlı, SFU/TURN GB egress bazlı.
    Ücretsiz katmanı var mı?
    Yok. İki resmî kaynak da aynı şeyi söylüyor: Realtime karşılaştırma tablosunda RealtimeKit için Free tier “None”, workers.cloudflare.com/pricing tablosunda altı fiyat kaleminin hepsinde Free sütunu “Not available —”. Karşılaştırma için: Realtime SFU ve TURN'de “First 1,000 GB free each month” var.
    Nasıl faturalanıyorum?
    Katılımcı-dakika üzerinden ve yalnızca aktif oturum boyunca. Birebir: “You are charged on a per-participant basis only for the duration of an active Session, not for an idle Meeting.” Kalemler: A/V katılımcı 0,002 USD/dk, ses-yalnız katılımcı 0,0005 USD/dk, kayıt veya RTMP/HLS dışa yayın 0,010 USD/dk (ses-yalnız 0,003), R2'ye Raw RTP 0,0005 USD/dk. Gerçek zamanlı transkripsiyon ayrıca Workers AI fiyatıyla.
    Bir katılımcının “ses-yalnız” sayılmasını ne belirliyor?
    Preset'in Meeting Type'ı. Birebir: “When a participant joins with a Voice meeting type Preset, they are considered an Audio-Only Participant for billing.” Yani fatura kalemi kullanıcının kamerasını açıp açmamasına değil, hangi preset'le katıldığına bağlı. Fiyat farkı dört kat — 0,002 yerine 0,0005.
    Toplantı başına maksimum katılımcı kaç?
    Cloudflare bu sayıyı yayımlamıyor. Dokümantasyonda yalnızca hata kodu 1206 var: “Max participants limit reached… The meeting has reached its maximum participant capacity… Wait for participants to leave or upgrade your plan for higher limits.” Sayısal bir üst sınır belirtilmiyor ve /realtime/realtimekit/limits/ sayfası 404 dönüyor (1 Eylül 2026'da doğrulandı). Bulunabilen tek sayı ızgara tarafında: Web Core SDK sürüm notunda “up to 100 participants per page, increased from 24 per page”. Tahmin yürütme — sözleşmende teyit ettir.
    Toplantı zamanlaması var mı?
    Yok. Birebir: “RealtimeKit does not include a built-in scheduling system… RealtimeKit meetings do not have start or end time, so your backend must store the schedule and enforce when users are allowed to join.” Bir toplantıyı kapatmak istiyorsan: PATCH .../meetings/{id} ile {"status":"INACTIVE"} — “This prevents participants from joining the meeting and prevents any new Sessions from starting.”
    Toplantı, oturum ve katılımcı arasındaki fark ne?
    Faturayı anlamak için bu üçünü ayırmak şart. Meeting: “a re-usable virtual room that you can join anytime… The Meeting itself doesn't 'start' or 'end'; it just exists.” Session: “the live instance of a meeting. It is created when the first participant joins and ends shortly after the last participant leaves.” Ve önemli bir kısıt: “A meeting can have only one active session at any given time.” Participant: Add participant API'siyle oluşturuluyor ve bir authToken dönüyor. Fatura yalnızca Session süresince işliyor.
    Aynı kullanıcı iki cihazdan katılabilir mi?
    Evet. Birebir: “A single participant can be represented by multiple peers if the user joins the same meeting from different devices or tabs. Each connection becomes a separate peer, but they all map back to the same participant.”
    Her oturum için yeni katılımcı oluşturmam gerekiyor mu?
    Hayır — ama token'ı tekrar kullanma. Birebir: “You typically create a participant once for a given user and meeting, and then reuse that participant across sessions… You may need to refresh the participant's authentication token over time, but you do not need to recreate the participant.” Ve ayrı bir uyarı: “Please do not re-use auth tokens for participants.” Yani katılımcı kalıcı, token değil.
    custom_participant_id olarak ne kullanmalıyım?
    Birebir: “Use a stable internal identifier from your own system, such as a numeric user id or UUID. Do not use personal data such as email addresses, phone numbers, or other personally identifiable information.” Bu, KVKK bakış açısıyla da doğru olan tercih — kişisel veriyi üçüncü taraf sisteme taşımamış oluyorsun.
    Kayıtlar nerede saklanıyor, ne kadar süre?
    Birebir: “Composite recordings are powered by anonymous virtual bot users who join your meeting, record it, and then upload it to RealtimeKit's Cloudflare R2 bucket.” Ve saklama: “The file is kept on RealtimeKit's server for seven days before being deleted.” Kendi deponuza aktarım destekleniyor — AWS, Azure, DigitalOcean ve Cloudflare R2. Kayıt max_seconds verilmezse “defaults to 24 hours (86400 seconds)”. Codec: “we currently support the H.264 and VP8 codecs.”
    Transkripsiyon nasıl faturalanıyor?
    RealtimeKit dakika fiyatının dışında, Workers AI Neuron'u olarak. Birebir: “Workers AI usage is billed to your Cloudflare account using audio model pricing, which scales by participant audio minutes, not meeting duration.” Rakamlar: gerçek zamanlı (@cf/deepgram/nova-3) 836,36 Neuron / ses-dakikası; sonradan (@cf/openai/whisper-large-v3-turbo) 46,63 Neuron / ses-dakikası — yani gerçek zamanlı yaklaşık 18 kat pahalı. Workers Free planda günlük 10.000 Neuron ücretsiz, sonrası 0,011 USD / 1.000 Neuron. Transkript ve özetler 7 gün saklanıyor.
    Kimin sesinin yazıya döküleceğini kontrol edebilir miyim?
    Evet, preset düzeyinde. Birebir: “You can turn on real-time transcription for participants by setting permissions.transcription_enabled: true in the participant's preset. This lets you decide which participant audio is transcribed. For example, you can transcribe speaker audio without transcribing audience audio.” Cloudflare her katılımcı akışını ayrı işliyor: “RealtimeKit processes each participant audio stream separately. This helps identify each speaker in the final transcript.”
    Transkripsiyon verim kendi depomda kalır mı?
    Hayır — ve bu açıkça uyarılmış. Birebir: “Post-meeting transcription uses RealtimeKit-managed storage for intermediate participant audio tracks and transcript outputs. If you configured external storage for regular recordings, that storage configuration is not used for transcription processing. For workloads with stricter storage, retention, or processing requirements, use RealtimeKit recording with custom cloud storage instead of managed transcription.” Yani hassas içerikte yönetilen transkripsiyon yerine kendi deponla kayıt kullanman öneriliyor.
    Kurumsal güvenlik duvarımın arkasında çalışmıyor.
    Açılması gereken liste belgeli. Servis alan adları: api.realtime.cloudflare.com, api-silos.realtime.cloudflare.com, da-collector.realtime.cloudflare.com, location.realtime.cloudflare.com, socket-edge.realtime.cloudflare.com, r2.cloudflarestorage.com (+ Web UI Kit için rtk-assets.* ve rtk-uploads.*). Medya: STUN stun.cloudflare.com 3478/udp (alt 53/udp); TURN turn.cloudflare.com 3478/udp ve 3478/tcp (alt 53/udp, 80/tcp), 5349/tcp (alt 443/tcp). İki uyarı: “Do not rely only on 53/udp, because Internet service providers and browsers can block this port” ve wildcard kullanırsan “you must still allow r2.cloudflarestorage.com, stun.cloudflare.com, and turn.cloudflare.com separately, because the wildcard does not cover them.” Test aracı: test.realtime.cloudflare.com
    “Media connection failed” (0014) hatası alıyorum.
    ICE kurulamıyor. Birebir: “ICE (Interactive Connectivity Establishment) connection failed. Make sure your network allows WebRTC connections and turn.cloudflare.com & stun.cloudflare.com are accessible.” Aşağıdaki ikinci demo bu hatayı bilerek üretip düzeltiyor — kurumsal ağda sorunu teşhis etmenin en hızlı yolu.
    UI Kit mi Core SDK mı?
    Cloudflare UI Kit'i öneriyor: “We recommend using our UI Kits for most use cases.” Süre karşılaştırması birebir: Core SDK “Longer (build UI from scratch). Typically 5-6 days.”, UI Kit “Can build and ship under 2 hours.” Ve seçim tek yönlü değil: “When you use our UI Kit, you also get access to the core SDK with it.”
    Cloudflare'in demo uygulamasını kendi siteme iframe ile gömebilir miyim?
    Hayır. Birebir: “We strongly recommend against embedding the Cloudflare hosted demo app or examples as an iframe in your website, even if you pass authentication tokens via URL parameters… The demo app and example applications may be updated at any time without prior notice.” Doğru yol: UI Kit'i kendi sitene kurmak veya realtimekit-web-examples'ı kendi alan adına deploy etmek.
    Kayıttaki watermark bozuk çıkıyor.
    Üç resmî neden var: (1) CORS başlığı yok — “The image URL must return proper CORS headers (for example, Access-Control-Allow-Origin: *)”; (2) URL doğrudan görsele işaret etmiyor; (3) URL yönlendirme yapıyor — “The recorder fetches the URL as-is, so redirects may cause the image to fail to load.”
    Kamera kalitesini ve kare hızını yükseltmeli miyim?
    Cloudflare tersini öneriyor. Birebir: “Higher camera quality increases bandwidth usage and may impact meeting performance on lower-end devices” ve “Set the video frame rate to a lower value (for example, ≤ 30) in group calls. The current default is 24/30 FPS based on the simulcast layer.” Ekran paylaşımı için: “In most use cases, 5 FPS (default) is sufficient for screen share.” Izgara boyutu da sınırlıyor: maxActiveParticipantsCount = preset ızgara boyutu − 1.
    RealtimeKit toplantısını Cloudflare Stream Live'a yayınlayabilir miyim?
    Core SDK'da meeting.livestream.start() / stop() ve preset'te canLivestream izni var; fatura tarafında bu “Export (recording, RTMP or HLS streaming)” kalemi altında 0,010 USD/dk olarak işliyor. Ama RealtimeKit çıktısının doğrudan bir Cloudflare Stream live input'una bağlandığını söyleyen resmî bir doküman bulunamadı — Stream dokümantasyonunda realtimekit sıfır eşleşme veriyor (pozitif kontrol: HLS 78 eşleşme). Bu bağlantıyı kesin olarak yazmıyoruz.
    RealtimeKit nereden geldi?
    9 Nisan 2025 tarihli duyurudan birebir: “The amazing team behind Dyte, a leading company in the real-time ecosystem, joined Cloudflare to accelerate the development of RealtimeKit.” Cloudflare “acquire” veya “acquisition” kelimesini kullanmıyor, bedel ve kapanış tarihi vermiyor, ayrı bir satın alma duyurusu da yok. Bu yüzden “Cloudflare Dyte'ı satın aldı” yazmıyoruz. Kalıntı kanıt: iOS SDK bağlantıları hâlâ github.com/dyte-in/RealtimeKitUI. Ayrıca RealtimeKit için GA duyurusu bulunamadı — 2025-04-09 postu “currently in a closed beta” diyordu, fiyat bugün yayımlanmış durumda ama geçişin kendisi duyurulmamış.
    Hangi API izinleri gerekiyor?
    Birebir: “When configuring permissions, ensure that Realtime / Realtime Admin permissions are selected.” API tabanı: https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/realtime/kit/{APP_ID}/…
    Türkiye'de veri yerelleştirme yapabilir miyim?
    Belgelenmemiş. Cloudflare'in Data Localization uyumluluk tablolarında Realtime veya RealtimeKit için satır yok — 247 KB'lık doküman gövdesinde Realtime, Cloudflare Calls ve WebRTC sıfır eşleşme veriyor (pozitif kontrol: aynı dosyada Stream 8, Cloudflare Images 2 eşleşme). Bu “desteklenmiyor” değil, “belgelenmemiş” demek. Ayrıca ürün tanımının kendisi bölge seçmemek üzerine kurulu: “deliver low-latency experiences to a global audience without scaling media servers or choosing regions.” Kayıtlar RealtimeKit'in R2 bucket'ında tutuluyor; hassas içerik için kendi bulut depona aktarma seçeneğini kullan.

    İlgili servisler

    • Realtime (TURN / SFU)WebRTC için NAT traversal (TURN) ve medya yönlendirme (SFU). Eski adı Cloudflare Calls.
    • StreamVideoyu yükler, kodlar ve adaptive bitrate ile oynatır; canlı yayın dahil.
    • Workers AIAçık kaynak modelleri Cloudflare’in GPU’larında, API çağrısıyla çalıştırır.
    • R2S3 uyumlu object storage — çıkış (egress) trafiği ücretsiz.
    • ImagesGörselleri saklar, resize eder, WebP/AVIF’e çevirir ve CDN’den sunar.
    • WorkersJavaScript/TypeScript/Python kodunu Cloudflare’in 330+ şehirdeki sunucularında, sunucu yönetmeden çalıştırır.

    Bu sayfadaki fiyat ve özellik bilgileri 1 Eylül 2026 tarihinde Cloudflare’in resmî kaynaklarından doğrulanmıştır. Cloudflare fiyatlandırmasını önceden haber vermeden değiştirebilir; bağlayıcı bilgi içinresmî sayfaya bakın.

    Hata bildir

    Yanlış bir rakam, eskimiş bir bilgi veya bozuk bir bağlantı mı buldun? Bildir, kaynağıyla birlikte kontrol edelim.