WebRTC: ما هي، البنية ومبدأ العمل

المؤلف: IT Sectr نُشر: 2026-06-01 وقت القراءة: 9 دق

WebRTC هي تقنية مفتوحة لنقل الصوت والفيديو والبيانات في الوقت الفعلي بين الأجهزة مباشرة، دون خوادم وسيطة. وفقًا لـ WebRTC Project (2026)، يدعم المعيار جميع المتصفحات الحديثة والمنصات المحمولة، مما يوفر زمن استجابة أقل من 500 مللي ثانية. يستخدم WebRTC بروتوكولات ICE وSTUN وTURN لإنشاء الاتصال حتى خلف NAT وجدران الحماية.

الخلاصة

  • WebRTC — معيار مفتوح لنقل الصوت والفيديو والبيانات في الوقت الفعلي من نظير إلى نظير بدون إضافات.
  • البنية تشمل ثلاث طبقات: واجهات برمجة التطبيقات (getUserMedia، RTCPeerConnection)، النقل (ICE، STUN، TURN) والأمان (DTLS، SRTP).
  • اجتياز NAT يتم حله من خلال إطار عمل ICE باستخدام خوادم STUN (IP العام) ومرحلات TURN (تجاوز NAT المتماثل).
  • SDK المحمولة — Google WebRTC لنظامي Android وiOS توفر واجهات برمجة تطبيقات أصلية للمكالمات الصوتية والمرئية.
  • الإشارات (تبادل SDP) ليست جزءًا من WebRTC ويتم تنفيذها عبر WebSocket أو SIP أو بروتوكول مخصص.

ما هو WebRTC

WebRTC (Web Real-Time Communication) هو مشروع مفتوح المصدر بدأته Google في عام 2011 وتم توحيده من قبل W3C (JavaScript API) وIETF (البروتوكولات). هدفه الرئيسي هو توفير اتصال منخفض زمن الاستجابة بين المتصفحات والتطبيقات دون تثبيت إضافات أو برامج طرف ثالث.

على عكس الحلول التقليدية (RTMP، HLS) حيث يمر الفيديو عبر خادم، يستخدم WebRTC بنية نظير إلى نظير: يتم نقل البيانات مباشرة بين المشاركين. يوفر هذا زمن استجابة 200-500 مللي ثانية مقابل 3-10 ثوانٍ لـ HLS — فرق حاسم للمكالمات الصوتية والمرئية وبث الألعاب والجراحة عن بُعد.

وفقًا لفريق Google WebRTC (2025)، تُستخدم التقنية في تطبيقات يبلغ إجمالي جمهورها أكثر من 5 مليارات عملية تثبيت: Google Meet وWhatsApp وDiscord وTelegram وZoom (جزئيًا). أكثر من 85% من الشركات الناشئة الاستثمارية في مجال الرعاية الصحية عن بُعد والتكنولوجيا التعليمية تختار WebRTC كنقل أساسي في الوقت الفعلي.

حصل التطوير المحمول على دعم كامل لـ WebRTC في عام 2013 مع إصدار libjingle_peerconnection — تطبيق أصلي لنظامي Android وiOS. اليوم تحتوي كلتا المنصتين على SDK مستقرة مع دعم الترميز العتادي لـ H.264 وVP8 والكاميرا والميكروفون ومكبرات الصوت للجهاز.

بنية WebRTC وبروتوكولاته

تتكون بنية WebRTC من ثلاث طبقات. الطبقة العليا هي JavaScript API (أو API الأصلية للمنصات المحمولة)، الوسطى هي بروتوكولات النقل، السفلى هي الترميزات والأمان. كل طبقة تحل مهمتها الخاصة، ولكن جميعها ضرورية لإنشاء الاتصال.

واجهات برمجة التطبيقات الرئيسية لـ WebRTC

MediaStream (getUserMedia) — التقاط الصوت والفيديو من ميكروفون الجهاز وكاميرته. RTCPeerConnection — يدير اتصال P2P: الترميز والنقل وتكييف معدل البت. RTCDataChannel — ينقل البيانات التعسفية (نص وملفات ورسائل ثنائية) عبر نفس القناة.

js
// واجهة برمجة تطبيقات JavaScript لـ 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 — نقل مشفر لتيارات الوسائط مع حماية من هجمات إعادة التشغيل
  • DTLS-SRTP — إنشاء مفاتيح التشفير عبر Datagram TLS فوق UDP
  • SCTP — توصيل بيانات موثوق أو موثوق جزئيًا لـ DataChannel
  • ICE (Interactive Connectivity Establishment) — إطار عمل لإيجاد مسار شبكة بين النظراء
  • Trickle ICE — إصدار تدريجي من ICE حيث يتم إرسال المرشحين عند اكتشافهم، مما يسرع إنشاء الاتصال

اجتياز NAT: 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 جيجابايت من RAM حوالي 200 مكالمة صوتية متزامنة أو 40 مكالمة فيديو بدقة HD.

عملية ICE

يجمع ICE جميع المرشحين الممكنين (IP المحلي، IP العام عبر STUN، الترحيل عبر TURN) ويحاول إنشاء اتصال بترتيب الأولوية. بمجرد اجتياز زوج واحد على الأقل من المرشحين (محلي-بعيد) فحص الاتصال، يعتبر الاتصال قد تم إنشاؤه.

  • 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 وينشئ اتصال النظير عبر SDP offer/answer.

java
// WebRTC على Android — التهيئة
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 واجهة برمجة تطبيقات Objective-C مع أغلفة RTCPeerConnectionFactory وRTCCameraVideoCapturer وRTCVideoTrack. الترميز العتادي H.264 متاح عبر VideoToolbox. لعرض الفيديو، يُستخدم RTCMTLVideoView (Metal) أو RTCVideoRenderer.

swift
// WebRTC على iOS — التقاط الفيديو من الكاميرا
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 الإشارات وإدارة الغرف وتوفر مكونات واجهة مستخدم جاهزة لعرض شبكة فيديو المشاركين.

الإشارات وإنشاء الاتصال

لا يحدد WebRTC بروتوكول إشارات — تبادل رسائل SDP (Session Description Protocol) بين النظراء. يختار المطور وسيلة النقل للإشارات: WebSocket أو MQTT أو SIP أو XMPP أو REST API. توصل الإشارات العرض والإجابة ومرشحي ICE من نظير إلى آخر.

تبادل SDP Offer/Answer

تبدأ العملية بإنشاء عرض (يصف البادئ إمكانياته الوسائطية)، وينقل عبر الإشارات إلى النظير الثاني، الذي يرد بـ إجابة. بعد تبادل SDP، يبدأ كل نظير ICE ويطلق DTLS-SRTP لتشفير التيار.

kotlin
// Android — إنشاء وإرسال العرض
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 عبر WebSocket — بروتوكول VoIP قياسي، يتكامل مع البنية التحتية الهاتفية الحالية
  • MQTT — بروتوكول نشر/اشتراك خفيف لإنترنت الأشياء والشبكات الضعيفة، لكن بزمن استجابة أعلى
  • Matrix / XMPP — بروتوكولات لا مركزية للتطبيقات التي تتطلب الخصوصية

بعد اكتمال ICE وDTLS-SRTP، لم تعد الإشارات تشارك في نقل البيانات — كل حركة مرور الوسائط تتدفق مباشرة P2P (أو عبر مرحل TURN). يمكن إيقاف تشغيل خادم الإشارات دون مقاطعة المكالمات النشطة. هذه هي الميزة الرئيسية لـ البنية اللامركزية لـ WebRTC.

الأسئلة الشائعة

ما الفرق بين WebRTC وRTMP أو HLS؟

RTMP وHLS هما بروتوكولات خادم بزمن استجابة 3-10 ثوانٍ، حيث تمر جميع البيانات عبر الخادم. WebRTC هو نظير إلى نظير بزمن استجابة 200-500 مللي ثانية. RTMP مناسب للبث لجماهير كبيرة، WebRTC للمكالمات التفاعلية والألعاب.

هل استخدام خادم TURN إلزامي؟

لا، TURN مطلوب فقط للحالات التي لا يعمل فيها P2P (NAT المتماثل، جدران الحماية المؤسسية). وفقًا لإحصائيات Google، حوالي 15% من الاتصالات تتطلب TURN. للإنتاج، يُوصى بوجود خادم TURN كخيار احتياطي لموثوقية 100%.

ما الترميزات التي يدعمها WebRTC في التطبيقات المحمولة؟

الترميزات الإلزامية: VP8 (جميع المنصات) وH.264 (مع تسريع عتادي على iOS/Android). اختيارية: VP9 (ضغط أفضل، معدل بت أقل) وAV1 (فعال للغاية لكنه مكثف للمعالج). الصوت: Opus (رئيسي) وG.711 (PCMU/PCMA).

هل يمكن استخدام WebRTC فقط لنقل البيانات بدون فيديو؟

نعم، عبر RTCDataChannel. إنها قناة كاملة لنقل البيانات التعسفية: نص وملفات ورسائل ثنائية. يعمل DataChannel فوق SCTP بموثوقية قابلة للتكوين (توصيل موثوق جزئيًا للألعاب، موثوق للملفات).

كيف نضمن تسجيل المكالمات باستخدام WebRTC؟

عبر واجهة برمجة تطبيقات MediaRecorder على العميل أو عبر SFU (Selective Forwarding Unit) — خادم يستقبل جميع تيارات المشاركين ويمكنه تسجيلها. الخيار الثاني أكثر موثوقية لأن التسجيل لا يعتمد على جهاز المشارك ولا يتقطع عند قطع الاتصال.

الملخص

  • WebRTC — معيار مفتوح P2P في الوقت الفعلي بزمن استجابة 200-500 مللي ثانية، مدعوم من جميع المتصفحات والمنصات المحمولة.
  • البنية مبنية على ثلاث طبقات: واجهات برمجة تطبيقات الوسائط (getUserMedia، RTCPeerConnection)، نقل ICE (STUN/TURN) والأمان (DTLS-SRTP).
  • اجتياز NAT يتم حله بواسطة إطار عمل ICE — من P2P المباشر (host) إلى ترحيل TURN (relay) لتجاوز أي جدران حماية.
  • SDK المحمولة من Google توفر ترميزًا عتاديًا لـ H.264 وVP8، والتقاط الكاميرا والميكروفون على Android وiOS.
  • الإشارات (تبادل SDP) ليست جزءًا من WebRTC ويتم تنفيذها عبر WebSocket أو SIP أو أي بروتوكول متاح للمطور.
  • SDK الإنتاجية (Twilio، Agora، Daily.co) فوق libWebRTC تبسط إدارة الغرف والإشارات ومكونات واجهة المستخدم.

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا