WebRTC: nedir, mimarisi ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-06-01 Okuma süresi: 9 dk

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 — eklenti olmadan gerçek zamanlı olarak ses, video ve verinin eşler arası iletimi için açık bir standart.
  • Mimari üç katman içerir: uygulama API'leri (getUserMedia, RTCPeerConnection), taşıma (ICE, STUN, TURN) ve güvenlik (DTLS, SRTP).
  • NAT traversal, STUN sunucuları (genel IP) ve TURN röleleri (simetrik NAT'ı atlama) kullanarak ICE çerçevesi ile çözülür.
  • Mobil SDK'lar — Android ve iOS için Google WebRTC, sesli ve görüntülü aramalar için yerel API'ler sağlar.
  • Sinyalleşme (SDP değişimi) WebRTC'nin bir parçası değildir ve WebSocket, SIP veya özel bir protokol ile uygulanır.

WebRTC Nedir

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 ve Protokolleri

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.

Temel WebRTC API'leri

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.

js
// 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);

Gerçek Zamanlı Protokoller

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.

  • SRTP/SRTCP — yeniden oynatma saldırısı koruması ile şifrelenmiş medya akışı iletimi
  • DTLS-SRTP — UDP üzerinden Datagram TLS ile şifreleme anahtarı oluşturma
  • SCTP — DataChannel için güvenilir veya kısmen güvenilir veri teslimi
  • ICE (Interactive Connectivity Establishment) — eşler arasında ağ yolu bulmak için çerçeve
  • Trickle ICE — adayların keşfedildikçe gönderildiği, bağlantı kurulumunu hızlandıran aşamalı ICE sürümü

NAT traversal: ICE, STUN ve TURN

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 — genel adres belirleme

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.

swift
// 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 — röle bağlantısı

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 Süreci

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.

  • Host candidates — alt ağdaki cihazın yerel IP adresi (en hızlı, ancak NAT arkasında çalışmaz)
  • Server Reflexive candidates — bir STUN sunucusu aracılığıyla elde edilen genel IP
  • Relay candidates — rölenin gerçekleştiği TURN sunucu adresi (en yavaş, en güvenilir)

Mobil Uygulamalarda WebRTC

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'de WebRTC

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.

java
// 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'ta WebRTC

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.

swift
// 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.

Sinyalleşme ve Bağlantı Kurulumu

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.

SDP Offer/Answer Değişimi

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.

kotlin
// 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)
}

Sinyalleşme Protokolleri

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).

  • WebSocket — kalıcı çift yönlü bağlantı, minimum ek yük, sinyalleşme için standart seçim
  • WebSocket üzerinden SIP — standart VoIP protokolü, mevcut telefon altyapısıyla entegre olur
  • MQTT — IoT ve zayıf ağlar için hafif pub/sub protokolü, ancak daha yüksek gecikmeli
  • Matrix / XMPP — gizlilik odaklı uygulamalar için merkezi olmayan protokoller

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

WebRTC, RTMP veya HLS'den nasıl farklıdır?

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.

TURN sunucusu kullanmak zorunlu mu?

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.

WebRTC mobil uygulamalarda hangi codec'leri destekler?

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).

WebRTC yalnızca video olmadan veri aktarımı için kullanılabilir mi?

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.

WebRTC ile arama kaydı nasıl sağlanı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

  • WebRTC — 200-500 ms gecikmeli açık P2P gerçek zamanlı standart, tüm tarayıcılar ve mobil platformlar tarafından desteklenir.
  • Mimari üç katmana dayanır: medya API'leri (getUserMedia, RTCPeerConnection), ICE taşıma (STUN/TURN) ve güvenlik (DTLS-SRTP).
  • NAT traversal, ICE çerçevesi tarafından çözülür — doğrudan P2P (host) ile röle TURN (relay) arasında herhangi bir güvenlik duvarını atlamak için.
  • Mobil SDK'lar Google'dan Android ve iOS'ta H.264 ve VP8 donanım kodlaması, kamera ve mikrofon yakalama sağlar.
  • Sinyalleşme (SDP değişimi) WebRTC'nin parçası değildir ve WebSocket, SIP veya geliştirici için uygun herhangi bir protokol ile uygulanır.
  • Üretim SDK'ları (Twilio, Agora, Daily.co) libWebRTC üzerinde oda yönetimini, sinyalleşmeyi ve UI bileşenlerini basitleştirir.

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.

Projeyi tartış

Ayrıca okuyun