WebRTC: τι είναι, αρχιτεκτονική και αρχή λειτουργίας

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-01 Χρόνος ανάγνωσης: 9 λεπ

Το WebRTC είναι μια ανοιχτή τεχνολογία για μετάδοση ήχου, βίντεο και δεδομένων σε πραγματικό χρόνο μεταξύ συσκευών απευθείας, χωρίς ενδιάμεσους διακομιστές. Σύμφωνα με το WebRTC Project (2026), το πρότυπο υποστηρίζεται από όλα τα σύγχρονα προγράμματα περιήγησης και κινητές πλατφόρμες, παρέχοντας λανθάνουσα κατάσταση κάτω από 500 ms. Το WebRTC χρησιμοποιεί τα πρωτόκολλα ICE, STUN, TURN για τη δημιουργία σύνδεσης ακόμα και πίσω από NAT και τείχη προστασίας.

Κύρια σημεία

  • WebRTC — ανοιχτό πρότυπο για peer-to-peer μετάδοση ήχου, βίντεο και δεδομένων σε πραγματικό χρόνο χωρίς πρόσθετα.
  • Αρχιτεκτονική περιλαμβάνει τρία επίπεδα: API εφαρμογής (getUserMedia, RTCPeerConnection), μεταφορά (ICE, STUN, TURN) και ασφάλεια (DTLS, SRTP).
  • NAT traversal επιλύεται μέσω του πλαισίου ICE με χρήση διακομιστών STUN (δημόσια IP) και αναμεταδοτών TURN (παράκαμψη συμμετρικού NAT).
  • Κινητά SDK — το Google WebRTC για Android και iOS παρέχει εγγενή API για φωνητικές και βιντεοκλήσεις.
  • Σηματοδοσία (ανταλλαγή SDP) δεν αποτελεί μέρος του WebRTC και υλοποιείται μέσω WebSocket, SIP ή ιδιόκτητου πρωτοκόλλου.

Τι είναι το WebRTC

WebRTC (Web Real-Time Communication) — είναι ένα έργο ανοιχτού κώδικα που ξεκίνησε από την Google το 2011 και τυποποιήθηκε από το W3C (JavaScript API) και το IETF (πρωτόκολλα). Κύριος στόχος είναι η παροχή επικοινωνίας χαμηλής λανθάνουσας κατάστασης μεταξύ προγραμμάτων περιήγησης και εφαρμογών χωρίς εγκατάσταση πρόσθετων ή λογισμικού τρίτων.

Σε αντίθεση με τις παραδοσιακές λύσεις (RTMP, HLS) όπου το βίντεο περνά μέσω διακομιστή, το WebRTC χρησιμοποιεί peer-to-peer αρχιτεκτονική: τα δεδομένα μεταδίδονται απευθείας μεταξύ των συμμετεχόντων. Αυτό παρέχει καθυστέρηση 200-500 ms έναντι 3-10 δευτερολέπτων στο HLS — κρίσιμη διαφορά για φωνητικές και βιντεοκλήσεις, ροή παιχνιδιών και απομακρυσμένη χειρουργική.

Σύμφωνα με την Google WebRTC Team (2025), η τεχνολογία χρησιμοποιείται σε εφαρμογές με συνολικά περισσότερες από 5 δισεκατομμύρια εγκαταστάσεις: Google Meet, WhatsApp, Discord, Telegram, Zoom (μερικώς). Πάνω από το 85% των νεοφυών επιχειρήσεων επιχειρηματικών κεφαλαίων στους τομείς telehealth και edtech επιλέγουν το WebRTC ως κύρια μεταφορά πραγματικού χρόνου.

Η κινητή ανάπτυξη απέκτησε πλήρως λειτουργικό WebRTC το 2013 με την κυκλοφορία του libjingle_peerconnection — εγγενούς υλοποίησης για Android και iOS. Προς το παρόν και οι δύο πλατφόρμες διαθέτουν σταθερά SDK με υποστήριξη για κωδικοποίηση υλικού H.264 και VP8, κάμερα, μικρόφωνο και ηχεία της συσκευής.

Αρχιτεκτονική και πρωτόκολλα WebRTC

Η αρχιτεκτονική WebRTC αποτελείται από τρία επίπεδα. Το ανώτερο επίπεδο — JavaScript API (ή εγγενές API για κινητές πλατφόρμες), το μεσαίο — πρωτόκολλα μεταφοράς, το κατώτερο — κωδικοποιητές και ασφάλεια. Κάθε επίπεδο λύνει το δικό του έργο, αλλά όλα είναι υποχρεωτικά για τη δημιουργία σύνδεσης.

Κύρια API WebRTC

MediaStream (getUserMedia) — λήψη ήχου και βίντεο από το μικρόφωνο και την κάμερα της συσκευής. RTCPeerConnection — διαχείριση σύνδεσης P2P: κωδικοποίηση, μεταφορά, προσαρμογή bitrate. RTCDataChannel — μετάδοση αυθαίρετων δεδομένων (κείμενο, αρχεία, δυαδικά μηνύματα) μέσω του ίδιου καναλιού.

js
// JavaScript API WebRTC (παράδειγμα προγράμματος περιήγησης)
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 χρησιμοποιεί SRTP (Secure Real-Time Transport Protocol) για ήχο και βίντεο — ασφαλή έκδοση του RTP με κρυπτογράφηση AES-128. Η διαχείριση συνόδου γίνεται μέσω SCTP (Stream Control Transmission Protocol) μέσω DTLS. Κάθε ροή δεδομένων είναι υποχρεωτικά κρυπτογραφημένη: στο WebRTC δεν υπάρχει μη ασφαλής λειτουργία.

  • SRTP/SRTCP — κρυπτογραφημένη μετάδοση ροών πολυμέσων με προστασία από επιθέσεις replay
  • DTLS-SRTP — δημιουργία κλειδιών κρυπτογράφησης μέσω Datagram TLS μέσω UDP
  • SCTP — αξιόπιστη ή μερικώς αξιόπιστη παράδοση δεδομένων για το DataChannel
  • ICE (Interactive Connectivity Establishment) — πλαίσιο για εύρεση διαδρομής δικτύου μεταξύ κόμβων
  • Trickle ICE — προσαυξητική έκδοση του ICE όπου οι υποψήφιοι αποστέλλονται καθώς ανακαλύπτονται, επιταχύνοντας τη δημιουργία σύνδεσης

NAT traversal: ICE, STUN και TURN

Η κύρια τεχνική δυσκολία του WebRTC είναι η δημιουργία σύνδεσης P2P μεταξύ συσκευών που βρίσκονται πίσω από NAT (Network Address Translation). Χωρίς ειδικούς μηχανισμούς, οι συσκευές δεν μπορούν να απευθυνθούν απευθείας η μία στην άλλη, επειδή οι τοπικές διευθύνσεις IP τους δεν είναι ορατές από το διαδίκτυο.

STUN — προσδιορισμός δημόσιας διεύθυνσης

STUN (Session Traversal Utilities for NAT) — διακομιστής που απαντά στην ερώτηση “ποια είναι η δημόσια IP μου και η θύρα μου;”. Ο πελάτης στέλνει αίτημα στον διακομιστή STUN, ο διακομιστής βλέπει τη δημόσια διεύθυνσή του και την επιστρέφει στον πελάτη. Η Google διατηρεί δημόσια τον διακομιστή STUN stun:stun.l.google.com:19302.

swift
// WebRTC σε iOS — ρύθμιση διακομιστών ICE
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 — σύνδεση αναμετάδοσης

TURN (Traversal Using Relays around NAT) — διακομιστής αναμετάδοσης για περιπτώσεις όπου το STUN δεν βοηθά (συμμετρικό NAT ή εταιρικά τείχη προστασίας). Σε αυτή τη λειτουργία, όλα τα δεδομένα περνούν μέσω του διακομιστή TURN — αυτό μειώνει την ταχύτητα και αυξάνει την καθυστέρηση, αλλά εγγυάται σύνδεση στο 99% των περιπτώσεων.

Το TURN είναι το πιο ακριβό στοιχείο της υποδομής WebRTC, καθώς ο διακομιστής διέρχεται όλη την κυκλοφορία πολυμέσων μέσω του εαυτού του. Σύμφωνα με το Coturn Project (2025), ένας τυπικός διακομιστής TURN με 8 vCPU και 16 GB RAM επεξεργάζεται περίπου 200 ταυτόχρονες κλήσεις ήχου ή 40 βιντεοκλήσεις σε ποιότητα HD.

Διαδικασία ICE

Το ICE συλλέγει όλους τους πιθανούς υποψηφίους (τοπική IP, δημόσια IP μέσω STUN, αναμετάδοση μέσω TURN) και προσπαθεί να δημιουργήσει σύνδεση κατά σειρά προτεραιότητας. Μόλις τουλάχιστον ένα ζεύγος υποψηφίων (τοπικός-απομακρυσμένος) περάσει τον έλεγχο συνδεσιμότητας connectivity check, η σύνδεση θεωρείται δημιουργημένη.

  • Host candidates — τοπική διεύθυνση IP της συσκευής στο υποδίκτυο (ταχύτερη, αλλά δεν λειτουργεί πίσω από NAT)
  • Server Reflexive candidates — δημόσια IP που λαμβάνεται μέσω διακομιστή STUN
  • Relay candidates — διεύθυνση του διακομιστή TURN μέσω του οποίου γίνεται η αναμετάδοση (βραδύτερη, πιο αξιόπιστη)

WebRTC σε εφαρμογές κινητού

Για κινητή ανάπτυξη, η Google διατηρεί το libWebRTC — εγγενή βιβλιοθήκη για Android (AAR) και iOS (XCFramework). Η βιβλιοθήκη περιλαμβάνει ολόκληρη τη στοίβα πρωτοκόλλων, κωδικοποιητές (VP8, VP9, H.264, AV1) και επιτάχυνση υλικού κωδικοποίησης/αποκωδικοποίησης.

WebRTC σε Android

Το Android SDK παρέχει τις κλάσεις PeerConnectionFactory, PeerConnection, MediaStream. Η εφαρμογή δημιουργεί ένα εργοστάσιο, ρυθμίζει τους κωδικοποιητές βίντεο, συλλαμβάνει τη ροή από την κάμερα μέσω VideoCapturer και δημιουργεί σύνδεση peer-to-peer μέσω SDP offer/answer.

java
// Android WebRTC — αρχικοποίηση
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();

WebRTC σε iOS

Το iOS SDK χρησιμοποιεί API Objective-C με τα περιτυλίγματα RTCPeerConnectionFactory, RTCCameraVideoCapturer, RTCVideoTrack. Η κωδικοποίηση υλικού H.264 είναι διαθέσιμη μέσω VideoToolbox. Για την προβολή βίντεο χρησιμοποιείται RTCMTLVideoView (Metal) ή RTCVideoRenderer.

swift
// iOS WebRTC — λήψη βίντεο από κάμερα
let factory = RTCPeerConnectionFactory()
let capturer = RTCCameraVideoCapturer(delegate: factory)

// Επιλογή κάμερας (μπροστά/πίσω)
guard let device = RTCCameraVideoCapturer
    .captureDevices().first(where: {
        $0.position == .front
    }) else { return }

// Έναρξη λήψης με μέγιστο FPS
capturer.startCapture(
    with: device,
    format: RTCCameraVideoCapturer
        .supportedFormats(for: device).last!,
    fps: 30
)

Για βιντεοκλήσεις σε παραγωγή, οι εφαρμογές κινητού συνήθως χρησιμοποιούν περιτυλίγματα SDK πάνω από το libWebRTC: Twilio Video, Agora, Daily.co. Αυτά τα SDK απλοποιούν τη σηματοδοσία, τη διαχείριση δωματίων και παρέχουν έτοιμα στοιχεία UI για την προβολή του πλέγματος βίντεο των συμμετεχόντων.

Σηματοδοσία και δημιουργία σύνδεσης

Το WebRTC δεν προσδιορίζει το πρωτόκολλο σηματοδοσίας — ανταλλαγή μηνυμάτων SDP (Session Description Protocol) μεταξύ κόμβων. Ο προγραμματιστής επιλέγει ο ίδιος τη μεταφορά για σηματοδοσία: WebSocket, MQTT, SIP, XMPP ή REST API. Η σηματοδοσία παραδίδει το offer, το answer και τους υποψηφίους ICE από τον έναν κόμβο στον άλλο.

Ανταλλαγή SDP Offer/Answer

Η διαδικασία ξεκινά με τη δημιουργία offer (ο εκκινητής περιγράφει τις δυνατότητες πολυμέσων του), μεταδίδεται μέσω σηματοδοσίας στον δεύτερο κόμβο, ο οποίος απαντά με answer. Μετά την ανταλλαγή SDP, κάθε κόμβος εκκινεί το ICE και ξεκινά το DTLS-SRTP για κρυπτογράφηση της ροής.

kotlin
// Android — δημιουργία και αποστολή 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)
            // Αποστολή sdp.description στον διακομιστή σηματοδοσίας
            sendSdpOffer(sdp.description)
        }
    }, constraints)
}

Πρωτόκολλα σηματοδοσίας

Στις εφαρμογές κινητού, η πιο δημοφιλής σηματοδοσία είναι μέσω WebSocket — αμφίδρομο κανάλι μέσω TCP που διατηρεί μόνιμη σύνδεση με τον διακομιστή. Ο διακομιστής σηματοδοσίας είναι συχνά μια ξεχωριστή μικροϋπηρεσία (Node.js, Golang, Elixir) που δρομολογεί μηνύματα μεταξύ των συμμετεχόντων στο δωμάτιο.

  • WebSocket — μόνιμη αμφίδρομη σύνδεση, ελάχιστη επιβάρυνση, τυπική επιλογή για σηματοδοσία
  • SIP over WebSocket — τυπικό πρωτόκολλο VoIP, ενσωματώνεται με υπάρχουσα τηλεφωνική υποδομή
  • MQTT — ελαφρύ πρωτόκολλο pub/sub για IoT και αδύναμα δίκτυα, αλλά με μεγαλύτερη καθυστέρηση
  • Matrix / XMPP — αποκεντρωμένα πρωτόκολλα για εφαρμογές με απαιτήσεις απορρήτου

Μετά την ολοκλήρωση ICE και DTLS-SRTP, η σηματοδοσία δεν συμμετέχει πλέον στη μετάδοση δεδομένων — όλη η κυκλοφορία πολυμέσων γίνεται απευθείας P2P (ή μέσω αναμεταδότη TURN). Ο διακομιστής σηματοδοσίας μπορεί να απενεργοποιηθεί χωρίς διακοπή των ενεργών κλήσεων. Αυτό είναι το βασικό πλεονέκτημα της αποκεντρωμένης αρχιτεκτονικής του WebRTC.

Συχνές ερωτήσεις

Σε τι διαφέρει το WebRTC από το RTMP ή το HLS;

Τα RTMP και HLS είναι πρωτόκολλα διακομιστή με καθυστέρηση 3-10 δευτερολέπτων, όπου όλα τα δεδομένα περνούν μέσω διακομιστή. Το WebRTC είναι peer-to-peer με καθυστέρηση 200-500 ms. Το RTMP είναι κατάλληλο για ροή σε μεγάλο κοινό, το WebRTC για διαδραστικές κλήσεις και παιχνίδια.

Είναι υποχρεωτική η χρήση διακομιστή TURN;

Όχι, το TURN χρειάζεται μόνο σε περιπτώσεις όπου το P2P δεν λειτουργεί (συμμετρικό NAT, εταιρικά τείχη προστασίας). Σύμφωνα με στατιστικά της Google, περίπου το 15% των συνδέσεων απαιτούν TURN. Για παραγωγή συνιστάται να υπάρχει διακομιστής TURN ως εφεδρεία για 100% αξιοπιστία.

Ποιους κωδικοποιητές υποστηρίζει το WebRTC σε εφαρμογές κινητού;

Υποχρεωτικοί κωδικοποιητές: VP8 (όλες οι πλατφόρμες) και H.264 (με επιτάχυνση υλικού σε iOS/Android). Προαιρετικά: VP9 (καλύτερη συμπίεση, χαμηλότερο bitrate) και AV1 (πολύ αποδοτικός, αλλά απαιτητικός για CPU). Ήχος: Opus (κύριος) και G.711 (PCMU/PCMA).

Μπορεί το WebRTC να χρησιμοποιηθεί μόνο για μετάδοση δεδομένων χωρίς βίντεο;

Ναι, μέσω RTCDataChannel. Είναι ένα πλήρως λειτουργικό κανάλι για μετάδοση αυθαίρετων δεδομένων: κείμενο, αρχεία, δυαδικά μηνύματα. Το DataChannel λειτουργεί μέσω SCTP με ρυθμιζόμενη αξιοπιστία (μερικώς αξιόπιστη παράδοση για παιχνίδια, αξιόπιστη για αρχεία).

Πώς μπορεί να διασφαλιστεί η εγγραφή κλήσης που βασίζεται σε WebRTC;

Μέσω του MediaRecorder API στην πλευρά του πελάτη ή μέσω SFU (Selective Forwarding Unit) — διακομιστή που λαμβάνει όλες τις ροές των συμμετεχόντων και μπορεί να τις καταγράφει. Η δεύτερη επιλογή είναι πιο αξιόπιστη, καθώς η εγγραφή δεν εξαρτάται από τη συσκευή του συμμετέχοντος και δεν διακόπτεται κατά την αποσύνδεση.

Σύνοψη

  • WebRTC — ανοιχτό πρότυπο P2P πραγματικού χρόνου με λανθάνουσα κατάσταση 200-500 ms, υποστηρίζεται από όλα τα προγράμματα περιήγησης και κινητές πλατφόρμες.
  • Αρχιτεκτονική βασίζεται σε τρία επίπεδα: media API (getUserMedia, RTCPeerConnection), μεταφορά ICE (STUN/TURN) και ασφάλεια (DTLS-SRTP).
  • NAT traversal επιλύεται μέσω του πλαισίου ICE — από άμεσο P2P (host) έως αναμετάδοση TURN (relay) για παράκαμψη οποιωνδήποτε τειχών προστασίας.
  • Κινητά SDK από την Google παρέχουν κωδικοποίηση υλικού H.264 και VP8, λήψη κάμερας και μικροφώνου σε Android και iOS.
  • Σηματοδοσία (ανταλλαγή SDP) δεν αποτελεί μέρος του WebRTC και υλοποιείται μέσω WebSocket, SIP ή οποιουδήποτε πρωτοκόλλου διαθέσιμου στον προγραμματιστή.
  • SDK παραγωγής (Twilio, Agora, Daily.co) βασισμένα στο libWebRTC απλοποιούν τη διαχείριση δωματίων, τη σηματοδοσία και τα στοιχεία UI.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης