WebRTC چیست؟ معماری، STUN/TURN، امنیت و مقیاس‌پذیری

دموی تماس تصویری بین دو لپ‌تاپ روی یک Wi‑Fi در پنج دقیقه کار می‌کند؛ Production جایی است که یک کاربر پشت CGNAT موبایل، دیگری در شبکه سازمانی با UDP بسته، نفر سوم روی Safari و Recording در Region دیگری است. اگر TURN، State machine، کیفیت و هزینه از ابتدا قرارداد نشده باشند، «Connected» هم می‌تواند تماس بی‌صدا، Relay گران یا جلسه‌ای غیرقابل بازیابی باشد.

WebRTC فقط RTCPeerConnection نیست؛ یک سیستم رسانه بلادرنگ شامل Identity، Room، Signaling، ICE/STUN/TURN، Media topology، Codec، Permission، رمزنگاری، Observability و Operations است. این راهنما توضیح می‌دهد WebRTC چیست و چگونه برای تماس تصویری، کلاس آنلاین، پشتیبانی و Data Channel در شرایط واقعی کاربران ایرانی طراحی، تست و اداره می‌شود.

خلاصه اجرایی WebRTC در Production

تصمیمپاسخ کوتاهشاهد لازم
آیا همیشه P2P است؟خیر؛ مسیر می‌تواند Direct، TURN یا SFU باشدSelected candidate pair و topology
STUN کافی است؟خیر؛ برای بخشی از شبکه‌ها Relay لازم می‌شودRelay-only test و failure rate
تماس گروهی چگونه؟معمولاً SFU؛ گاهی Mesh یا MCUParticipant/device/layout/recording model
آیا رمزنگاری سرتاسری است؟هر PeerConnection رمزنگاری دارد؛ E2EE گروهی قرارداد جداستTrust boundary و key management
کیفیت خوب چیست؟Join سریع، Media پیوسته، Task موفقgetStats + QoE event + user outcome
هزینه اصلی کجاست؟TURN/SFU Egress، media compute، recording و operationsدقیقه/شرکت‌کننده، bitrate و relay share
Build یا Buy؟براساس time-to-value، data، TCO و exitPilot چندشبکه‌ای و export/rebuild drill

WebRTC چیست و چه چیزی را تحویل نمی‌دهد؟

Web Real‑Time Communication مجموعه APIها و پروتکل‌های استاندارد برای صدا، ویدئو و داده کم‌تأخیر در Browser و App است. استاندارد WebRTC در W3C APIهایی مانند RTCPeerConnection، Sender/Receiver/Transceiver، SDP negotiation و Statistics model را تعریف می‌کند.

WebRTC یک سرویس کامل تماس نیست. این موارد همچنان مالک و Backend می‌خواهند:

  • Account، Identity، Session و مجوز Room؛
  • Signaling transport و ترتیب پیام؛
  • صدور Credential برای TURN/SFU؛
  • Presence، نقش Host/Guest/Moderator و Waiting room؛
  • Recording، Transcription، Retention و Consent؛
  • Abuse prevention، Observability، Billing و Support؛
  • Deployment، Compatibility، Failover و Rollback.

مرز مقاله: معماری Media session، نه Backend یا Monitoring عمومی

این مقاله مالک مسیر Join→Negotiate→Connect→Adapt→Recover→Leave است. برای قرارداد عمومی Signaling/API به راهنمای API قابل‌اعتماد، برای Authentication/Authorization و Abuse به راهنمای امنیت API و برای Telemetry architecture به راهنمای Observability سایت مراجعه کنید.

قرارداد جلسه WebRTC را قبل از انتخاب SDK بنویسید

فیلدنمونه تصمیمچرا
Use caseپشتیبانی یک‌به‌یک، کلاس ۱۲نفره، WebinarTopology و QoE فرق دارد
ParticipantHost، speaker، viewer، moderatorPublish/subscribe/record permission
Mediaaudio، camera، screen، dataCodec/bitrate/device budget
Qualityjoin p95، freeze، audio gap، recoverySLO قابل اندازه‌گیری
PrivacyE2EE، recording، retention، regionTrust boundary و vendor eligibility
Scaleهم‌زمانی، room size، active speakerSFU/TURN capacity و Egress
Continuityreconnect، region fail، fallback audioRunbook و product state
Exitrecording/export/protocol/client portabilityوابستگی فروشنده و مهاجرت

«تماس تصویری باکیفیت» Requirement نیست. مثلاً برای مشاوره فروش، Audio continuity و زمان اتصال شاید از 1080p مهم‌تر باشد؛ برای Screen share متن، وضوح و Freeze از Frame rate مهم‌تر است.

نقشه اجزای WebRTC

جزءمسئولیتFailure نمونه
App/APIIdentity، Room، Role، TokenJoin غیرمجاز یا Session منقضی
SignalingOffer/Answer/Candidate/controlترتیب، duplicate، reconnect، glare
ICE/STUN/TURNیافتن مسیر قابل استفادهUDP block، credential، relay saturation
Peer/SFU/MCUانتقال/forward/mix رسانهpacket loss، overload، region fail
Capture/Renderdevice، permission، encode/decodebusy device، thermal، autoplay
Recording/AIذخیره، transcription، moderationconsent، key access، incomplete file
Telemetryquality، event، trace، costhigh-cardinality، missing client data

سه API اصلی و قرارداد هرکدام

MediaDevices و getUserMedia

navigator.mediaDevices.getUserMedia() با Permission کاربر Track صوتی/تصویری می‌گیرد. Constraint یک درخواست ترجیح/الزام است؛ موفقیت آن تضمین کیفیت نیست. Media Capture and Streams در W3C الگوریتم Permission، Device و Track را تعریف می‌کند.

RTCPeerConnection

Offer/Answer، Transceiver، Codec negotiation، ICE، DTLS-SRTP، Track event، Data channel و Stats را مدیریت می‌کند. نام PeerConnection به معنی مسیر فیزیکی مستقیم نیست.

RTCDataChannel

داده را با SCTP روی DTLS منتقل می‌کند. Ordered/Unordered و سیاست Retransmission قابل تنظیم‌اند. RFC ۸۸۳۱ برای WebRTC Data Channels مدل Transport را توضیح می‌دهد؛ App هنوز باید Message schema، size، backpressure، retry، idempotency و authorization را تعریف کند.

چرخه برقراری تماس از Join تا First media

  1. Client Session معتبر می‌گیرد و Room/Role مجاز می‌شود.
  2. App با توضیح Context از کاربر Permission می‌خواهد.
  3. PeerConnection با ICE server policy ساخته و Track/Transceiver اضافه می‌شود.
  4. Offer/Answer و ICE generation در Signaling مبادله می‌شوند.
  5. Trickle candidateها هم‌زمان جمع و ارسال می‌شوند.
  6. ICE candidate pairها را Check و یک Pair را nominate/select می‌کند.
  7. DTLS handshake و SRTP keying انجام می‌شود.
  8. Media/Data جریان می‌یابد و First audio/video/render ثبت می‌شود.
  9. Congestion control و SFU subscription کیفیت را تطبیق می‌دهند.
  10. Disconnect/network change با ICE restart یا reconnect مدیریت می‌شود.

برای UX، «دکمه Join فشرده شد» با «صدا دوطرفه شد» فرق دارد. milestoneهای permission requested/granted، signaling ready، ICE connected، first packet، first decoded frame و first audible audio را جدا ثبت کنید.

Signaling: پروتکل تعریف‌نشده، مسئولیت حذف‌نشده

WebRTC Transport سیگنالینگ را تحمیل نمی‌کند؛ WebSocket، HTTP، SSE یا کانال دیگری ممکن است. هر پیام باید Envelope نسخه‌دار داشته باشد:

{
  "schema": "rtc.signal.v3",
  "room_id": "opaque-room-id",
  "participant_id": "opaque-user-id",
  "connection_id": "pc-unique-id",
  "ice_generation": 4,
  "seq": 18,
  "type": "candidate",
  "sent_at": "2026-08-10T12:00:00Z",
  "payload": {}
}

Room ID را Secret فرض نکنید. Backend باید Join/Publish/Subscribe/Record/Moderate را جدا authorize، Token کوتاه‌عمر صادر، Size/Rate را محدود و پیام نامعتبر را بدون Crash رد کند.

Ordering، Duplicate و Reconnect

یک WebSocket تا زمان اتصال Order دارد؛ reconnect، چند Tab، retry و failover می‌توانند پیام دیررس یا duplicate بسازند. connection_id، ice_generation و seq جلوی Candidate مربوط به Session قدیمی را می‌گیرند. Eventهای کسب‌وکار مانند Start recording باید idempotency key داشته باشند.

Perfect Negotiation و Glare

وقتی دو طرف هم‌زمان Offer می‌سازند Glare رخ می‌دهد. Pattern مشهور Perfect Negotiation به Peerها نقش Polite/Impolite می‌دهد تا یکی collision را rollback و دیگری Offer خود را حفظ کند. State machine باید makingOffer، signalingState، ignored offer و Candidate مربوط به Offer ردشده را مدیریت کند؛ Timeout یا «اگر خطا شد دوباره Offer بساز» راه‌حل پایدار نیست.

ICE، STUN و TURN دقیقاً چه می‌کنند؟

RFC ۸۴۴۵ برای ICE Candidateها را جمع، Pair می‌کند، Connectivity check می‌زند و مسیر قابل استفاده را nominate می‌کند. STUN در RFC 8489 آدرس Reflexive دیده‌شده از بیرون را آشکار می‌کند؛ TURN در RFC 8656 Relay allocation می‌دهد.

Candidateمنبعمعنا
HostInterface محلی/mDNSمسیر شبکه محلی یا مستقیم قابل دسترس
Server-reflexiveSTUN mappingآدرس/Port دیده‌شده پشت NAT
Peer-reflexiveConnectivity checkMapping کشف‌شده در مسیر
RelayTURN allocationPacket از Relay عمومی عبور می‌کند

STUN رله و «سرور تماس» نیست

STUN معمولاً برای ساخت Server-reflexive candidate است؛ Media بعد از انتخاب Pair از STUN server عبور نمی‌کند. «STUN وصل است» اثبات نمی‌کند تماس در شبکه محدود وصل می‌شود.

TURN بیمه اتصال و یک مسیر Media واقعی است

وقتی مسیر مستقیم ممکن یا مجاز نیست، Relay candidate می‌تواند برنده شود. در این حالت کل Packet مربوط از TURN عبور می‌کند؛ ظرفیت، Latency، Egress و Abuse سطح Production دارند. حذف TURN یعنی پذیرفتن Failure برای Population نامعلوم، نه صرفه‌جویی تضمینی.

Trickle ICE زمان اتصال را کوتاه می‌کند، اما Generation می‌خواهد

RFC ۸۸۳۸ برای Trickle ICE Candidateها را به‌صورت افزایشی هم‌زمان با Gathering و Check مبادله می‌کند. Signaling باید Candidate و end-of-candidates را به ICE session درست نسبت دهد؛ Candidate دیررس Generation قبلی نباید وارد Restart جدید شود.

TURN Production contract

حوزهقراردادتست
TransportUDP primary + TCP/TLS fallback بر پایه نیازrelay-only هر Transport/ISP
Credentialکوتاه‌عمر، scoped، بدون Secret ثابت در JSexpiry/replay/leak
NetworkIPv4/IPv6، port range، DNS، certexternal probe
Capacityallocation، bps، concurrent session، headroomload/soak/saturation
Abuserealm/user/rate/quota/egress anomalycredential theft simulation
Regionplacement، steering، health، drainregion loss/failover
Observabilityallocation/error/transport/bytes/latencyalert/runbook

TURN را فقط با تماس Direct تست نکنید

یک تست خودکار با iceTransportPolicy: "relay" باید روزانه از شبکه‌های نماینده اجرا شود. UDP، TCP و TLS، Credential جدید/منقضی، IPv4/IPv6 و Region fail را جدا بسنجید. Relay-only یک Diagnostic است؛ Policy عمومی را بدون نیاز روی Relay قفل نکنید.

فرمول ظرفیت و هزینه Relay

مدل ساده برای یک تماس یک‌به‌یک Relayشده:

TURN transferred bytes ≈
  sum(media bitrate in both directions)
  × call seconds
  ÷ 8
  × protocol/overhead factor

در عمل Audio/Video/RTX/FEC/Simulcast، تغییر Bitrate و قیمت Egress هر Region را از Metric واقعی بگیرید. KPIهای مفید:

  • Relay share بر ISP/Browser/Region/Release؛
  • Transferred GB به‌ازای participant-minute؛
  • Allocation success و setup latency؛
  • TURN transport mix: UDP/TCP/TLS؛
  • Peak concurrent allocations و headroom؛
  • Cost per successful room-minute.

کاهش Relay share هدف مطلق نیست؛ اگر Direct path ناپایدار باشد، هزینه کمتر و Failure بیشتر یک بهینه‌سازی ناموفق است.

Mesh، SFU و MCU؛ Topology براساس Workload

RFC ۷۶۶۷ درباره RTP Topologies واژگان Point-to-point، Translator و Mixer را روشن می‌کند. اصطلاح‌های محصولی Mesh/SFU/MCU را با رفتار واقعی Media server تطبیق دهید.

Topologyرفتارمزیتمحدودیت
Meshهر Client به Clientهای دیگر Stream می‌دهدسرور Media کمتر، شروع سادهUpload/encode/decode با N رشد می‌کند
SFUStream/Layerها را انتخاب و Forward می‌کندگروه، simulcast/SVC، latency مناسبEgress، subscription، availability
MCU/MixerDecode/compose/re-encodeClient ضعیف، layout/interop خاصCPU، latency، کیفیت و هزینه
Broadcast pipelineWebRTC ingest سپس HLS/DASH/CDNViewer بسیار زیادLatency بیشتر و معماری دوگانه

Full Mesh را با فرمول Client budget بسنجید

در Mesh، N−۱ مسیر outbound/inbound ممکن است؛ اما Simulcast، Track count و mute رفتار را عوض می‌کند. Upload ضعیف موبایل و Encode هم‌زمان معمولاً زودتر از CPU سرور محدود می‌شوند. Room-size cutoff را از تست دستگاه/شبکه خودتان بگیرید.

SFU یک Forwarder ساده بدون State نیست

SFU باید Publisher/Subscriber، Layer، keyframe request، bandwidth estimate، active speaker، pause/resume و region routing را مدیریت کند. Failure آن چندین Participant را هم‌زمان متاثر می‌کند. Capacity per node، drain، rolling upgrade و room placement باید Runbook داشته باشند.

MCU را برای «کیفیت بهتر» انتخاب نکنید

Mixing می‌تواند بار Client یا تعداد Stream را کم کند، اما Re-encode latency و افت کیفیت دارد. Recording ترکیبی، Endpoint قدیمی یا Client بسیار ضعیف دلیل قابل‌آزمون‌اند؛ نام معماری دلیل نیست.

SFU چندمنطقه‌ای: Room را وسط تماس جابه‌جا نکنید مگر طراحی شده باشد

Geo steering باید قبل از Join و براساس Participant distribution، latency، capacity، data policy و failure domain تصمیم بگیرد. جابه‌جایی Room فعال میان SFUها پیچیده است؛ Track identity، sequence، keyframe، subscription و recording continuity باید حفظ شود.

  • Room affinity و placement version ثبت کنید.
  • Region drain پیش از Deploy/maintenance داشته باشید.
  • Failure را به reconnect همان Region محدود نکنید؛ alternate plan تعریف کنید.
  • برای تماس حساس، fallback صوتی یا rejoin سریع بسازید.
  • Cross-region Egress و latency را در TCO ببینید.

امنیت WebRTC لایه‌به‌لایه

RFC ۸۸۲۷ معماری امنیت WebRTC رمزنگاری Media با SRTP/SRTCP و Data channel با DTLS را الزام می‌کند. این پایه مهم است، اما امنیت محصول موارد بیشتری دارد:

لایهکنترلریسک باقیمانده
OriginHTTPS، CSP، dependency integrityXSS با دسترسی به Session/permission
Identityauth، session، MFA متناسبaccount takeover
Roomjoin/publish/subscribe/record authorizationIDOR/role escalation
SignalingWSS، schema، rate، replay/idempotencyDoS/state desync
TURN/SFUshort credential، quota، network policyrelay abuse/insider/server compromise
MediaDTLS-SRTP یا SFrame E2EEmetadata/key endpoint risk
Recordingconsent، encryption، access، retentionexport/share/transcription vendor

برای Resource/Policy/Enforcement و Service identity، راهنمای Zero Trust را به معماری Media اضافه کنید.

DTLS-SRTP با E2EE گروهی یکی نیست

اگر PeerConnection کاربر در SFU خاتمه یابد، Transport encryption نیز در SFU terminate می‌شود. برای اینکه SFU Payload Media را نبیند، رمزنگاری Frame-level و Key management بین Endpointهای مجاز لازم است.

RFC ۹۶۰۵ برای SFrame مکانیزم رمزنگاری و Authentication فریم در تماس چندنفره با SFU را تعریف می‌کند. WebRTC Encoded Transform در ۲۱ مه ۲۰۲۶ هنوز Working Draft مسیر Recommendation است؛ Browser support و API stability را در Snapshot پروژه بررسی کنید.

E2EE contract فقط Algorithm نیست

  • چه کسی Participant identity را تأیید می‌کند؟
  • کلید چگونه ساخته، توزیع، rotate و revoke می‌شود؟
  • Join/leave چگونه Epoch جدید می‌سازد؟
  • Multi-device و recovery چه می‌شوند؟
  • Recording/transcription/moderation با E2EE سازگار است یا Endpoint مجاز می‌خواهد؟
  • Metadata، اندازه، timing و participant graph چه مقدار قابل مشاهده‌اند؟

Badge «رمزنگاری‌شده» باید دقیقاً بگوید Transport encryption است یا Participant-verified E2EE.

Permission و Device privacy

getUserMedia در Secure Context است و Browser Permission می‌گیرد. تجربه امن:

  • Prompt را پس از اقدام معنادار و با توضیح علت نشان دهید.
  • Audio-only و Join بدون دوربین را در صورت امکان فراهم کنید.
  • Deny، dismiss، device busy، no device و constraint failure را جدا پیام دهید.
  • Mute UI را با Track/Server state همسو نگه دارید.
  • هنگام Leave Trackها را stop و indicator را آزاد کنید.
  • iframe را با Permissions Policy و allow محدود کنید.
  • Device label/ID، IP-derived data و Stats را حداقل و زمان‌دار نگه دارید.

بودجه Storage/Consent/Vendor/Incident را برای Recording و Telemetry در راهنمای بودجه حریم خصوصی داده بسنجید. الزامات حقوقی بازار هدف را با مشاور مربوط تأیید کنید.

Codec policy: Capability، Content و Device

MediaCandidateتصمیم
Speech/audioOpusbitrate/FEC/DTX و موسیقی یا گفتار
Camera videoVP8/H.۲۶۴/VP9/AV1 حسب supporthardware encode/decode، battery، interop
Screen shareCodec + contentHint متناسبtext sharpness در برابر motion/fps
Mobile low-endhardware-friendly profilethermal، encode time، battery
Recordingingest/transcode strategycontainer، seek، cost، playback support

Codec را صرفاً با compression efficiency انتخاب نکنید. Browser/OS/hardware، SFU capability، E2EE transform، Recording و patent/licensing review ممکن است نتیجه را تغییر دهند. Capability detection و fallback لازم‌اند.

Simulcast، SVC و Subscription adaptation

Simulcast چند Encoding مستقل می‌فرستد؛ SVC در یک Bitstream Layerهای زمانی/فضایی/کیفی دارد. SFU می‌تواند براساس Tile، visibility، active speaker، bandwidth و device Layer مناسب را Forward کند.

کنترلسودهزینه
Simulcast layersانتخاب سریع کیفیت per subscriberupload/encode sender بیشتر
SVCLayering کارآمد در Codecهای پشتیبانinterop/implementation complexity
Pause offscreendecode/network کمترresume/keyframe latency
Active speaker high layerکیفیت جایی که دیده می‌شودspeaker detection و churn
Screen priorityمتن خواناترcamera quality tradeoff

هر adaptation باید hysteresis داشته باشد تا با نوسان شبکه میان Layerها پرش نکند.

RTCDataChannel: کم‌تأخیر به معنی بدون محدودیت نیست

برای Cursor، game state، whiteboard، chat control یا فایل می‌تواند مفید باشد. قرارداد پیشنهادی:

  • Channel purpose و schema/version؛
  • Ordered/unordered و maxRetransmits/maxPacketLifeTime؛
  • حد اندازه پیام و chunking؛
  • bufferedAmount و bufferedAmountLowThreshold برای backpressure؛
  • authorization مستقل از اتصال؛
  • dedupe/idempotency برای command؛
  • fallback server path برای state حیاتی؛
  • resume/reconciliation پس از reconnect.

State کسب‌وکار مهم را فقط در Peerها نگه ندارید؛ قطع هر دو Peer نباید Truth سفارش یا سند را نابود کند.

WebRTC، WebSocket و WebTransport

فناوریمدلکار اصلی
WebRTC Mediareal-time media + congestion controlaudio/video/screen
RTCDataChannelPeerConnection/SCTP/DTLSpeer data با reliability قابل تنظیم
WebSocketClient-server روی TCPsignaling، presence، command
WebTransportClient-server stream/datagram روی HTTP/۳server data کم‌تأخیر
HTTPrequest/responseauth، room API، upload، export

این‌ها جایگزین مطلق نیستند. برای مبانی QUIC/HTTP/۳ و محدودیت شبکه، راهنمای HTTP/۳ و QUIC مرز Transport را روشن می‌کند.

Recording، Transcription و Live streaming

روشمزیتFailure/Tradeoff
Client recordingserver ساده‌تر، E2EE endpoint ممکنtab close، sleep، storage، upload ناقص
SFU egress/recordکنترل و فایل پایدارترmedia access، compute، data governance
Composite/MCUفایل آماده با layoutre-encode، کیفیت، CPU
Individual tracksedit/transcription انعطاف‌پذیرفایل/همگام‌سازی بیشتر
WebRTC→HLS/DASHviewer scale با CDNlatency و pipeline دوم

Start/stop recording یک Event امنیتی و حقوقی است: consent indicator، owner، retention، encryption at rest، signed URL، audit، delete/export و incomplete-file recovery لازم‌اند. E2EE ممکن است Server transcription را عمداً غیرممکن کند.

Observability: State «connected» SLI کیفیت نیست

getStats() Counter و Gaugeهای مرتبط با Transport/Codec/RTP می‌دهد. WebRTC Statistics API در W3C شناسه‌ها و Semantics را تعریف می‌کند. Counterها را با Delta و بازه زمانی تحلیل کنید؛ مقدار تجمعی خام با Rate برابر نیست.

لایهMetricتفسیر
Joinpermission/signaling/ICE/first media timeمرحله کند یا fail
NetworkRTT، jitter، loss، candidate typeمسیر و congestion
Senderbitrate، fps، encode time، quality limitationCPU/bandwidth pressure
Receiverjitter buffer، decode/drop/freezeplayout experience
SFUsubscription/layer/NACK/PLI/egressforwarding و adaptation
Productrejoin، mute confusion، task success، ratingQoE واقعی
Costrelay/SFU GB و compute per room-minuteunit economics

Metric cardinality و Privacy را کنترل کنید

Raw SDP، IP، Device label و Room/User ID را بی‌دلیل در Log نریزید. شناسه Opaque، sampling، aggregation، retention و access تعریف کنید. برای Debug نمونه، consent/policy و redaction داشته باشید.

QoE و SLO: کیفیت را از دید Task تعریف کنید

SLIتعریف نمونهSegment
Join successfirst two-way media / eligible joinISP/browser/device/region
Join timeuser intent تا first usable media p50/p95direct/relay/SFU
Audio continuitygap/concealment یا user-reported issuenetwork/codec
Video continuityfreeze/dropped/decoded frametile/device/layer
Recoverynetwork change تا usable mediaICE restart/reconnect
Room completionجلسه بدون rejoin/abandonroom size/use case
Costinfra cost / successful participant-minuteregion/topology

Threshold را از Baseline و User research بسازید. یک MOS تخمینی یا RTT ثابت «حقیقت کیفیت» نیست؛ Audio intelligibility، Screen readability و Task success را هم ببینید.

Trace یک تماس را End-to-end کنید

یک call_attempt_id Opaque باید Client event، Signaling، token issuance، TURN allocation، SFU room، recording و support incident را بدون ذخیره Payload حساس به هم وصل کند. Timeline نمونه:

  1. join_clicked
  2. permission_resolved
  3. signal_connected
  4. offer/answer applied
  5. ice_checking/connected
  6. dtls_connected
  7. first_inbound_audio/video
  8. quality_degraded/recovered
  9. leave/failed/rejoined

Clock skew، event loss و sampling را در تحلیل در نظر بگیرید.

عیب‌یابی از Symptom به Layer

نشانهفرضیه‌هااولین شواهد
Join failauth/room/token/signalingAPI status، close code، role
ICE failcandidate/order/TURN/DNS/firewallICE state، candidate pair، TURN logs
Connected بدون Mediatrack/transceiver/codec/autoplay/mutesender/receiver stats و element state
One-way audiodirection، device، route، permissionoutbound/inbound RTP delta
افت بعد چند دقیقهthermal، leak، congestion، TURN/SFU loadencode time، memory، loss، node saturation
فقط ISP خاصUDP/IPv6/route/MTU/TLS fallbacktransport mix و synthetic probe
بعد DeploySDP/schema/codec/flag incompatibilityrelease cohort و error diff

Runbookهای ضروری

  • TURN region down یا certificate/credential failure؛
  • SFU node saturation و room drain؛
  • Signaling disconnect storm؛
  • Browser release و Codec/permission regression؛
  • Recording backlog/storage failure؛
  • Telemetry loss یا high-cardinality bill؛
  • Abuse/credential leak/room enumeration؛
  • Vendor/region inaccessible برای کاربران ایران.

برای Synthetic probe، escalation و Incident lifecycle به راهنمای مانیتورینگ آپتایم مراجعه کنید.

تست Matrix برای ایران

بعدحداقل پوششهدف
ISPموبایل چند اپراتور + اینترنت ثابت + شبکه سازمانیUDP/TCP/TLS و route
IPCGNAT، IPv4، IPv6 در صورت دسترسcandidate و fallback
DeviceAndroid ضعیف، iPhone، DesktopCPU/thermal/battery/permission
BrowserChrome/Firefox/Safari/WebView در supportinterop/codec/API
Network eventWi‑Fi↔mobile، loss، latency، offline/returnICE restart/recovery
Topologydirect، relay-only، SFU room sizeconnectivity/quality/cost
Mediaaudio، camera، screen، mute/device changetask correctness
Failureregion/node/token/cert/recording lossrunbook/rollback

VPN را اگر در Population واقعی وجود دارد Segment جدا کنید؛ نتیجه VPN یا تهران را به کل ایران تعمیم ندهید. وضعیت Vendor eligibility، پرداخت، داده، Support و مسیر شبکه را با تاریخ Snapshot ثبت کنید.

تست‌های خودکار و دستی پیش از انتشار

  • Unit: signaling reducer، policy، cost formula و stats delta؛
  • Contract: message schema/version، token claims، webhook/recording event؛
  • Browser integration: offer/answer، glare، trickle، ICE restart، data backpressure؛
  • Media fixture: synthetic audio/video برای packet/freeze validation؛
  • Interop: Browser/OS/codec matrix؛
  • Network emulation: loss/jitter/latency/bandwidth/UDP block؛
  • Load/soak: signaling/TURN/SFU/recording و جلسه طولانی؛
  • Security: room IDOR، token replay، rate/size، credential leak؛
  • Accessibility: keyboard، focus، captions، status و error؛
  • Chaos: node/region/certificate/vendor failure.

انتشار امن WebRTC و سازگاری نسخه‌ها

Client قدیمی ممکن است هم‌زمان با Signaling/SFU جدید فعال باشد. Protocol version، feature capability و backward-compatibility window لازم‌اند.

  1. Schema و SDP-affecting change را version کنید.
  2. Capability negotiation را از User-agent sniff جدا نگه دارید.
  3. Deploy را با internal room و synthetic call شروع کنید.
  4. Canary را بر Region/room cohort کوچک اجرا کنید.
  5. Join/QoE/error/cost Guardrail را قبل از ramp بررسی کنید.
  6. SFU nodeها را drain و سپس upgrade کنید.
  7. Client/server/flag rollback و room recovery را تمرین کنید.

برای Provenance، staged rollout و rollback به راهنمای CI/CD امن مراجعه کنید.

مدل TCO هر participant-minute

سرفصلDriverشاهد
Signaling/APIconnection/event/requestusage و peak
TURNrelay share × bitrate × durationallocation/bytes
SFUpublisher/subscriber/layer/egressnode/room metrics
MCU/transcodeencode/decode/compositionCPU/GPU minute
Recordingtrack/compose/storage/egressGB/minute/retention
Observabilityevent/stats/cardinality/retentioningest/storage/query
Engineering/Opsinterop/SRE/security/supporton-call/incident/change
Vendor/FXseat/minute/egress/region/exchangedated quote/eligibility
Exitmigration/rebuild/export/dual rundrill estimate

سناریوی Low/Base/Peak و Direct/Relay/SFU را جدا کنید. هزینه هر دقیقه تماس ناموفق را نیز حساب کنید؛ Infrastructure ارزان با Join failure بالا ارزان نیست.

Build، Open-source یا CPaaS مدیریت‌شده؟

گزینهمناسب وقتیریسک
Managed CPaaSزمان کم، تیم Media کوچک، feature استانداردusage cost، vendor/data/exit
Open-source SFU managed by teamکنترل/سفارشی‌سازی و SRE داریدupgrade/region/interop/on-call
Build coreنیاز متمایز و ظرفیت تخصصی پایدارزمان، استاندارد، security، operations
Hybridمسیر حساس داخلی و burst/vendor fallbackparity/routing/dual TCO

Vendor scorecard

  • Browser/mobile SDK و release cadence؛
  • TURN/SFU region و داده واقعی مسیر ایران؛
  • E2EE/SFrame/key ownership؛
  • Recording/transcription/data retention؛
  • QoE stats/export/raw events و limits؛
  • ۹۹.x SLA با exclusionها، support و incident history؛
  • Pricing egress/minute/recording/overage/FX؛
  • Room/recording/config export و exit assistance؛
  • Eligibility، پرداخت و continuity برای کسب‌وکار ایرانی.

Pilot ۳۰روزه WebRTC

بازهخروجیشرط عبور
روز ۱–۵Session contract، threat/data map، SLO و topology candidatesUse case و trust boundary روشن
روز ۶–۱۰Signaling schema/state + TURN relay-onlyglare/reconnect/credential tests پاس
روز ۱۱–۱۵SFU/codec/adaptation و getStats pipelinefirst media/QoE trace کامل
روز ۱۶–۲۰ایران ISP/device/browser/network matrixjoin/recovery و known limits ثبت
روز ۲۱–۲۵load/soak/chaos/security/privacy/recordingcapacity/runbook/retention تأیید
روز ۲۶–۳۰Canary، TCO، vendor/build scorecard و exit drillguardrail، rollback و decision record

خطاهای رایج WebRTC

  • فرض P2P همیشگی و حذف TURN؛
  • استفاده از RFC/پیکربندی قدیمی TURN بدون auth/abuse/capacity؛
  • Secret یا Credential بلندمدت در JavaScript؛
  • نداشتن generation/seq و state machine برای glare/reconnect؛
  • Full Mesh براساس Demo سه‌نفره؛
  • یکی‌دانستن DTLS-SRTP با E2EE چندنفره؛
  • E2EE بدون identity/key/recording contract؛
  • Hardcode یک Codec یا Resolution برای همه Deviceها؛
  • DataChannel بدون backpressure و reconciliation؛
  • مانیتورینگ فقط CPU سرور یا فقط state=connected؛
  • ندیدن Relay/SFU Egress و هزینه Recording؛
  • تست فقط Wi‑Fi دفتر و یک Browser؛
  • Deploy SFU بدون drain/canary/compatibility/rollback؛
  • ذخیره Raw SDP/IP/recording بدون Data governance.

چک‌لیست Production readiness

  • Session/role/media/quality/privacy/scale/exit contract نوشته شده است.
  • Signaling schema، order، duplicate، glare و reconnect تست شده‌اند.
  • ICE generation و Trickle end-of-candidates درست مدیریت می‌شوند.
  • TURN short credential، relay-only، IPv4/۶، transport و capacity پاس‌اند.
  • Topology/codec/simulcast/SVC بر Device/Network واقعی سنجیده شده‌اند.
  • Room/recording/TURN/SFU access و abuse controls حاضرند.
  • Transport encryption و E2EE claim دقیق و جدا هستند.
  • Permission/deny/mute/leave و recording consent قابل‌فهم‌اند.
  • getStats delta، QoE SLO، trace، privacy و cost dashboard فعال‌اند.
  • Iran ISP/device/browser/VPN segment و vendor eligibility ثبت شده‌اند.
  • Load/soak/chaos/security و region failure تمرین شده‌اند.
  • Canary، drain، rollback، export و exit drill انجام شده‌اند.

پرسش‌های متداول WebRTC

آیا WebRTC همیشه ارتباط مستقیم P2P دارد؟

خیر. ICE یک Candidate pair قابل استفاده را انتخاب می‌کند؛ مسیر می‌تواند مستقیم، Relayشده با TURN یا متصل به SFU/MCU باشد. نوع Selected candidate و topology را از Stats/Server telemetry ببینید، نه از نام PeerConnection.

تفاوت STUN و TURN چیست؟

STUN آدرس Reflexive دیده‌شده پشت NAT را آشکار می‌کند و Media را رله نمی‌کند. TURN Allocation و Relay candidate می‌دهد و در صورت انتخاب، Packetها از آن عبور می‌کنند؛ به همین دلیل ظرفیت، Egress، Authentication و Abuse مهم‌اند.

آیا WebRTC بدون سرور کار می‌کند؟

دموی محدود ممکن است با کمترین Backend دیده شود، اما محصول معمولاً به Web/API، Identity، Room، Signaling و STUN/TURN نیاز دارد. تماس گروهی نیز اغلب SFU/MCU و Recording/Observability می‌خواهد.

آیا رمزنگاری WebRTC همان E2EE است؟

هر PeerConnection باید Media/Data را در Transport رمزنگاری کند. اگر اتصال در SFU خاتمه یابد، Server می‌تواند Payload را ببیند؛ E2EE گروهی به Frame encryption مانند SFrame، Identity و Key management جدا نیاز دارد و با Recording/Moderation tradeoff دارد.

هزینه WebRTC چگونه محاسبه می‌شود؟

هزینه از Signaling، TURN relay، SFU egress/compute، MCU/transcode، Recording/storage، Observability، Engineering و Vendor/FX می‌آید. مدل را به participant-minute موفق، Bitrate، Relay share، room topology و Region بشکنید و Low/Base/Peak بسازید.

جمع‌بندی: WebRTC را به‌عنوان یک سرویس رسانه اداره کنید

موفقیت WebRTC با ایجاد Offer و دیدن تصویر خودتان ثابت نمی‌شود. باید نشان دهید کاربر واجد در شبکه و Device واقعی وصل می‌شود، Audio/Video قابل استفاده می‌ماند، Failure بازیابی می‌شود، دسترسی و Recording درست‌اند و هزینه هر participant-minute قابل پیش‌بینی است.

ترتیب عملی ماندگار این است: Session contract → Signaling state → ICE/STUN/TURN → Topology/Codec → Security/E2EE → Permission/Privacy → QoE/Cost telemetry → Iran matrix → Canary/Failover/Exit. با این ترتیب، Demo شکننده به یک قابلیت Production قابل‌دفاع تبدیل می‌شود.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *