WebRTC, cihazlar arasında doğrudan, aracı sunucular olmadan ses, video ve veriyi gerçek zamanlı olarak ileten açık bir teknolojidir. WebRTC Project (2026)'ye göre standart, tüm modern tarayıcılar ve mobil platformlar tarafından desteklenmekte olup 500 ms'nin altında gecikme süresi sağlamaktadır. WebRTC, NAT ve güvenlik duvarları arkasında bile bağlantı kurmak için ICE, STUN, TURN protokollerini kullanır.
Önemli Noktalar
WebRTC (Web Real-Time Communication), Google tarafından 2011 yılında başlatılan ve W3C (JavaScript API) ile IETF (protokoller) tarafından standartlaştırılan açık kaynaklı bir projedir. Ana amacı, eklenti veya üçüncü taraf yazılım kurmadan tarayıcılar ve uygulamalar arasında düşük gecikmeli iletişim sağlamaktır.
Videonun bir sunucudan geçtiği geleneksel çözümlerin (RTMP, HLS) aksine, WebRTC eşler arası mimari kullanır: veriler katılımcılar arasında doğrudan iletilir. Bu, HLS'nin 3-10 saniyesine kıyasla 200-500 ms gecikme süresi sağlar — sesli ve görüntülü aramalar, oyun yayını ve uzaktan cerrahi için kritik bir fark.
Google WebRTC Ekibi'ne (2025) göre teknoloji, toplam 5 milyardan fazla kuruluma sahip uygulamalarda kullanılmaktadır: Google Meet, WhatsApp, Discord, Telegram, Zoom (kısmen). Telehealth ve edtech alanındaki girişim startuplarının %85'inden fazlası WebRTC'yi temel gerçek zamanlı taşıma olarak seçmektedir.
Mobil geliştirme, 2013 yılında libjingle_peerconnection'un piyasaya sürülmesiyle tam WebRTC desteği aldı — Android ve iOS için yerel bir uygulama. Bugün her iki platform da H.264 ve VP8 donanım kodlaması, kamera, mikrofon ve cihaz hoparlörleri desteğine sahip kararlı SDK'lara sahiptir.
WebRTC mimarisi üç katmandan oluşur. En üst katman JavaScript API'dir (veya mobil platformlar için yerel API), orta katman taşıma protokolleri, alt katman ise codec'ler ve güvenliktir. Her katman kendi görevini çözer, ancak bağlantı kurulumu için tümü gereklidir.
MediaStream (getUserMedia) — cihazın mikrofonundan ve kamerasından ses ve video yakalar. RTCPeerConnection — P2P bağlantısını yönetir: kodlama, taşıma, bit hızı uyarlaması. RTCDataChannel — aynı kanal üzerinden isteğe bağlı verileri (metin, dosya, ikili mesajlar) iletir.
// WebRTC JavaScript API (tarayıcı örneği)
const pc = new RTCPeerConnection({
iceServers: [
{ urls: "stun:stun.l.google.com:19302" }
]
});
pc.onicecandidate = (event) => {
if (event.candidate) {
sendToPeer(JSON.stringify(event.candidate));
}
};
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);
WebRTC, ses ve video için SRTP (Secure Real-Time Transport Protocol) kullanır — AES-128 şifrelemesine sahip RTP'nin güvenli bir sürümü. Oturum yönetimi, DTLS üzerinden SCTP (Stream Control Transmission Protocol) ile gerçekleşir. Her veri akışı zorunlu olarak şifrelenir: WebRTC'de güvenli olmayan mod yoktur.
WebRTC'nin ana teknik zorluğu, NAT (Network Address Translation) arkasındaki cihazlar arasında P2P bağlantısı kurmaktır. Özel mekanizmalar olmadan, cihazlar birbirine doğrudan ulaşamaz çünkü yerel IP adresleri internetten görünmez.
STUN (Session Traversal Utilities for NAT) — “Benim genel IP ve portum nedir?” sorusuna yanıt veren bir sunucu. İstemci, STUN sunucusuna bir istek gönderir, sunucu genel adresini görür ve istemciye geri döndürür. Google, STUN sunucusunu stun:stun.l.google.com:19302 herkese açık olarak işletmektedir.
// iOS'ta WebRTC — ICE sunucu yapılandırması
import WebRTC
let config = RTCConfiguration()
config.iceServers = [
RTCIceServer(
urlStrings: ["stun:stun.l.google.com:19302"]
),
RTCIceServer(
urlStrings: ["turn:turn.example.com:3478"],
username: "user",
credential: "password"
)
]
let pc = RTCPeerConnection(configuration: config)
TURN (Traversal Using Relays around NAT) — STUN'un yardımcı olmadığı durumlar (simetrik NAT veya kurumsal güvenlik duvarları) için bir röle sunucusu. Bu modda tüm veriler TURN sunucusundan geçer — bu hızı düşürür ve gecikmeyi artırır, ancak vakaların %99'unda bağlantıyı garanti eder.
TURN, tüm medya trafiğini kendi üzerinden geçirdiği için WebRTC altyapısının en pahalı bileşenidir. Coturn Project (2025)'e göre, 8 vCPU ve 16 GB RAM'e sahip tipik bir TURN sunucusu yaklaşık 200 eşzamanlı sesli aramayı veya 40 HD görüntülü aramayı işler.
ICE, mümkün olan tüm adayları (yerel IP, STUN aracılığıyla genel IP, TURN aracılığıyla röle) toplar ve öncelik sırasına göre bağlantı kurmaya çalışır. En az bir aday çifti (yerel-uzak) bağlantı kontrolünü geçtiğinde, bağlantı kurulmuş sayılır.
Mobil geliştirme için Google, libWebRTC'yi sürdürmektedir — Android (AAR) ve iOS (XCFramework) için yerel bir kütüphane. Kütüphane, tüm protokol yığınını, codec'leri (VP8, VP9, H.264, AV1) ve kodlama/kod çözme için donanım hızlandırmasını içerir.
Android SDK, PeerConnectionFactory, PeerConnection, MediaStream sınıflarını sağlar. Uygulama bir fabrika oluşturur, video codec'lerini yapılandırır, VideoCapturer aracılığıyla kamera akışını yakalar ve SDP offer/answer aracılığıyla eş bağlantısı kurar.
// Android WebRTC — başlatma
import org.webrtc.*;
PeerConnectionFactory.Initialize(PeerConnectionFactory.InitializationOptions
.builder(context)
.setFieldTrials("WebRTC-H264-HighProfile/Enabled/")
.createInitializationOptions());
PeerConnectionFactory factory =
PeerConnectionFactory.builder()
.setVideoDecoderFactory(new DefaultVideoDecoderFactory(eglBase))
.setVideoEncoderFactory(new DefaultVideoEncoderFactory(eglBase, true, true))
.createPeerConnectionFactory();
iOS SDK, RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack sarmalayıcıları ile Objective-C API kullanır. Donanım H.264 kodlaması VideoToolbox aracılığıyla kullanılabilir. Video görüntüleme için RTCMTLVideoView (Metal) veya RTCVideoRenderer kullanılır.
// iOS WebRTC — kameradan video yakalama
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)
// Kamera seçimi (ön/arka)
guard let device = RTCCameraVideoCapturer
.captureDevices().first(where: {
$0.position == .front
}) else { return }
// Maksimum FPS ile yakalamayı başlat
capturer.startCapture(
with: device,
format: RTCCameraVideoCapturer
.supportedFormats(for: device).last!,
fps: 30
)
Üretim görüntülü aramaları için mobil uygulamalar genellikle libWebRTC üzerinde SDK sarmalayıcıları kullanır: Twilio Video, Agora, Daily.co. Bu SDK'lar sinyalleşmeyi, oda yönetimini basitleştirir ve katılımcı video ızgarasını göstermek için hazır UI bileşenleri sağlar.
WebRTC, bir sinyalleşme protokolü belirtmez — eşler arasında SDP (Session Description Protocol) mesajlarının değişimi. Geliştirici, sinyalleşme için taşımayı seçer: WebSocket, MQTT, SIP, XMPP veya REST API. Sinyalleşme, bir eşten diğerine offer, answer ve ICE adaylarını iletir.
Süreç, bir offer (başlatıcı medya yeteneklerini tanımlar) oluşturulmasıyla başlar, sinyalleşme yoluyla ikinci eşe iletilir, o da bir answer ile yanıt verir. SDP değişiminden sonra her eş ICE'yi başlatır ve akış şifrelemesi için DTLS-SRTP'yi devreye sokar.
// Android — offer oluşturma ve gönderme
private fun startCall(peerConnection: PeerConnection) {
val constraints = MediaConstraints().apply {
mandatory["OfferToReceiveAudio"] = "true"
mandatory["OfferToReceiveVideo"] = "true"
}
peerConnection.createOffer(object : SdpObserver {
override fun onCreateSuccess(sdp: SessionDescription) {
peerConnection.setLocalDescription(this, sdp)
// Sinyalleşme sunucusuna sdp.description gönder
sendSdpOffer(sdp.description)
}
}, constraints)
}
Mobil uygulamalar için en popüler sinyalleşme WebSocket aracılığıyladır — TCP üzerinden sunucuyla kalıcı bağlantıyı sürdüren çift yönlü bir kanal. Sinyalleşme sunucusu genellikle oda katılımcıları arasında mesajları yönlendiren ayrı bir mikroservistir (Node.js, Golang, Elixir).
ICE ve DTLS-SRTP tamamlandıktan sonra sinyalleşme artık veri iletimine katılmaz — tüm medya trafiği doğrudan P2P (veya bir TURN rölesi aracılığıyla) akar. Sinyalleşme sunucusu, aktif aramaları kesintiye uğratmadan kapatılabilir. Bu, WebRTC'nin merkezi olmayan mimarisinin temel avantajıdır.
Sıkça Sorulan Sorular
RTMP ve HLS, 3-10 saniye gecikmeli sunucu tabanlı protokollerdir, tüm veriler sunucudan geçer. WebRTC, 200-500 ms gecikmeli eşler arasıdır. RTMP büyük kitlelere yayın için uygundur, WebRTC etkileşimli aramalar ve oyunlar için.
Hayır, TURN yalnızca P2P çalışmadığında (simetrik NAT, kurumsal güvenlik duvarları) gereklidir. Google istatistiklerine göre, bağlantıların yaklaşık %15'i TURN gerektirir. Üretim için %100 güvenilirlik için yedek olarak bir TURN sunucusu bulundurulması önerilir.
Zorunlu codec'ler: VP8 (tüm platformlar) ve H.264 (iOS/Android'de donanım hızlandırmalı). İsteğe bağlı: VP9 (daha iyi sıkıştırma, düşük bit hızı) ve AV1 (süper verimli ancak CPU yoğun). Ses: Opus (birincil) ve G.711 (PCMU/PCMA).
Evet, RTCDataChannel aracılığıyla. Bu, isteğe bağlı verileri (metin, dosya, ikili mesajlar) iletmek için tam teşekküllü bir kanaldır. DataChannel, yapılandırılabilir güvenilirlikle (oyunlar için kısmen güvenilir teslimat, dosyalar için güvenilir) SCTP üzerinde çalışır.
İstemcide MediaRecorder API aracılığıyla veya SFU (Selective Forwarding Unit) aracılığıyla — tüm katılımcı akışlarını alan ve kaydedebilen bir sunucu. İkinci seçenek daha güvenilirdir çünkü kayıt katılımcının cihazına bağlı değildir ve bağlantı kesildiğinde kesintiye uğramaz.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.