راه اندازی استریمینگ سرور RTMP و HLS با NginX در Ubuntu 18.04

آموزش مرحله به مرحله راه اندازی یک استریم سرور رایگان با پروتکل های RTMP و HLS که جزو رایج ترین پروتکل های استریمینگ (Streaming) بصورت زنده (Live) و تعاملی (VOD) در سیستم عامل لینوکس نسخه Ubuntu 18.04.

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

مقدمه

استریمینگ مدیا (Streaming media) و یا محتوای جاری به رسانه ای گفته میشود که همزمان با ارسال توسط گیرنده قابل نمایش است. به بیان دیگر برای تماشای فایل گیرنده نیاز ندارد تمامی فایل را دانلود کند تا بتواند آن را مشاهده نماید بلکه فرستنده میتواند فایل را بصورت جاری ارسال کند و گیرنده آن را تماشا کند. مثال آن پخش زنده های تلویزیون های اینترنتی صدا و سیما.

استریمینگ سرور (Streaming Server) به سروری گفته میشود که سرویس های مبتنی بر جریان زنده (استریمینگ Streaming) اعم از صوتی و تصویری یا زنده و تعاملی را ارائه میدهد. از رایج ترین پروتکل های جریان زنده میتوان RTMP و HLS و MMS (این پروتکل ربطی به MMS دریافتی در گوشی ندارد) را نام برد که هم اکنون در سایت های معروفی همچون یوتیوب و آپارات و پخش زنده اینترنتی سایت صدا و سیما استفاده میشود.

پروتکل RTMP که مخفف شده ی (Real-Time Messaging Protocol) میباشد ساخته و پرداخته شرکت Macromedia سازنده Flash است که هم اکنون تحت انحصار شرکت Adobe میباشد. این پروتکل در ابتدا برای جریان زنده صدا و تصویر روی بستر اینترنت بین یک فلش پلیر و سرور ایجاد شد که بعدها با استقبال عمومی مواجه و در اکثر دستگاه های خانگی و حرفه ای و اکثر پلیر ها اعم از موبایل و سیستم های مختلف استفاده شد. پرت پیشفرض این پروتکل 1935 است و برای استفاده آن در مرورگر وب باید از فلش پلیر استفاده نمود.

پرتکل HLS مخفف شده (HTTP Live Streaming) است. این پروتکل توسط شرکت Apple برای استفاده جریان زنده در پلیر QuickTime و سیستم عامل های OS X و iOS موبایل و مرورگر Safari نوشته شده که هم اکنون در فایرفاکس، گوگل کروم و مرورگر جدید ماکروسافت Microsoft Edge پیاده سازی شده. این پروتکل با تبدیل جریان زنده بصورت فایل های تکه ای قابلیت پخش آن را در تمامی مرورگر ها با تگ < video > مقدور کرده است، این فایل های تکه ای در یک فایل M3U playlist ذخیره شده. بر این اساس آدرس دهی این پروتکل با این پسوند تمام میشود. به دلیل استفاده از پروتکل HTTP در این پروتکل اغلب نیازی به تنظیم Firewall در مبدا و مقصد نیست و از پروکسی ها براحتی عبور میکند که تمامی اینها راحتی استفاده برای کاربران را به همراه دارد.
همچنین از ویژگی های خوب این پروتکل استفاده از قابلیت adaptive bitrate streaming میباشد. با استفاده از این قابلیت میتوان پهنای باند کاربر را شناسایی کرده و جریان زنده ای متناسب با پهنای باندش برای آن ارسال کرد.

موارد مورد نیاز برای ساخت سرور استریم

شما برای این کار باید یک سرور (یا سرور مجازی) با پهنای باند بالا برای دریافت و پخش استریم برای کاربران تهیه نمایید.

درصورتی که قصد استفاده از قابلیت ABS و یا Transcoding را دارید نیاز به رم و CPU بالایی دارید.
برای نصب نیاز به کاربر ریشه (root) یا کاربر با سطح دسترسی sudo دارید.

شروع نصب

برای کمپایل Nginx و Nginx-RTMP نیاز به ابزار و برنامه هایی دارید که با دستور زیر نصب خواهد شد:

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

در صورتی که قصد Transcoding و Re-encoding دارید بسته زیر را نیز نصب نمایید:

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:jonathonf/ffmpeg-4
sudo apt-get update
sudo apt-get install ffmpeg x264 x265
ffmpeg -version

ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers

built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609

cd /usr/local

فولدری ایجاد کرده و فایل ها را در آنجا دانلود نمایید:

mkdir nginx
cd nginx

بسته nginx را با دستور زیر دانلود کنید :

wget https://nginx.org/download/nginx-1.22.0.tar.gz

شما میتوانید لینک دانلود آخرین نسخه Nginx را از سایت nginx: download دریافت کنید و متناسب با آن، لینک بالا را تغییر دهید. بهتر است از ورژن پایدار Stable استفاده نمایید.
همچنین آخرین نسخه از بسته nginx-rtmp را با دستور زیر دانلود کنید:

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

درصورتی که ابزار zip را ندارید میتوانید با دستور زیر آن را نصب کنید:

sudo apt-get install unzip

همچنین شما باید بسته ها را Extract کنید:

tar -zxvf nginx-1.22.0.tar.gz
unzip master.zip

وارد فولدر nginx برای شروع عملیات نصب شوید:

cd nginx-1.22.0

قبل از نصب بسته باید ماژول nginx-rtmp-module به آن اضافه کنید:

sudo ./configure –with-http_ssl_module –without-http_gzip_module –add-module=../nginx-rtmp-module-master

برای کمپایل و نصب بسته دستور های زیر را وارد کنید:

make
sudo make install

حال شما میتوانید Nginx را با نصب و تنظیم بسته nginx-init-ubuntu بصورت سرویس استفاده کنید:

sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults

هم اکنون Nginx شما همراه با RTMP نصب شده است و میتوانید استفاده کنید.

تنظیمات Nginx

برای تنظیم پروتکل HLS باید مراحل زیر را انجام دهید:

ابتدا فولدری با نام HLS در دریشه Nginx میسازید.

sudo mkdir /usr/local/nginx/hls

سپس در فایل nginx.conf که موجود در فولدر conf در محل نصب برنامه است، را باز میکنیم.
برای باز کردن این فایل شما میتوانید با nano این کار را انجام دهید، درصورتی که nano ندارید میتوانید با دستور زیر آن را نصب کنید:

sudo apt-get install nano

سپس فایل nginx.conf را با دستور زیر باز کرده و تمام محتویات آن را پاک میکنیم.

sudo nano /usr/local/nginx/conf/nginx.conf

بعد از پاک کردن تمامی تنظیمات قبلی، تنظیمات جدید زیر را وارد میکنیم:

#user  nobody;
worker_processes  1;
 
error_log  logs/rtmp_error.log debug;
pid        logs/nginx.pid;
 
events {
    worker_connections  1024;
}
 
http {
    server {
        listen       80;
        server_name  localhost;
 
        location /hls {
            # Serve HLS fragments
 
            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';
 
            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }
 
 
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}
 
rtmp {
        server {
                listen 1935;
                chunk_size 8192;
 
                application hls {
                        live on;
                        meta copy;
                        hls on;
                        hls_path /tmp/hls;
        }
    }
}

برای جایگذاری (Past) تنظیمات در putty کافی است در صفحه خالی nano کلیک راست کنید. برای ذخیره تنظیمات در ویرایشگر nano، باید کلید های Crtl+X را بزنیم و برای تایید حرف Y را بزنیم و با تایید نام فایل آن را ذخیره کنید.

هم اکنون HLS شما نیز تنظیم شد و با راه اندازی مجدد nginx شما میتوانید از آن استفاده کنید. برای راه اندازی مجدد از دستور زیر استفاده کنید:

sudo service nginx restart

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

همچنین برای ارسال و دریافت Stream دو مورد امنیتی است که باید روی سرور تنظیم شود.

ابتدا برای دریافت استریم از RTMP نیاز دارید که فایروال (Firewall) را تنظیم کنید. معمولا فایروال در Ubuntu بصورت پیش فرض فعال نیست. برای تنظیم و فعال سازی آن دستورات زیر را وارد کنید:

sudo ufw limit ssh
sudo ufw allow 80
sudo ufw allow 1935
sudo ufw enable

مبحث بعدی بحث اجازه دسترسی از راه دور به منابع یا همان CORS است که برای HLS کاربردی است. شما باید اجازه دسترسی به فایل ها را از خارج از سرور به کاربران بدهید.
برای ایجاد دسترسی باید فایل crossdomain.xml را در فولدر html بسازیم و اجازه ی لازم را در آن وارد کنیم.
برای ایجاد فایل و باز کردن ادیتور دستور زیر را وارد کنید:

sudo nano /usr/local/nginx/html/crossdomain.xml

در ادیتور nano شما باید تنظیمات زیر را past و فایل را ذخیره کنید:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

هم اکنون از نظر امنیتی نیز شما میتوانید استریم را ارسال و تماشا نمایید.

ارسال و تماشای پخش زنده

برای ارسال پخش زنده شما باید استریم خود را با پروتکل RTMP به nginx ارسال کرده و آن را با HLS و یا RTMP تماشا کنید. بدین منظور شما میتوانید از نرم افزار های Adobe Flash Media Live Encoder و یا Open Broadcaster Software استفاده کنید که خوش بختانه هر دوی آنها رایگان هستند.

برای دانلود برنامه Adobe Flash Media Live Encoder باید از این لینک Flash Media Live Encoder و برای دانلود OBS از لینک Open Broadcaster Software اقدام نمایید. ( آموزش کامل OBS از مقدماتی تا پیشرفته )
با استفاده از اطلاعات زیر استریم خود را ارسال نمایید:

Host : rtmp://ip_server:1935/hls

StreamName : easylive

در قسمت ip_server آی پی ادرس سرور خود را وارد کنید و در قسمت Stream name یک نام دلخواه وارد کنید.

برای تماشای پخش زنده میتوانید از نرم افزار VLC استفاده کنید. در منوی Media گزینه Open Network Stream را میزنیم و در کادر URL لینک rtmp://ip_server:1935/hls/easylive را وارید کنید. دقت فرمایید که لینک ارسال با لینک دریافت یکی است و تفاوت آن فقط پشت سر هم بودن Host و Stream name است.
همچنین درصورتی که بخواهید با پروتکل HLS پخش زنده ارسالی را تماشا کنید باید لینک زیر را وارد کنید http://ip_server/hls/easylive.m3u8 که تفاوت آن با rtmp پروتکل و پورت و اپلیکیشن بعد از ادرس سرور و پسوند آخر فایل است. در آدرس فوق شما باید به جای ip_server آی پی سرور خود را وارد کنید و در قسمت easylive استریم نامی که در هنگام ارسال وارد کردید را وارد کنید.

منبع blog.ghm.me
ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.