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:
| RealtimeKit | Realtime SFU | TURN 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şenleri | Oturumlar, medya track’leri, DataChannel’lar | TURN tahsisi, relay taşıma |
| Senin yöneteceğin | Ürün entegrasyonu, marka, uygulamaya özgü davranış | Kimlik doğrulama, yetkilendirme, signaling, presence, track keşfi | Peer bağlantıları, signaling, medya yönlendirme, uygulama durumu |
| Fiyat | Dakika bazlı | 0,05 USD/GB egress | SFU ile ücretsiz, tek başına 0,05 USD/GB |
| Ücretsiz katman | Yok | Ayda ilk 1.000 GB | Ayda 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
| Kavram | Tanım | Fatura |
|---|---|---|
| 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 |
| Participant | Add participant API’siyle oluşturuluyor, bir authToken dönüyor | Katı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
| Platform | Core SDK | UI 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 |
| Android | com.cloudflare.realtimekit:core | com.cloudflare.realtimekit:ui-android |
| iOS | RealtimeKit | RealtimeKitUI |
| 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
| Mod | Model | İşlenme | Kullanım |
|---|---|---|---|
| Gerçek zamanlı | Deepgram Nova-3 | Toplantı sırasında | Canlı altyazı |
| Sonradan | Whisper Large v3 Turbo | Toplantı bitince | Transkript 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).
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)
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
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.
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.
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.
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.
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.
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ç.
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
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.
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.”
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.”
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.”
Ölçüm tablosu
| Ölçüt | Değ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.
| Kalem | Fiyat |
|---|---|
| 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”:
| Mod | Model | Neuron / ses-dakikası |
|---|---|---|
| Sonradan | @cf/openai/whisper-large-v3-turbo | 46,63 |
| Gerçek zamanlı | @cf/deepgram/nova-3 | 836,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/pricingtablosunda 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
Voicemeeting 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
authTokendö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_secondsverilmezse “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: truein 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çinrtk-assets.*vertk-uploads.*). Medya: STUNstun.cloudflare.com3478/udp (alt 53/udp); TURNturn.cloudflare.com3478/udp ve 3478/tcp (alt 53/udp, 80/tcp), 5349/tcp (alt 443/tcp). İki uyarı: “Do not rely only on53/udp, because Internet service providers and browsers can block this port” ve wildcard kullanırsan “you must still allowr2.cloudflarestorage.com,stun.cloudflare.com, andturn.cloudflare.comseparately, 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.comare 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'tecanLivestreamizni 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ümantasyonundarealtimekitsıfır eşleşme veriyor (pozitif kontrol:HLS78 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 CallsveWebRTCsıfır eşleşme veriyor (pozitif kontrol: aynı dosyadaStream8,Cloudflare Images2 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.