WebRTC هي تقنية مفتوحة لنقل الصوت والفيديو والبيانات في الوقت الفعلي بين الأجهزة مباشرة، دون خوادم وسيطة. وفقًا لـ WebRTC Project (2026)، يدعم المعيار جميع المتصفحات الحديثة والمنصات المحمولة، مما يوفر زمن استجابة أقل من 500 مللي ثانية. يستخدم WebRTC بروتوكولات ICE وSTUN وTURN لإنشاء الاتصال حتى خلف NAT وجدران الحماية.
الخلاصة
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 من ثلاث طبقات. الطبقة العليا هي JavaScript API (أو API الأصلية للمنصات المحمولة)، الوسطى هي بروتوكولات النقل، السفلى هي الترميزات والأمان. كل طبقة تحل مهمتها الخاصة، ولكن جميعها ضرورية لإنشاء الاتصال.
MediaStream (getUserMedia) — التقاط الصوت والفيديو من ميكروفون الجهاز وكاميرته. RTCPeerConnection — يدير اتصال P2P: الترميز والنقل وتكييف معدل البت. RTCDataChannel — ينقل البيانات التعسفية (نص وملفات ورسائل ثنائية) عبر نفس القناة.
// واجهة برمجة تطبيقات 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 على وضع غير آمن.
التحدي التقني الرئيسي لـ WebRTC هو إنشاء اتصال P2P بين الأجهزة الموجودة خلف NAT (Network Address Translation). بدون آليات خاصة، لا يمكن للأجهزة الوصول مباشرة إلى بعضها البعض لأن عناوين IP المحلية الخاصة بها غير مرئية من الإنترنت.
STUN (Session Traversal Utilities for NAT) — خادم يجيب على سؤال «ما هو عنوان IP والمنفذ العامين لي؟». يرسل العميل طلبًا إلى خادم STUN، ويرى الخادم عنوانه العام ويعيده إلى العميل. تدير Google علنًا خادم STUN stun:stun.l.google.com:19302.
// 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 (Traversal Using Relays around NAT) — خادم ترحيل للحالات التي لا يساعد فيها STUN (NAT المتماثل أو جدران الحماية المؤسسية). في هذا الوضع، تمر جميع البيانات عبر خادم TURN — مما يقلل السرعة ويزيد زمن الاستجابة، لكنه يضمن اتصالاً في 99% من الحالات.
TURN هو المكون الأكثر تكلفة في بنية WebRTC التحتية، حيث يمرر الخادم كل حركة مرور الوسائط من خلاله. وفقًا لـ Coturn Project (2025)، يعالج خادم TURN النموذجي المزود بـ 8 vCPU و16 جيجابايت من RAM حوالي 200 مكالمة صوتية متزامنة أو 40 مكالمة فيديو بدقة HD.
يجمع ICE جميع المرشحين الممكنين (IP المحلي، IP العام عبر STUN، الترحيل عبر TURN) ويحاول إنشاء اتصال بترتيب الأولوية. بمجرد اجتياز زوج واحد على الأقل من المرشحين (محلي-بعيد) فحص الاتصال، يعتبر الاتصال قد تم إنشاؤه.
للتطوير المحمول، تحتفظ Google بمكتبة libWebRTC — مكتبة أصلية لنظام Android (AAR) وiOS (XCFramework). تتضمن المكتبة مجموعة البروتوكولات الكاملة، والترميزات (VP8، VP9، H.264، AV1) والتسريع العتادي للترميز وفك الترميز.
يوفر Android SDK الفئات PeerConnectionFactory وPeerConnection وMediaStream. ينشئ التطبيق مصنعًا، ويكون ترميزات الفيديو، ويلتقط تيار الكاميرا عبر VideoCapturer وينشئ اتصال النظير عبر SDP offer/answer.
// 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();
يستخدم iOS SDK واجهة برمجة تطبيقات Objective-C مع أغلفة RTCPeerConnectionFactory وRTCCameraVideoCapturer وRTCVideoTrack. الترميز العتادي H.264 متاح عبر VideoToolbox. لعرض الفيديو، يُستخدم RTCMTLVideoView (Metal) أو RTCVideoRenderer.
// 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، يبدأ كل نظير ICE ويطلق DTLS-SRTP لتشفير التيار.
// 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) تقوم بتوجيه الرسائل بين المشاركين في الغرفة.
بعد اكتمال ICE وDTLS-SRTP، لم تعد الإشارات تشارك في نقل البيانات — كل حركة مرور الوسائط تتدفق مباشرة P2P (أو عبر مرحل TURN). يمكن إيقاف تشغيل خادم الإشارات دون مقاطعة المكالمات النشطة. هذه هي الميزة الرئيسية لـ البنية اللامركزية لـ WebRTC.
الأسئلة الشائعة
RTMP وHLS هما بروتوكولات خادم بزمن استجابة 3-10 ثوانٍ، حيث تمر جميع البيانات عبر الخادم. WebRTC هو نظير إلى نظير بزمن استجابة 200-500 مللي ثانية. RTMP مناسب للبث لجماهير كبيرة، WebRTC للمكالمات التفاعلية والألعاب.
لا، TURN مطلوب فقط للحالات التي لا يعمل فيها P2P (NAT المتماثل، جدران الحماية المؤسسية). وفقًا لإحصائيات Google، حوالي 15% من الاتصالات تتطلب TURN. للإنتاج، يُوصى بوجود خادم TURN كخيار احتياطي لموثوقية 100%.
الترميزات الإلزامية: VP8 (جميع المنصات) وH.264 (مع تسريع عتادي على iOS/Android). اختيارية: VP9 (ضغط أفضل، معدل بت أقل) وAV1 (فعال للغاية لكنه مكثف للمعالج). الصوت: Opus (رئيسي) وG.711 (PCMU/PCMA).
نعم، عبر RTCDataChannel. إنها قناة كاملة لنقل البيانات التعسفية: نص وملفات ورسائل ثنائية. يعمل DataChannel فوق SCTP بموثوقية قابلة للتكوين (توصيل موثوق جزئيًا للألعاب، موثوق للملفات).
عبر واجهة برمجة تطبيقات MediaRecorder على العميل أو عبر SFU (Selective Forwarding Unit) — خادم يستقبل جميع تيارات المشاركين ويمكنه تسجيلها. الخيار الثاني أكثر موثوقية لأن التسجيل لا يعتمد على جهاز المشارك ولا يتقطع عند قطع الاتصال.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.