تجربه ری‌استریم بر روی آپارات، یوتیوب، لحظه‌نگار، ابرآروان و اینستاگرام

معماری سرویس Restreamer
معماری سرویس Restreamer


کرونا باعث شد تا هیئتی که سال‌ها مخاطب آن بودم تصمیم به برگزاری برنامه محرم ۱۴۴۲ بصورت آنلاین و غیر حضوری بگیرد و این فرصت نصیب من شد تا مسئولیت ری‌استریم کردن (re-streaming) این مراسم را بر عهده بگیرم.

در این مطلب قصد دارم در دو بخش تجربه و راهکاری که پیاده کردم را شرح بدهم و پس از آن پلتفرم‌هایی که تجربه استریم کردن بر روی آن‌ها را داشتیم نقد و بررسی کوتاهی بکنم.

چرا سرویس ری‌استریمر؟

برای من سه علت جهت راه‌اندازی این سرویس وجود داشت:

  1. محدودیت در پهنای باند: اگر استریم بر روی یک بستر همانند آپارات پهنای باندی در حدود ۱.۵ Mbps بخواهد شما برای استریم کردن بر روی ۵ بستر به پهنای باندی در حدود 7.5 Mbps نیاز خواهید داشت. علاوه بر آن ترافیک مصرفی شما ۵ برابر خواهد شد.
  2. یوتیوب در ایران فیلتر است و بصورت مستقیم نمی‌توان به آن دسترسی داشت.
  3. محدودیت منابع بر روی سیستمی که وظیفه استریم کردن را دارد. برنامه‌هایی همانند OBS و یا Vimix پردازش سنگینی برای استریم کردن دارند که استریم مستقیم بر روی ۵ بستر شاید اصلا امکان پذیر نباشد.

چگونه یک سیستم ری‌استریم راه‌اندازی بکنیم؟

تخصص من راه‌اندازی چنین سیستم‌هایی نیست و فقط از طریق جستجو کردن در گوگل و دیدن چند مطلب و ویدئو و همچنین راهنمایی یکی از دوستان این راهکار را پیاده کردم. برای راه‌اندازی این راهکار شما نیاز به دانش فنی بالایی نخواهید داشت. منابعی که برای پیاده سازی این راهکار استفاده کردم را در انتهای این مطلب قرار می‌دهم.

برای انجام اینکار سرویس‌هایی همانند http://restreamer.io وجود دارند که به شما این خدمات را می‌دهند ولی از آنجایی که ما قصد استریم کردن بر روی سرویس‌های ایرانی را در گام اول داشتیم می‌خواستیم تا بتوانیم با سرعت مناسبی به این سرویس‌ها استریم بکنیم و بعد از آن دیگر پلتفرم‌ها در خارج از ایران اولویت ما در استریم کردن بودند.

برای پیاده کردن این سرویس با راهنمایی یکی از دوستان من nginx-rtmp-module را انتخاب کردن که یک Media Streaming Server است. عملا دو سرور در این وسط کار ری‌استریم کردن را انجام می‌دهند سرور اول که در ایران می‌باشد و تصویر با پروتکل rtmp برای او ارسال می‌شود و آن تصویر را برای آپارات، لحظه‌نگار، ابرآروان و نهایت برای سرور خارج از ایران ارسال می‌کند و سرور دوم که بخاطر مشکل فیلترینگ وجود دارد، استریم را برای یوتیوب ارسال می‌کند. در اینجا شما می‌توانید تصویر را بر روی هر سرویس استریمی که می‌خواهید ارسال کنید.

این مسیر را من بر روی Ubuntu Server نسخه‌های 18.04 و 20.04 پیاده کردم. برای راه‌اندازی سرور ایران از ابرآروان سرویس گرفتم و کمترین سرویسی که امکان خرید آن را داشتم فعال کردم که سیستمی با 1GB رم، ۱ هسته و ۵ گیگ فضای ذخیره سازی بود.

گام‌های نصب و راه‌اندازی ری‌استریمر

برای نصب و راه‌اندازی کافی هست که دستورات زیر را خط به خط و به ترتیب اجرا کنید. دو دستور اول برای به روزرسانی می‌باشد و دستور سوم برای نصب nginx و ماژول rtmp آن می‌باشد.

sudo apt update
sudo apt upgrade
sudo apt install nginx-full libnginx-mod-rtmp

پس از آن به سراغ فایل config می‌رویم.

nano /etc/nginx/nginx.conf 

من برای اعمال کانفیگ تمام خط‌های پیش‌فرض را پاک کردم که البته نیازی به انجام این کار نیست و شما می‌توانید بخش‌هایی که در فایل کانفیگ زیر می‌باشد را با رعایت ساختار فایل nginx به فایل پیش‌فرش اضافه کنید:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
        worker_connections 768;
        # multi_accept on;
}
rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                application live_stream_server_1 {
                        record off;
                        live on;

                        #aparat
                        push rtmp://rtmp.asset.aparat.com:443/event/{aparat_key};

                        #Canada Server
                        push rtmp://your_ip_or_address/live_stream_server_2;

                        #Lahzenegar 
                        push rtmp://rtmp.lahzecdn.com:443/pro/{lahzenegar_key};
                }
        }
}

پروتکل rtmp بر روی پورت 1935 کار می‌کند، برای همین باید حتما این پورت باز و درد دسترس باشد.

برای اطلاع از دیگر تنظیمات کانفیگ این ماژول می‌توانید به این لینک بروید. در ادامه شرح مختصری بر روی هر تنظیم در حد دانشی که دارم می‌دهم:

application live_stream_server_1 { }

شما می‌توانید به هر تعدادی که می‌خواهید application تعریف کنید و هر کدام تنظیمات مربوط به خودش را داشته باشد. بخش live_stream_server_1 نشان دهنده آدرس جایی است که باید بر روی آن استریم کنید. که ساختاری زیر خواهد بود:

rtmp://server_ip_or_address/live_stream_server_1

کافی است که توسط برنامه‌ای همانند OBS بر روی این آدرس استریم کنید. توجه داشته باشید که به هنگام تنظیم آدرس استریم در برنامه OBS، محل key را خالی بگذارید.

علاوه بر آن بجای live_stream_server_1 از یک رشته پیچیده‌تر استفاده کنید و آن را در اختیار کسی قرار ندهید زیرا این بخش از آدرس همانند کلید استریم شما می‌باشد و در صورتی که فرد دیگری آن را داشته باشد می‌تواند بر روی آن استریم کند.

برای ارسال استریم دریافتی از live_stream_server_1 بر روی هر جای دیگری کافی است که از دستور push استفاده کنید. شما می‌توانید هر تعدادی که خواستید Push سرور تعریف کنید(البته محدودیت سرور شما هم تعیین کننده است) تا استریم ورودی بر روی آن‌ها ری‌استریم شود.

push rtmp://stream_server/{key};

پس از ویرایش فایل کانفیگ، کافی است که دستور زیر را اجرا کنید تا nginx ریستارت شود.

systemctl restart nginx

برای تست آدرس rtmp را در برنامه‌ای مثل OBS وارد کنید و بخش Key را خالی بگذارید و بعد از آن شروع به استریم کنید.


چگونه سرور دوم را راه‌اندازی کنیم؟

وظیفه سرور دوم استریم کردن بر روی YouTube بود. برای راه‌اندازی آن کافی است که مراحل بالا را تکرار کنید.

ابتدا nginx و ماژول rtmp را راه‌اندازی کنید. سپس آدرس سرور دوم را در تنظیمات nginx سرور اول قرار دهید تا استریم را برای آن هم ارسال کند و در نهایت در تنظیمات nginx سرور دوم اطلاعات مربوط به استریم بر روی یوتیوب را قرار دهید.

سیستم مانیتورینگ

من برای مانیتور کردن وضعیت استریمینگ از nginx-rtmp-monitoring استفاده کردم. واقعیت این هست که اطلاعات ارزشمندی برای من نمایش نمی‌داد و فقط برای مانیتور کردن وضعیت اتصال به سرور، حجم اطلاعاتی که دارد به سرور ارسال می‌شود و میزان مصرف رم و CPU استفاده می‌کردم. امکان Play و Drop هم برای من کار نمی‌کرد.

من از طریق Docker موفق به نصب و راه‌اندازی نشدم و از مسیر نصب اولی که گفته شده بود استفاده کردم و برای اینکه بتوانم همیشه سرویس رو در Background روشن نگهدارم از پکیج forever استفاده کردم.

با این روش بر روی چه پلتفرم‌هایی می‌توان استریم کرد؟

با این روش بر روی هر پلتفرمی که امکان استریم کردن با rtmp را داشته باشد شما می‌توانید ری‌استریم بکنید. پلتفرم‌هایی مثل:

  • آپارات
  • لحظه‌نگار
  • سرویس لایو ابرآروان
  • YouTube
  • twitch
  • و ...

آیا می‌توان بر روی Instagram یا Facebook استریم کرد؟

خیر، البته به تنهایی نه!!!

این دو پلتفرم از پروتکل rtmps استفاده می‌کنند و nginx rtmp بصورت پیش‌فرض از rtmps پشتیبانی نمی‌کند و شما نیاز دارید از stunnel برای این کار استفاده کنید.

علاوه بر آن Instagram بصورت رسمی امکان استریم کردن را به شما نمی‌دهد و نیاز به ابزارهای واسطی دارید تا بتوانید لینک و stream key را دریافت کنید و بعد از آن استریم خود را ارسال کنید. ابزارهای زیر با گرفتن نام کاربری و رمز عبور شما این کار را می‌کنند.

البته به این نکته توجه داشته باشید که ممکن است این کار منجر به بسته شدن حساب کاربری شما در اینستاگرام شود.

برای راه‌اندازی stunnel می‌توانید از این راهنما استفاده کنید. شاید در آینده راهنمای استریم کردن بر روی Instagram را نوشتم.

چه مشکلی داشتم!

در حین استریم کردن گاهی از اوقات بخاطر اختلال‌هایی که در اینترنت و یا سیستم‌های تصویر برداری پیش می‌آمد نیاز به متوقف کردن استریم و یا حتی بستن برنامه‌ها می‌شد. گاهی از اوقات بعد از راه‌اندازی مجدد سیستم و شروع مجدد برنامه موفق به اتصال به سرور نمی‌شد که در این مواقع با ریستارت کردن nginx مشکل حل می‌شد. قطعا برای حل این مشکل راه‌حل بهتری هم وجود دارد که من نمی‌دانم!

کدام بستر برای استریم کردن!

همه! راه‌اندازی سرویس ری‌استریم برای همین است دیگر!
البته در بین این سرویس‌ها هرکدام خوبی‌ها و بدی‌هایی داشتند. بگذارید اول از همه بگویم که لحظه‌نگار بهترینشان هست. سرویس لحظه‌نگار به شما امکان شروع و پایان رویداد را می‌دهد.خب؟

در سه شب اول اجرا هر شب مشکلاتی از جنس قطع شدن اینترنت و یا مشکل کارت کپچر داشتیم که باعث می‌شد استریم را متوقف کنیم و دوباره برگردیم. در سرویس لحظه‌نگار رویداد شما همچنان زنده باقی می‌ماند و به محض دریافت استریم مابقی رویداد را پخش می‌کرد و در نهایت رویداد بصورت رکورد شده و یک تکه بر روی لحظه‌نگار منتشر می‌شد.

اما در دیگر سرویس ها ...

آپارات: امکان ضبط نداشت ولی پر مخاطب‌ترین سرویس ما بعد از اینستاگرام بود و برای مردم شناخته‌تر شده است.

یوتیوب: به محض قطع شدن استریم مدتی صبر می‌کرد ولی بعد از شاید ۱۵ ثانیه به رویداد پایان می‌داد و فیلم آن را بصورت جداگانه در کانال منتشر می‌کرد و با شروع دوباره استریم یک رویداد جدید عملا آغاز می‌شد.

ابرآروان: از آنجایی که Backup plan ما برای زمانی بود که اگر آپارات از دسترس خارج شد بود زیاد با آن کار نکردم ولی تجربه کاربری عجیبی داشت که در نهایت نفهمیدم چه زمانی استریم ‌می‌کند و چه زمانی نمی‌کند! من انتظار یک دکمه خاموش و روشن برای یک اجرای زنده داشتم ولی متاسفانه چنین امکانی را پیدا نکردم.

در نهایت هم از لحظه‌نگار و ابرآروان تشکر می‌کنم که بصورت رایگان سرویسشان را در اختیارمان قراردادند.

منابع

برای راه‌اندازی این سرویس من از منابع زیر استفاده کردم