Bedrud از LiveKit برای مدیریت ارتباط ویدیویی و صوتی بلادرنگ استفاده میکند. LiveKit media server SFU (واحد ارسال انتخابی) را ارائه میدهد، و Bedrud احراز هویت، مدیریت اتاق و کنترلهای مدیر را مدیریت میکند.
جاسازیشده در مقابل خارجی
Bedrud دو حالت استقرار LiveKit را پشتیبانی میکند:
۱. حالت جاسازیشده (پیشفرض): بکاند یک فرآیند سرور LiveKit را به صورت داخلی شروع و مدیریت میکند. هیچ زیرساخت اضافی مورد نیاز نیست - بکاند چرخه حیات فرآیند LiveKit را مدیریت میکند. ۲. حالت خارجی: Bedrud به یک سرور LiveKit جداگانه یا خوشه متصل میشود. این برای مقیاسافزایی افقی یا هنگام استفاده از نمونه ابری مدیریتشده LiveKit مفید است.
پیکربندی حالت خارجی
برای استفاده از یک سرور LiveKit خارجی، کلیدهای زیر را در config.yaml تنظیم کنید:
livekit:
host: "livekit.example.com:7880"
api_key: "your-api-key"
api_secret: "your-api-secret"
embedded: falseوقتی embedded false است، Bedrud شروع باینری LiveKit جاسازیشده را رد میکند. کلید API و رمز باید با اعتبارنامههای سرور خارجی مطابقت داشته باشد.
برای تنظیم و پیکربندی خوشه LiveKit، به مستندات LiveKit ببینید.
نحوه کار
۱. ایجاد اتاق
وقتی یک کاربر در Bedrud اتاق ایجاد میکند، سرور بلافاصله یک اتاق LiveKit ایجاد نمیکند. اتاقهای LiveKit به صورت درخواستی هنگام پیوستن اولین شرکتکننده ایجاد میشوند.
۲. توکنهای پیوستن
وقتی یک کاربر به یک جلسه میپیوندد:
۱. فرانتاند درخواستی به /api/room/join میفرستد.
۲. بکاند تأیید میکند که کاربر اجازه پیوستن به آن اتاق را دارد.
۳. بکاند از کلید API و رمز خود برای تولید یک JWT امضاشده (توکن پیوستن) استفاده میکند.
۴. توکن شامل موارد زیر است:
- نام اتاق.
- هویت کاربر (نام نمایشی).
- مجوزها - برای مثال، اینکه آیا کاربر میتواند صدا را منتشر کند یا صفحه خود را به اشتراک بگذارد.
۵. فرانتاند این توکن را دریافت میکند و مستقیماً به پورت رسانه LiveKit (پیشفرض
7880) متصل میشود.
۳. کنترلهای اتاق (مدیر)
بکاند از LiveKit Go SDK برای انجام عملیات مدیریتی استفاده میکند:
- اخراج: یک شرکتکننده را قطع میکند.
- سکوت: میکروفون یک شرکتکننده را به اجبار سکوت میکند.
- مجوزها: آنچه یک شرکتکننده میتواند در زمان واقعی انجام دهد را تغییر میدهد.
معماری شبکه
- پورت API (8090/443): درخواستهای HTTP و سیگنالینگ WebSocket برای راهاندازی تماس را مدیریت میکند.
- پورت رسانه (7880): دادههای ویدیویی و صوتی را با استفاده از پروتکلهای WebRTC مدیریت میکند. بازگشت ICE/TCP از پورت 7881 وقتی UDP مسدود است استفاده میکند.
- پورت TURN (3478 UDP / 5349 TLS): رسانه را برای کلاینتهای پشت NAT یا فایروالهای محدود رله میکند. به راهنمای سرور TURN ببینید.
برای الزامات فایروال و پورت، به اتصال WebRTC ببینید.
مدیریت خطا
LiveKit غیرقابل دسترسی
اگر سرور LiveKit غیرقابل دسترسی باشد، تولید توکن ممکن است همچنان موفق باشد (توکنها به صورت محلی با استفاده از کلید API و رمز ایجاد میشوند). با این حال، کلاینت در اتصال به media server شکست میخورد. علائم:
- کلاینت یک توکن پیوستن معتبر دریافت میکند اما اتصال WebRTC به اتمام زمان میرسد.
- LiveKit SDK یک رویداد
Reconnectingیا خطای اتصال منتشر میکند.
بررسی: تأیید کنید که سرور LiveKit در حال اجرا است (systemctl status livekit) و host/port در config.yaml صحیح است.
خرابی فرآیند LiveKit جاسازیشده
در حالت جاسازیشده، اگر فرآیند فرزند LiveKit خراب شود:
- سرور API Bedrud به اجرا ادامه میدهد (اتاقها میتوانند لیست شوند، کاربران میتوانند وارد شوند).
- جلسات فعال اتصال رسانه را از دست میدهند.
- درخواستهای پیوستن جدید توکن تولید میکنند، اما کلاینتها نمیتوانند متصل شوند.
بررسی: لاگها را در /var/log/bedrud/bedrud.log بررسی کنید یا journalctl -u livekit -f را برای جزئیات خرابی اجرا کنید.
انقضای توکن
توکنهای پیوستن LiveKit یک پنجره اعتبار کوتاه دارند. اگر کلاینت خیلی طولانی بین دریافت توکن و اتصال منتظر بماند، توکن منقضی میشود. کلاینت باید یک توکن جدید از طریق /api/room/join درخواست کند.
مشاهده همچنین
- راهنمای سرور TURN - معماری، پیکربندی، TLS و عیبیابی TURN
- اتصال WebRTC - پشته اتصال کامل STUN/ICE/TURN/SFU
- نمای کلی معماری - معماری کامل سیستم