WebRTC är en öppen teknik för att överföra ljud, video och data i realtid mellan enheter direkt, utan mellanliggande servrar. Enligt WebRTC Project (2026) stöds standarden av alla moderna webbläsare och mobila plattformar och ger en latens under 500 ms. WebRTC använder protokollen ICE, STUN, TURN för att upprätta anslutningar även bakom NAT och brandväggar.
Huvudpunkter
WebRTC (Web Real-Time Communication) är ett projekt med öppen källkod som startades av Google 2011 och standardiserades av W3C (JavaScript API) och IETF (protokoll). Huvuduppgiften är att tillhandahålla kommunikation med låg latens mellan webbläsare och applikationer utan att installera plugin-program eller programvara från tredje part.
Till skillnad från traditionella lösningar (RTMP, HLS) där video passerar genom en server, använder WebRTC peer-to-peer-arkitektur: data överförs direkt mellan deltagarna. Detta ger en fördröjning på 200-500 ms jämfört med 3-10 sekunder för HLS — en kritisk skillnad för röst- och videosamtal, spelströmning och fjärrkirurgi.
Enligt Google WebRTC Team (2025) används tekniken i appar med totalt över 5 miljarder installationer: Google Meet, WhatsApp, Discord, Telegram, Zoom (delvis). Över 85 % av riskkapitalstartups inom telehealth och edtech väljer WebRTC som primär realtidstransport.
Mobilutvecklingen fick fullt fungerande WebRTC 2013 med lanseringen av libjingle_peerconnection — en inbyggd implementering för Android och iOS. För närvarande har båda plattformarna stabila SDK med stöd för hårdvarukodning av H.264 och VP8, kamera, mikrofon och enhetens högtalare.
WebRTCs arkitektur består av tre nivåer. Den övre nivån — JavaScript API (eller inbyggt API för mobila plattformar), mitten — transportprotokoll, nedre — codec och säkerhet. Varje nivå löser sin egen uppgift, men alla är nödvändiga för att upprätta en anslutning.
MediaStream (getUserMedia) — fånga ljud och video från enhetens mikrofon och kamera. RTCPeerConnection — hantering av P2P-anslutning: kodning, transport, bitrate-anpassning. RTCDataChannel — överföring av godtyckliga data (text, filer, binära meddelanden) via samma kanal.
// JavaScript API WebRTC (webbläsarexempel)
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 använder SRTP (Secure Real-Time Transport Protocol) för ljud och video — en säker version av RTP med AES-128-kryptering. Sessionshantering sker via SCTP (Stream Control Transmission Protocol) över DTLS. Varje dataström krypteras obligatoriskt: i WebRTC finns inget osäkert läge.
Den största tekniska utmaningen med WebRTC är att upprätta en P2P-anslutning mellan enheter som befinner sig bakom NAT (Network Address Translation). Utan särskilda mekanismer kan enheter inte nå varandra direkt eftersom deras lokala IP-adresser inte är synliga från internet.
STUN (Session Traversal Utilities for NAT) — server som svarar på frågan “vad är min offentliga IP och port?”. Klienten skickar en förfrågan till STUN-servern, servern ser dess offentliga adress och returnerar den till klienten. Google underhåller offentligt STUN-servern stun:stun.l.google.com:19302.
// WebRTC på iOS — konfiguration av ICE-servrar
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) — vidaresändningsserver för fall där STUN inte hjälper (symmetrisk NAT eller företagsbrandväggar). I detta läge passerar alla data genom TURN-servern — detta minskar hastigheten och ökar fördröjningen, men garanterar anslutning i 99 % av fallen.
TURN är den dyraste komponenten i WebRTC-infrastrukturen eftersom servern passerar all medietrafik genom sig själv. Enligt Coturn Project (2025) hanterar en typisk TURN-server med 8 vCPU och 16 GB RAM ungefär 200 samtidiga ljudsamtal eller 40 videosamtal i HD-kvalitet.
ICE samlar in alla möjliga kandidater (lokal IP, offentlig IP via STUN, relä via TURN) och försöker upprätta anslutning i prioritetsordning. Så snart minst ett par kandidater (lokal-remote) passerar connectivity check, anses anslutningen vara upprättad.
För mobilutveckling underhåller Google libWebRTC — ett inbyggt bibliotek för Android (AAR) och iOS (XCFramework). Biblioteket innehåller hela protokollstacken, codec (VP8, VP9, H.264, AV1) och hårdvaruacceleration för kodning/avkodning.
Android SDK tillhandahåller klasserna PeerConnectionFactory, PeerConnection, MediaStream. Appen skapar en fabrik, konfigurerar videocodec, fångar strömmen från kameran via VideoCapturer och upprättar en peer-to-peer-anslutning via SDP offer/answer.
// Android WebRTC — initialisering
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 använder Objective-C API med omslagen RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack. Hårdvarukodning av H.264 är tillgänglig via VideoToolbox. För visning av video används RTCMTLVideoView (Metal) eller RTCVideoRenderer.
// iOS WebRTC — videofångst från kamera
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)
// Val av kamera (fram/bak)
guard let device = RTCCameraVideoCapturer
.captureDevices().first(where: {
$0.position == .front
}) else { return }
// Starta fångst med maximal FPS
capturer.startCapture(
with: device,
format: RTCCameraVideoCapturer
.supportedFormats(for: device).last!,
fps: 30
)
För videosamtal i produktion använder mobilappar vanligtvis SDK-omslag över libWebRTC: Twilio Video, Agora, Daily.co. Dessa SDK förenklar signalering, rumsadministration och tillhandahåller färdiga UI-komponenter för att visa deltagarnas videogrid.
WebRTC specificerar inte signaleringsprotokollet — utbyte av SDP-meddelanden (Session Description Protocol) mellan peers. Utvecklaren väljer själv transport för signalering: WebSocket, MQTT, SIP, XMPP eller REST API. Signalering levererar offer, answer och ICE-kandidater från en peer till en annan.
Processen börjar med att skapa ett offer (initiatorn beskriver sina mediamöjligheter), skickas via signalering till den andra peern, som svarar med ett answer. Efter SDP-utbytet startar varje peer ICE och initierar DTLS-SRTP för att kryptera strömmen.
// Android — skapa och skicka offer
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)
// Skicka sdp.description till signaleringsservern
sendSdpOffer(sdp.description)
}
}, constraints)
}
I mobilappar är signalering via WebSocket populärast — en tvåvägskanal över TCP som upprätthåller en permanent anslutning till servern. Signaleringsservern är ofta en separat mikrotjänst (Node.js, Golang, Elixir) som dirigerar meddelanden mellan rumsdeltagare.
Efter slutförandet av ICE och DTLS-SRTP deltar signaleringen inte längre i dataöverföringen — all medietrafik går direkt P2P (eller via TURN-relä). Signaleringsservern kan stängas av utan att avbryta aktiva samtal. Detta är den viktigaste fördelen med WebRTCs decentraliserade arkitektur.
Vanliga frågor
RTMP och HLS är serverprotokoll med en fördröjning på 3-10 sekunder, där all data passerar genom servern. WebRTC är peer-to-peer med en fördröjning på 200-500 ms. RTMP passar för strömning till stor publik, WebRTC för interaktiva samtal och spel.
Nej, TURN behövs bara i fall där P2P inte fungerar (symmetrisk NAT, företagsbrandväggar). Enligt Google-statistik kräver cirka 15 % av anslutningarna TURN. För produktion rekommenderas att ha en TURN-server som fallback för 100 % tillförlitlighet.
Obligatoriska codec: VP8 (alla plattformar) och H.264 (med hårdvaruacceleration på iOS/Android). Valfria: VP9 (bättre komprimering, lägre bitrate) och AV1 (mycket effektiv, men krävande för CPU). Ljud: Opus (primär) och G.711 (PCMU/PCMA).
Ja, via RTCDataChannel. Detta är en fullt fungerande kanal för att överföra godtyckliga data: text, filer, binära meddelanden. DataChannel fungerar över SCTP med konfigurerbar tillförlitlighet (delvis tillförlitlig leverans för spel, tillförlitlig för filer).
Via MediaRecorder API på klientsidan eller via SFU (Selective Forwarding Unit) — en server som tar emot alla deltagarströmmar och kan spela in dem. Det andra alternativet är mer tillförlitligt eftersom inspelningen inte är beroende av deltagarens enhet och inte avbryts vid frånkoppling.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.