آموزش معرفی و بررسی, دسته‌بندی نشده

نحوه راه اندازی یک سرور پخش ویدئو با استفاده از Nginx-RTMP در اوبونتو 20.04

معرفی

موارد استفاده زیادی برای پخش ویدیو وجود دارد. ارائه دهندگان خدمات مانند Twitch برای مدیریت جنبه های اکتشاف وب و مدیریت جامعه جریان بسیار محبوب هستند و نرم افزار رایگان مانند OBS Studio به طور گسترده برای ترکیب همپوشانی های ویدئویی از چندین منبع جریان مختلف در زمان واقعی استفاده می شود. در حالی که این پلتفرم ها بسیار قدرتمند هستند، در برخی موارد ممکن است بخواهید بتوانید جریانی را میزبانی کنید که به سایر ارائه دهندگان خدمات متکی نیست.

در این آموزش، نحوه پیکربندی وب سرور Nginx را برای میزبانی یک جریان ویدیوی RTMP مستقل که می‌تواند در برنامه‌های مختلف لینک شده و مشاهده شود، پیکربندی کنید. RTMP، پروتکل پیام‌رسانی بلادرنگ، اصول اکثر جریان‌های ویدئویی اینترنتی را تعریف می‌کند. همچنین یاد خواهید گرفت که چگونه جریان های HLS و DASH را میزبانی کنید که از پلتفرم های مدرن تری با استفاده از همین فناوری پشتیبانی می کنند.

پیش نیازها

برای تکمیل این راهنما، شما نیاز دارید:

یک سرور اوبونتو 20.04 و یک کاربر غیر ریشه با امتیازات sudo. می‌توانید در راهنمای راه‌اندازی سرور اولیه با اوبونتو 20.04 درباره نحوه راه‌اندازی کاربری با این امتیازات بیشتر بدانید.
Nginx نصب شده است، به دنبال نحوه نصب Nginx در اوبونتو 20.04.
این آموزش از نام دامنه نگهدارنده your_domain برای URL ها و نام هاست استفاده می کند. در حین کار با آموزش، نام دامنه یا آدرس IP خود را جایگزین کنید.

مرحله 1 – نصب و پیکربندی Nginx-RTMP

اکثر ابزارهای جریان مدرن از پروتکل RTMP پشتیبانی می کنند، که پارامترهای اساسی یک جریان ویدئوی اینترنتی را تعریف می کند. وب سرور Nginx شامل ماژولی است که به شما امکان می دهد یک جریان RTMP با حداقل پیکربندی از یک URL اختصاصی ارائه دهید، درست مانند دسترسی HTTP به صفحات وب به طور پیش فرض. ماژول Nginx RTMP به طور خودکار در Nginx گنجانده نشده است، اما در Ubuntu 20.04 و اکثر توزیع‌های لینوکس دیگر می‌توانید آن را به عنوان یک بسته اضافی نصب کنید.

با اجرای دستورات زیر به عنوان یک کاربر غیر ریشه برای به روز رسانی لیست بسته های خود و نصب ماژول Nginx شروع کنید:

sudo apt update

sudo apt install libnginx-mod-rtmp

نصب ماژول به طور خودکار شروع به ارائه یک جریان نمی کند. شما باید یک بلوک پیکربندی را به فایل پیکربندی Nginx خود اضافه کنید که مکان و نحوه در دسترس بودن جریان را مشخص کند.

با استفاده از nano یا ویرایشگر متن مورد علاقه خود، فایل پیکربندی اصلی Nginx، /etc/nginx/nginx.conf را باز کنید و این بلوک پیکربندی را به انتهای فایل اضافه کنید:

sudo nano /etc/nginx/nginx.conf

/etc/nginx/nginx.conf
. . .
rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                allow publish 127.0.0.1;
                deny publish all;

                application live {
                        live on;
                        record off;
                }
        }
}
  • listen 1935 به این معنی است که RTMP برای اتصالات در پورت 1935 که استاندارد است گوش می دهد.
  • chunk_size 4096 به این معنی است که RTMP داده ها را در بلوک های 4 کیلوبایتی ارسال می کند که این نیز استاندارد است.
  • اجازه انتشار 127.0.0.1 و انکار انتشار همه به این معنی است که سرور فقط اجازه می دهد ویدیو از همان سرور منتشر شود تا دیگر کاربران جریان های خود را تحت فشار قرار ندهند.
  • application live یک بلوک برنامه را تعریف می کند که در مسیر /live URL در دسترس خواهد بود.
  • live on حالت زنده را فعال می‌کند تا چندین کاربر بتوانند به طور همزمان به جریان شما متصل شوند، یک فرض اولیه پخش ویدیو.
  • ضبط کردن عملکرد ضبط Nginx-RTMP را غیرفعال می کند، به طوری که تمام جریان ها به طور پیش فرض به طور جداگانه در دیسک ذخیره نمی شوند.
  • ذخیره کنید و فایل را ببندید. اگر از nano استفاده می کنید، Ctrl+X را فشار دهید، سپس وقتی از شما خواسته شد، Y و Enter را فشار دهید.

این شروع پیکربندی RTMP شما را فراهم می کند. به طور پیش فرض، به پورت 1935 گوش می دهد، به این معنی که باید آن پورت را در فایروال خود باز کنید. اگر ufw را به عنوان بخشی از تنظیمات اولیه سرور خود پیکربندی کرده اید، دستور زیر را اجرا کنید.

sudo ufw allow 1935/tcp

اکنون می توانید Nginx را با تغییرات خود بارگیری مجدد کنید:

sudo systemctl reload nginx.service

اکنون باید یک سرور RTMP در حال کار داشته باشید. در بخش بعدی، پخش ویدئو به سرور RTMP شما را از منابع محلی و راه دور پوشش خواهیم داد.

مرحله 2 – ارسال ویدئو به سرور RTMP شما

راه های مختلفی برای ارسال ویدیو به سرور RTMP وجود دارد. یکی از گزینه‌ها استفاده از ffmpeg، یک ابزار محبوب صوتی و تصویری خط فرمان، برای پخش مستقیم یک فایل ویدیویی بر روی سرور است. اگر قبلاً یک فایل ویدیویی روی سرور ندارید، می‌توانید با استفاده از youtube-dl، یک ابزار خط فرمان برای ضبط ویدیو از پلتفرم‌های پخش جریانی مانند YouTube، آن را دانلود کنید. برای استفاده از youtube-dl، به نصب پایتون به روز روی سرور خود نیز نیاز دارید.

ابتدا پایتون و مدیریت بسته آن یعنی pip را نصب کنید:

sudo apt install python3-pip

در مرحله بعد، از pip برای نصب youtube-dl استفاده کنید:

pip install youtube-dl

اکنون می توانید از youtube-dl برای دانلود ویدیو از یوتیوب استفاده کنید. اگر موردی را در ذهن ندارید، این ویدیو را با معرفی پلتفرم اپلیکیشن DigitalOcean امتحان کنید:

youtube-dl https://www.youtube.com/watch?v=iom_nhYQIYk

زمانی که youtube-dl جریان‌های ویدیویی و صوتی را که بارگیری می‌کند در یک فایل واحد ترکیب می‌کند، مقداری خروجی را مشاهده خواهید کرد – این طبیعی است.

Output
[youtube] iom_nhYQIYk: Downloading webpage
WARNING: Requested formats are incompatible for merge and will be merged into mkv.
[download] Destination: Introducing App Platform by DigitalOcean-iom_nhYQIYk.f137.mp4
[download] 100% of 32.82MiB in 08:40
[download] Destination: Introducing App Platform by DigitalOcean-iom_nhYQIYk.f251.webm
[download] 100% of 1.94MiB in 00:38
[ffmpeg] Merging formats into "Introducing App Platform by DigitalOcean-iom_nhYQIYk.mkv"
Deleting original file Introducing App Platform by DigitalOcean-iom_nhYQIYk.f137.mp4 (pass -k to keep)
Deleting original file Introducing App Platform by DigitalOcean-iom_nhYQIYk.f251.webm (pass -k to keep)

اکنون باید یک فایل ویدیویی در فهرست فعلی خود با عنوانی مانند معرفی پلتفرم برنامه توسط DigitalOcean-iom_nhYQIYk.mkv داشته باشید. برای استریم کردن آن، باید ffmpeg را نصب کنید:

sudo apt install ffmpeg

و از ffmpeg برای ارسال آن به سرور RTMP خود استفاده کنید:

ffmpeg -re -i “Introducing App Platform by DigitalOcean-iom_nhYQIYk.mkv” -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://localhost/live/stream

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

  • -re مشخص می کند که ورودی با نرخ فریم اصلی خود خوانده می شود.
  • -i “Introducing App Platform by DigitalOcean-iom_nhYQIYk.mkv” مسیر فایل ورودی ما را مشخص می کند.
  • -c:v روی کپی تنظیم شده است، به این معنی که شما در حال کپی برداری از قالب ویدیویی هستید که از YouTube به صورت بومی دریافت کرده اید.
  • -c:a پارامترهای دیگری دارد، یعنی aac -ar 44100 -ac 1، زیرا باید صدا را به یک فرمت مناسب RTMP نمونه برداری کنید. aac یک کدک صوتی با پشتیبانی گسترده است، 44100 هرتز یک فرکانس رایج است، و -ac 1 اولین نسخه از مشخصات AAC را برای اهداف سازگاری مشخص می کند.
  • -f flv برای حداکثر سازگاری با RTMP، ویدیو را در یک ظرف با فرمت flv می پیچد.

این ویدیو به rtmp://localhost/live/stream ارسال می‌شود زیرا بلوک پیکربندی زنده را در مرحله 1 تعریف کرده‌اید، و پخش یک URL دلخواه برای این ویدیو است.

در حالی که ffmpeg در حال پخش ویدیو است، کدهای زمانی را چاپ می کند:

Output
frame=  127 fps= 25 q=-1.0 size=     405kB time=00:00:05.00 bitrate= 662.2kbits/s speed=frame=  140 fps= 25 q=-1.0 size=     628kB time=00:00:05.52 bitrate= 931.0kbits/s speed=frame=  153 fps= 25 q=-1.0 size=     866kB time=00:00:06.04 bitrate=1173.1kbits/s speed=

این خروجی استاندارد ffmpeg است. اگر ویدیو را به فرمت دیگری تبدیل می‌کردید، اینها ممکن است برای درک میزان کارآمدی نمونه‌گیری مجدد ویدیو مفید باشند، اما در این مورد، فقط می‌خواهید ببینید که به طور مداوم پخش می‌شود. با استفاده از این ویدئوی نمونه، باید fps دقیق = 25 افزایش دریافت کنید.

در حالی که ffmpeg در حال اجرا است، می توانید از پخش کننده ویدیو به جریان RTMP خود متصل شوید. اگر VLC، mpv، یا پخش کننده رسانه دیگری را به صورت محلی نصب کرده اید، باید بتوانید جریان خود را با باز کردن URL rtmp://your_domain/live/stream در پخش کننده رسانه خود مشاهده کنید. پس از اتمام پخش ویدیو توسط ffmpeg، پخش جریانی شما پایان می یابد. اگر می‌خواهید به طور نامحدود به چرخش ادامه دهد، می‌توانید -stream_loop -1 را به ابتدای دستور ffmpeg خود اضافه کنید.

اکنون که یاد گرفتید منابع ویدئویی استاتیک را از خط فرمان استریم کنید، نحوه پخش ویدئو از منابع پویا را با استفاده از OBS روی دسکتاپ یاد خواهید گرفت.

مرحله 3 – پخش ویدیو به سرور خود از طریق OBS (اختیاری)

پخش جریانی از طریق ffmpeg زمانی راحت است که یک ویدیو آماده دارید که می‌خواهید پخش کنید، اما پخش زنده می‌تواند بسیار پویاتر باشد. محبوب ترین نرم افزار برای پخش زنده OBS یا Open Broadcaster Software است – این نرم افزار رایگان، منبع باز و بسیار قدرتمند است.

OBS یک برنامه دسکتاپ است و از رایانه محلی شما به سرور شما متصل می شود.

پس از نصب OBS، پیکربندی آن به معنای شخصی‌سازی پنجره‌های دسکتاپ و منابع صوتی است که می‌خواهید به جریان خود اضافه کنید، و سپس اعتبارنامه‌ها را برای یک سرویس پخش اضافه کنید. این آموزش پیکربندی استریم شما را پوشش نمی‌دهد، زیرا در اولویت قرار دارد، و به طور پیش‌فرض، می‌توانید فقط با پخش جریانی کل دسک‌تاپ خود یک نسخه نمایشی فعال داشته باشید. برای تنظیم اعتبار سرویس پخش خود، منوی تنظیمات OBS را باز کنید، به گزینه Stream بروید و گزینه های زیر را وارد کنید:

Streaming Service: Custom
Server: rtmp://your_domain/live
Play Path/Stream Key: obs_stream

obs_stream مسیری است که خودسرانه انتخاب شده است – در این مورد، ویدیوی شما در rtmp://your_domain/live/obs_stream در دسترس خواهد بود. شما نیازی به فعال کردن احراز هویت ندارید، اما باید یک ورودی اضافی به لیست سفید IP که در مرحله 1 پیکربندی کرده اید اضافه کنید.

به سرور برگردید، فایل پیکربندی اصلی Nginx، /etc/nginx/nginx.conf را باز کنید و یک ورودی اجازه انتشار اضافی برای آدرس IP محلی خود اضافه کنید. اگر آدرس IP محلی خود را نمی دانید، بهتر است فقط به سایتی مانند What’s my IP بروید که می تواند به شما بگوید از کجا به آن دسترسی داشته اید:

sudo nano /etc/nginx/nginx.conf

/etc/nginx/nginx.conf
. . .
                allow publish 127.0.0.1;
                allow publish your_local_ip_address;
                deny publish all;
. . .

فایل را ذخیره کرده و ببندید، سپس Nginx را دوباره بارگیری کنید:

sudo systemctl reload nginx.service

اکنون باید بتوانید منوی تنظیمات OBS را ببندید و روی Start Streaming از رابط اصلی کلیک کنید! سعی کنید جریان خود را مانند قبل در پخش کننده رسانه مشاهده کنید. اکنون که اصول پخش ویدئو را در عمل مشاهده کرده اید، می توانید چند ویژگی دیگر را به سرور خود اضافه کنید تا آن را برای تولید آماده تر کنید.

مرحله 4 – افزودن مانیتورینگ به پیکربندی (اختیاری)

اکنون که Nginx را برای پخش جریانی ویدیو با استفاده از ماژول Nginx-RTMP پیکربندی کرده اید، گام بعدی رایج این است که صفحه آمار RTMP را فعال کنید. به جای افزودن جزئیات بیشتر و بیشتر پیکربندی به فایل اصلی nginx.conf، Nginx به شما امکان می دهد پیکربندی های هر سایت را به فایل های جداگانه در یک زیر شاخه به نام sites-available/ اضافه کنید. در این مورد، شما یکی به نام rtmp ایجاد خواهید کرد:

sudo nano /etc/nginx/sites-available/rtmp

مطالب زیر را اضافه کنید:

/etc/nginx/sites-available/rtmp
server {
    listen 8080;
    server_name  localhost;

    # rtmp stat
    location /stat {
        rtmp_stat all;
        rtmp_stat_stylesheet stat.xsl;
    }
    location /stat.xsl {
        root /var/www/html/rtmp;
    }

    # rtmp control
    location /control {
        rtmp_control all;
    }
}

ذخیره کنید و فایل را ببندید. فایل stat.xsl از این بلوک پیکربندی برای استایل دادن و نمایش یک صفحه آمار RTMP در مرورگر شما استفاده می شود. این توسط کتابخانه libnginx-mod-rtmp که قبلا نصب کرده اید ارائه می شود، اما به طور پیش فرض فشرده می شود، بنابراین باید آن را از حالت فشرده خارج کنید و در فهرست /var/www/html/rtmp قرار دهید تا با پیکربندی بالا مطابقت داشته باشد. . توجه داشته باشید که می توانید اطلاعات اضافی درباره هر یک از این گزینه ها را در اسناد Nginx-RTMP بیابید.

پوشه /var/www/html/rtmp را ایجاد کنید و سپس فایل stat.xsl.gz را با دستورات زیر از حالت فشرده خارج کنید:

sudo mkdir /var/www/html/rtmp
sudo gunzip -c /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl.gz > /var/www/html/rtmp/stat.xsl`

ذخیره کنید و فایل را ببندید. فایل stat.xsl از این بلوک پیکربندی برای استایل دادن و نمایش یک صفحه آمار RTMP در مرورگر شما استفاده می شود. این توسط کتابخانه libnginx-mod-rtmp که قبلا نصب کرده اید ارائه می شود، اما به طور پیش فرض فشرده می شود، بنابراین باید آن را از حالت فشرده خارج کنید و در فهرست /var/www/html/rtmp قرار دهید تا با پیکربندی بالا مطابقت داشته باشد. . توجه داشته باشید که می توانید اطلاعات اضافی درباره هر یک از این گزینه ها را در اسناد Nginx-RTMP بیابید.

پوشه /var/www/html/rtmp را ایجاد کنید و سپس فایل stat.xsl.gz را با دستورات زیر از حالت فشرده خارج کنید:

sudo ufw allow from your_ip_address to any port http-alt

در مرحله بعد، باید این پیکربندی جدید را فعال کنید. قرارداد Nginx ایجاد پیوندهای نمادین (مانند میانبرها) از فایل‌های موجود در سایت‌های موجود/به پوشه دیگری به نام sites-enabled/هنگامی که تصمیم به فعال یا غیرفعال کردن آن‌ها دارید، است. با استفاده از مسیرهای کامل برای وضوح، این پیوند را ایجاد کنید:

sudo ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp

اکنون می توانید دوباره Nginx را برای پردازش تغییرات خود بارگیری مجدد کنید:

sudo systemctl reload nginx.service

اکنون باید بتوانید در مرورگر به http://your_domain:8080/stat بروید تا صفحه آمار RTMP را ببینید. در حین پخش ویدیو از صفحه بازدید کرده و آن را بازخوانی کنید و مشاهده کنید که آمار جریان تغییر می کند.

اکنون مشاهده کرده اید که چگونه می توانید جریان ویدیوی خود را نظارت کنید و آن را به ارائه دهندگان شخص ثالث ارسال کنید. در بخش آخر، یاد خواهید گرفت که چگونه آن را مستقیماً در یک مرورگر بدون استفاده از پلتفرم‌های پخش جریانی شخص ثالث یا برنامه‌های پخش کننده رسانه مستقل ارائه کنید.

مرحله 5 – ایجاد جریان های مدرن برای مرورگرها (اختیاری)

به عنوان آخرین مرحله، ممکن است بخواهید از پروتکل‌های پخش جدیدتر پشتیبانی اضافه کنید تا کاربران بتوانند مستقیماً با استفاده از یک مرورگر وب، ویدیو را از سرور شما پخش کنند. دو پروتکل وجود دارد که می توانید برای ایجاد جریان های ویدئویی مبتنی بر HTTP از آنها استفاده کنید: HLS اپل و MPEG DASH. هر دو مزایا و معایبی دارند، بنابراین احتمالاً می خواهید از هر دو پشتیبانی کنید.

ماژول Nginx-RTMP از هر دو استاندارد پشتیبانی می کند. برای افزودن پشتیبانی HLS و DASH به سرور خود، باید بلوک rtmp را در فایل nginx.conf خود تغییر دهید. /etc/nginx/nginx.conf را با استفاده از nano یا ویرایشگر دلخواه خود باز کنید، سپس دستورالعمل های هایلایت شده زیر را اضافه کنید:

sudo nano /etc/nginx/nginx.conf

/etc/nginx/nginx.conf
. . .
rtmp {
        server {
. . .
                application live {
                        live on;
                        record off;
                        hls on;
                        hls_path /var/www/html/stream/hls;
                        hls_fragment 3;
                        hls_playlist_length 60;

                        dash on;
                        dash_path /var/www/html/stream/dash;
                }
        }
}
. . .

ذخیره کنید و فایل را ببندید. بعد، این را به پایین سایت های خود اضافه کنید-available/rtmp:

sudo nano /etc/nginx/sites-available/rtmp

/etc/nginx/sites-available/rtmp
. . .
server {
    listen 8088;

    location / {
        add_header Access-Control-Allow-Origin *;
        root /var/www/html/stream;
    }
}

types {
    application/dash+xml mpd;
}

ذخیره کنید و فایل را ببندید. توجه داشته باشید که در اینجا از پورت 8088 استفاده می‌کنید، که یکی دیگر از انتخاب‌های دلخواه برای این آموزش برای جلوگیری از تضاد با سرویس‌هایی است که ممکن است در پورت 80 یا 443 اجرا می‌کنید.

sudo ufw allow 8088/tcp

در نهایت، یک دایرکتوری جریان در ریشه وب خود ایجاد کنید تا با بلوک پیکربندی مطابقت داشته باشد تا Nginx بتواند فایل های لازم برای HLS و DASH را ایجاد کند:

sudo mkdir /var/www/html/stream

بارگیری مجدد Nginx:

sudo systemctl reload nginx

اکنون باید یک جریان HLS در http://your_domain:8088/hls/stream.m3u8 و یک جریان DASH در http://your_domain:8088/dash/stream.mpd موجود باشد. این نقاط پایانی هر ابرداده لازم را در بالای فید ویدیوی RTMP شما به منظور پشتیبانی از APIهای مدرن تولید می کنند.

نتیجه

گزینه های پیکربندی که در این آموزش استفاده کردید همگی در صفحه ویکی Nginx RTMP مستند شده اند. ماژول‌های Nginx معمولاً نحو مشترکی را به اشتراک می‌گذارند و مجموعه بسیار زیادی از گزینه‌های پیکربندی را در معرض دید قرار می‌دهند، و شما می‌توانید اسناد آنها را برای تغییر هر یک از تنظیمات خود از اینجا مرور کنید.

تقریباً تمام پخش ویدیوی اینترنتی در بالای RTMP، HLS و DASH پیاده‌سازی می‌شود و با استفاده از رویکردی که در این آموزش بررسی کرده‌اید، می‌توانید جریان خود را از طریق سایر سرویس‌های پخش ارائه کنید یا به هر طریق دیگری که می‌خواهید آن را در معرض دید قرار دهید. در مرحله بعد، می توانید به پیکربندی Nginx به عنوان یک پروکسی معکوس نگاه کنید تا برخی از این نقاط پایانی مختلف ویدیو را به عنوان زیر دامنه در دسترس قرار دهید.


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/