احتمالاً الان توی خونت نشستی و داری این متن رو میخونی، در حالی که وسط هفتهست و همهی ما مشغول کاریم. دنیای کارهای اداری دیگه مثل قدیم نیست، اما یه چیزی همیشه ثابت میمونه، و اونم جلساته. هممون مجبوریم وقت بذاریم برای جلسات کاری، بحثای طولانی برای پروژههای جدید، یا حتی یه جلسهی آموزشی مهم دیگه. با داشتن یه وبکم خوب و یه هدفون، آمادهایم که بپریم توی جلسه!
بعد از کار، مثلاً مادر زن یا شوهر قراره آشپزخونهی نوسازیشدهشون رو بهت نشون بدن، اونم آنلاین! یا دوستای قدیمیت دارن با هم سریال میبینن و نوشیدنی میزنن، بازم آنلاین! خودت هم میخوای کلاس زبان فرانسوی بری تا برای سفرت به پاریس آماده بشی، اونم آنلاین برگزار میشه!
چند سال پیش اگه اینقدر وقت رو توی تماسهای آنلاین میگذروندی، احتمالاً سرت گیج میرفت! تصویرای بیکیفیت، صدای بد که هی قطع و وصل میشد و تأخیرهایی که کلافت میکرد. بیشتر از 15 دقیقه توی ویدیو چت موندن، شجاعت زیادی میخواست!
بحران همیشه باعث نوآوری میشه. توی این چند سال، هممون به طور فشرده یاد گرفتیم چطوری دائم توی تماسهای تصویری باشیم. اپلیکیشنهای VoIP قدیمی هم دیگه جوابگوی این حجم از استفاده نبودن. خوشبختانه، یه پروتکل به نام WebRTC داشت کمکم معروف میشد و حالا وقتش رسیده بود که امتحانش رو پس بده.
WebRTC کاملاً رایگان و متنبازه، و از انتقال صدا، تصویر و داده بهصورت نظیر به نظیر (P2P) پشتیبانی میکنه. این پروتکل میتونه ارتباطات بلادرنگ (Real-Time Communication) رو از طریق مرورگرها و اپلیکیشنها فراهم کنه. گستردگی این پروتکل روی تمام پلتفرمهای اصلی باعث شده که برنامهنویسا راحت بتونن ازش توی راهحلهای ارتباط صوتی و تصویری استفاده کنن.
اپلیکیشنهای WebRTC هیچ نیازی به پلاگینها یا نرمافزارهای جانبی ندارن. این تکنولوژی به راحتی میتونه توی هر وبسایتی به صورت مستقیم استفاده بشه. WebRTC بهصورت پیشفرض توی مرورگرهایی مثل گوگل کروم، موزیلا فایرفاکس، مایکروسافت اج، سافاری، اپرا و چندتا مرورگر محبوب دیگه اجرا میشه. و به لطف قابلیتهای P2P، سادهترین راهحلهای مبتنی بر WebRTC میتونن بهصورت مستقل و بدون نیاز به سرور اختصاصی کار کنن.
این پروتکل خیلی از اپلیکیشنهای ارتباطی محبوب رو به کار انداخته، مثلاً وقتی داری از Discord، Zoom، Google Meet یا فیسبوک مسنجر استفاده میکنی، داری WebRTC رو در عمل میبینی.
خب، حالا بریم ببینیم WebRTC API چطوری کار میکنه! این بخش یه مدل ذهنی بهت میده که همه چیز چطوری به هم وصل میشه. البته نگران نباش، اگه هنوز با پروتکل یا API آشنایی نداری، این قسمت میتونه بعداً وقتی بیشتر یاد گرفتی برات جذاب باشه.
اگه دوست داری بیشتر بدونی پروتکل چیه و چطور کار میکنه، حتماً این مقاله رو در مورد پروتکلها ببین.
یا اگه برات جالبه بدونی API دقیقاً چه داستانی داره، این مقاله درباره API رو از دست نده!
اولین قدم اینه که یه "جلسه WebRTC" ایجاد کنیم. این کار رو با استفاده از RTCPeerConnection انجام میدیم که همه پروتکلهای مربوط به WebRTC رو توی خودش داره. اما تا اینجای کار، هنوز اتفاق خاصی نیفتاده. فقط زیرسیستمها آماده میشن.
با addTrack میتونی یه استریم جدید RTP بسازی. وقتی این کار رو میکنی، یه شناسه تصادفی به نام SSRC (Synchronization Source) برای این استریم ساخته میشه. بعد، این استریم توی جلسهای که با createOffer ساخته شده، قرار میگیره. هر بار که addTrack رو صدا بزنی، یه SSRC جدید و یه بخش رسانهای جدید اضافه میشه.
به محض اینکه جلسه SRTP برقرار بشه، این بستههای رسانهای بهطور امن رمزگذاری میشن و از طریق ICE فرستاده میشن.
اگه بخوای داده هم بین دو کاربر منتقل کنی، createDataChannel رو صدا میزنی. این کار یه استریم SCTP جدید میسازه (البته اگه SCTP از قبل وجود نداشته باشه). SCTP بهطور پیشفرض فعال نیست و فقط وقتی شروع به کار میکنه که یه طرف درخواست یه کانال داده رو بده.
به محض اینکه جلسه DTLS برقرار بشه، استریم SCTP شروع میکنه به ارسال بستههای رمزگذاریشده از طریق ICE.
وقتی createOffer رو صدا میزنی، یه "توضیحات جلسه" برای وضعیت فعلی محلی ساخته میشه که باید با کاربر مقابلت به اشتراک بذاری. اما نگران نباش، صدا زدن createOffer هیچ تغییر مستقیمی برای خودت ایجاد نمیکنه.
حالا اگه بخوای تغییراتی که درخواست کردی رو اعمال کنی، باید setLocalDescription رو صدا بزنی. وقتی addTrack یا createDataChannel رو صدا میزنی، این تغییرات موقتی هستن تا زمانی که setLocalDescription اجرا بشه. بعد از این، معمولاً باید پیشنهادت رو برای کاربر مقابل بفرستی تا اون هم ازش استفاده کنه و setRemoteDescription رو صدا بزنه.
setRemoteDescription راهیه که اطلاعات کاربر مقابل راه دور رو به مرورگرت بگی. این مرحله همون فرآیند "سیگنالینگ" هست که با API جاوااسکریپت انجام میشه. وقتی setRemoteDescription از هر دو طرف صدا زده بشه، مرورگرها آماده هستن تا ارتباط نظیر به نظیر (P2P) رو شروع کنن!
اگه بخوای کاندیدای بیشتری به مرورگرت اضافه کنی، از addIceCandidate استفاده میکنی. این API کاندیدا رو مستقیماً وارد سیستم ICE میکنه و تأثیر دیگهای روی کل ارتباط WebRTC نداره.
وقتی یه بسته RTP از کاربر مقابل دریافت میکنی، ontrack یه callback هست که صدا زده میشه. این بستههای ورودی قبلاً توی توضیحات جلسهای که به setRemoteDescription داده شده بود، مشخص شدن. WebRTC از SSRC استفاده میکنه تا استریم و ترک مربوطه رو پیدا کنه و این callback رو با اطلاعات پر شده صدا بزنه.
این یکی هم یه callback هست که وقتی وضعیت اتصال ICE عوض میشه، اجرا میشه. اگه تغییری توی اتصال شبکت رخ بده، اینجا ازش باخبر میشی.
این callback ترکیبی از وضعیت ICE و DTLS رو نشون میده. اگه بخوای بفهمی که ICE و DTLS هر دو به خوبی تموم شدن یا نه، باید اینو تماشا کنی تا موقعی که موفقیتآمیز باشه، مطلع بشی.
WebRTC یکی از تکنولوژیهای جدید و پرطرفدار در دنیای ارتباطات ریِلتایم هست. برنامهنویسها از سراسر دنیا برای انواع مختلفی از کاربردها از این پروتکل استفاده میکنن. بیا ببینیم چرا WebRTC برای اپلیکیشنهای ارتباطی بلادرنگ خیلی مهمه و چی کار میکنه:
WebRTC برای خیلی از کاربردها به کار میاد، مثل:
در حالی که WebRTC از رمزنگاری استفاده میکنه و APIهاش نیاز به HTTPS دارن، هنوز هم یه سری نگرانیهای امنیتی هست که برنامهنویسا باید بهشون توجه کنن. برای WebRTC هیچ روش سیگنالینگ مشخصی تعریف نشده، یعنی اگه نمیدونی از چه پروتکلهای امنیتی استفاده کنی، ممکنه بهتر باشه به یه پروتکل دیگه برای استریم ویدیو فکر کنی.
به غیر از امنیت، سه جنبه دیگه از WebRTC هست که باید قبل از تصمیمگیری بهشون توجه کنی:
WebRTC به کمک مجموعهای از پروتکلها و سرورها مثل ICE، STUN، TURN و SDP کار میکنه تا ارتباطات بلادرنگ و پایدار بین دستگاهها برقرار کنه. هر کدوم از این پروتکلها نقش خاصی دارن و به مدیریت و تسهیل اتصال بین دستگاهها کمک میکنن. حالا بیایم نگاهی به هرکدوم از این اجزا بندازیم و ببینیم چطور کار میکنن.
پروتکل ICE (Interactive Connectivity Establishment) برای پیدا کردن بهترین مسیر جهت اتصال بین دستگاهها استفاده میشه. وقتی دستگاهها پشت روترهای NAT یا فایروال قرار دارن و ارتباط برقرار نمیشه، ICE با کمک سرورهای STUN و TURN این موانع رو رد میکنه.
ICE همه مسیرهای ممکن رو برای انتقال مدیا بین دستگاهها جمع میکنه. اول، با استفاده از سرورهای STUN تلاش میکنه تا آیپی دستگاهها رو پیدا کنه و ارتباط مستقیم برقرار کنه. اگه موفق نشه، از سرور TURN بهعنوان واسطه استفاده میکنه تا ارتباط بین دستگاهها برقرار بشه.
اگه دنبال سرور TURN برای اپلیکیشن خودت هستی، میتونی از سرورهای Metered TURN که یه سرویسدهنده جهانیه استفاده کنی.
سرورهای STUN (Session Traversal Utilities for NAT) به دستگاههایی که پشت روتر NAT هستن کمک میکنن تا آیپی عمومی و شماره پورت خودشون رو پیدا کنن. وقتی دستگاهها پشت NAT هستن، یه آیپی خصوصی دارن که روتر NAT بهشون میده. اما برای اینکه این دستگاهها بتونن مستقیماً با هم ارتباط برقرار کنن، باید آیپی و پورت عمومی خودشون و طرف مقابل رو بدونن.
دستگاهها یه درخواست به سرور STUN میفرستن و این سرور بهشون آیپی عمومی و پورتشون رو برمیگردونه تا بتونن به راحتی به هم وصل بشن. سرورهای STUN هم رایگان و هم پولی هستن؛ گوگل هم یه سری سرور STUN رایگان ارائه میده که میتونی ازشون استفاده کنی.
NAT یا ترجمه آدرس شبکه، یه روشه که توی اون دستگاههای NAT از یک یا چند آیپی عمومی برای هدایت ترافیک بین چندین دستگاهی که پشتش قرار دارن استفاده میکنن. این دستگاهها آیپی و پورت خصوصی از NAT میگیرن. این روش برای صرفهجویی در تعداد محدود آدرسهای IPv4 به وجود اومده.
وقتی دستگاهها نتونن به صورت مستقیم با هم ارتباط بگیرن (بهخاطر NAT یا فایروال)، سرورهای TURN وارد عمل میشن و دادهها رو بین دستگاهها جابجا میکنن. TURN آخرین راهحله و مصرف منابع بالایی مثل پهنای باند و پردازش داره. برای عملکرد بهتر، سرورهای TURN باید نزدیک کاربران قرار داشته باشن.
SDP یه استاندارده که برای توصیف جلسات ارتباطی چندرسانهای (مثل ویدیو و صدا) استفاده میشه. هدفش اینه که اطلاعات مربوط به یه جلسه رو مثل اعلام جلسه، دعوت به جلسه یا شروع یه ارتباط چندرسانهای، مشخص کنه.
البته خودش هیچ داده یا رسانهای رو جابجا نمیکنه، فقط توصیف میکنه که چه نوع رسانههایی در جلسه هست و دستگاهها چطوری باید اونها رو دریافت کنن.
SDP طوری طراحی شده که توی محیطهای شبکه مختلف و فرمتهای متنوع کار کنه. ازش برای توصیف ارتباطات چندرسانهای و مدیریت لاجستیک اتصال و تبادل مدیا استفاده میشه.
پیامهای SDP با فرمت ساده و متن معمولی نوشته میشن. هر پیام شامل نوع=مقدار هست، که نوع یه کاراکتر ساده هست و مقدار یه رشته متنی ساختاریافته. این پیامها معمولاً با پروتکلهای دیگه مثل SIP یا به عنوان بخشی از فرآیند سیگنالینگ WebRTC منتقل میشن تا یه اتصال جدید برقرار شه.
اجزای کلیدی SDP
SDP به طور خلاصه یه توصیف جامع از تمام جنبههای یه جلسه ارتباطی چندرسانهایه که کمک میکنه دستگاهها بدونن با چه مدیاهایی سر و کار دارن و چطور باید با هم وصل بشن.
SDP توی WebRTC نقش مهمی در مدل "پیشنهاد/پاسخ" داره، که یکی از اصلیترین مکانیزمهای سیگنالینگ برای برقرار کردن ارتباط بین دو طرفه.
چطوری کار میکنه؟
MediaStream API یکی از اجزای مهم WebRTC هست که برای مدیریت جریانهای رسانهای مثل صدا و تصویر به کار میره. با این API میتونی ویدیو استریم، تماسهای تصویری و صوتی رو راه بندازی.
MediaStream مجموعهای از ترکهای رسانهای مثل صدا و تصویر رو بهطور همزمان و هماهنگ مدیریت میکنه. این ترکها میتونن از منابع مختلفی مثل میکروفون، دوربین یا حتی رسانههای از پیش ضبطشده گرفته بشن و بین دستگاهها برای ارتباط بلادرنگ منتقل بشن.
RTCPeerConnection یکی از اصلیترین اجزای WebRTC هست. کار اصلیش اینه که همونطور که از اسمش پیداست، یه اتصال مستقیم بین دستگاههای کاربر برقرار و نگهداری کنه. این اتصال باعث میشه دادهها مستقیماً بین دستگاهها رد و بدل بشه، بدون نیاز به واسطه (البته به جز توی مرحله اولیه سیگنالینگ).
RTCPeerConnection مسئول انجام کارهایی مثل مذاکره برای جزئیات اتصال و مدیریت انتقال مدیا و دادهها بعد از اینکه دستگاهها به هم وصل شدن، هست.
RTCDataChannel یکی از بخشهای مهم WebRTC هست که اجازه میده دادهها بهصورت دوطرفه بین دستگاهها منتقل بشه. این قابلیت فراتر از تماسهای صوتی و تصویریه و به برنامهنویسها اجازه میده اپلیکیشنهایی مثل چت، تختههای همکاری و حتی سرویسهای اشتراکگذاری فایل بسازن.
این کانال داده بسیار انعطافپذیره و هم انتقال دادههای با اطمینان بالا و هم انتقال سریع با سربار کمتر رو پشتیبانی میکنه. بهطور کلی، میتونی بسته به نیاز اپلیکیشنت تنظیماتش رو سفارشی کنی.
RTCDataChannel میتونه توی کلی اپلیکیشن مختلف به کار بره، مثل:
همچنین سرورهای TURN میتونن ترافیک رو به نزدیکترین سرور هدایت کنن تا تأخیر به حداقل برسه (کمتر از 50 میلیثانیه)، با قیمتی مقرونبهصرفه و امکانات مدیریت ساده.
نه، WebRTC متعلق به گوگل نیست، اما در سال 2011 توسط گوگل توسعه داده شد. این پروژه متنبازه و هر کسی میتونه ازش استفاده کنه.
WebRTC از هر دو پروتکل TCP و UDP استفاده میکنه. TCP برای سیگنالینگ و UDP برای انتقال رسانههای بلادرنگ مثل صدا و تصویر استفاده میشه.
WebRTC برای ارتباطات بلادرنگ صدا و تصویر استفاده میشه، در حالی که WebSocket برای ارتباطات بین مرورگر و سرور طراحی شده.
نه، WebRTC میتونه در اپلیکیشنها و دستگاههای تعبیه شده هم استفاده بشه، ولی برای اپهای iOS ممکنه نیاز به سفارشیسازی داشته باشه.
در نهایت، WebRTC بهعنوان یکی از پایههای اصلی ارتباطات بلادرنگ در اپلیکیشنهای امروزی شناخته میشه. این تکنولوژی با سرعت فوقالعادهای که در انتقال صدا و تصویر داره، به بهترین گزینه برای توسعهدهندگانی تبدیل شده که قصد دارن اپهای تماس صوتی و تصویری سریع و کارآمد بسازن. با WebRTC، نهتنها تماسهای ویدیویی روانتر میشن، بلکه توسعه این قابلیتها هم خیلی راحتتر و سریعتر انجام میشه. برای هر پروژهای که نیاز به تماس آنی داره، WebRTC یه راهحل بینقصه.
امیدوارم این مقاله برات مفید بوده باشه، خوشحال میشم نظراتت رو با ما به اشتراک بذاری.😊
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: