آموزش مرحله به مرحله راه اندازی یک استریم سرور رایگان با پروتکل های 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 میباشد. با استفاده از این قابلیت میتوان پهنای باند کاربر را شناسایی کرده و جریان زنده ای متناسب با پهنای باندش برای آن ارسال کرد.

موارد مورد نیاز

شما برای این کار باید یک سرور (یا سرور مجازی) با پهنای باند بالا برای دریافت و پخش استریم برای کاربران تهیه نمایید.
سیستم عامل توصیه شده Ubuntu Server 18.04 میباشد. در صورتی که میخواهید این آموزش را روی سیستم عامل های دیگر مانند ویندوز امتحان کنید با مراجعه به این لینک آموزش را بصورت تصویری مطالعه کنید.
درصورتی که قصد استفاده از قابلیت ABS و یا Transcoding را دارید نیاز به رم و CPU بالایی دارید.
برای نصب نیاز به کاربر ریشه (root) یا کاربر با سطح دسترسی sudo دارید.

شروع نصب

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

ali@linux$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

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

ali@linux$ sudo apt-get install software-properties-common
ali@linux$ sudo add-apt-repository ppa:jonathonf/ffmpeg-4
ali@linux$ sudo apt-get update
ali@linux$ sudo apt-get install ffmpeg x264 x265
برای بررسی اینکه ffmpeg بدرستی نصب شده است:
ali@linux$ 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
...

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

ali@linux$ mkdir nginx
ali@linux$ cd nginx

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

ali@linux$ wget https://nginx.org/download/nginx-1.14.2.tar.gz
شما میتوانید لینک دانلود آخرین نسخه Nginx را از سایت nginx: download دریافت کنید و متناسب با آن، لینک بالا را تغییر دهید. بهتر است از ورژن پایدار Stable استفاده نمایید.
همچنین آخرین نسخه از بسته nginx-rtmp را با دستور زیر دانلود کنید:
ali@linux$ wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
درصورتی که ابزار zip را ندارید میتوانید با دستور زیر آن را نصب کنید:
ali@linux$ sudo apt-get install unzip
همچنین شما باید بسته ها را Extract کنید:
ali@linux$ tar -zxvf nginx-1.14.2.tar.gz
ali@linux$ unzip master.zip
وارد فولدر nginx برای شروع عملیات نصب شوید:
ali@linux$ cd nginx-1.14.2

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

ali@linux$ ./configure --with-http_ssl_module --without-http_gzip_module --add-module=../nginx-rtmp-module-master
برای کمپایل و نصب بسته دستور های زیر را وارید کنید:
ali@linux$ make
ali@linux$ sudo make install
حال شما میتوانید Nginx را با نصب و تنظیم بسته nginx-init-ubuntu بصورت سرویس استفاده کنید:
ali@linux$ sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
ali@linux$ sudo chmod +x /etc/init.d/nginx
ali@linux$ sudo update-rc.d nginx defaults
هم اکنون Nginx شما همراه با RTMP نصب شده و میتوانید استفاده کنید.

برای تنظیم پروتکل HLS باید مراحل زیر را انجام دهید:
ابتدا فولدری با نام HLS در دریشه Nginx میسازید.

ali@linux$ sudo mkdir /usr/local/nginx/hls
سپس در فایل nginx.conf که موجود در فولدر conf در محل نصب برنامه است، را باز میکنیم.
برای باز کردن این فایل شما میتوانید با nano این کار را انجام دهید، درصورتی که nano ندارید میتوانید با دستور زیر آن را نصب کنید:
ali@linux$ sudo apt-get install nano
سپس فایل nginx.conf را با دستور زیر باز کرده و تمام محتویات آن را پاک میکنیم.
ali@linux$ 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 شما میتوانید از آن استفاده کنید. برای راه اندازی مجدد از دستور زیر استفاده کنید:

ali@linux$ sudo service nginx restart

 

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

 

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

ali@linux$ sudo ufw limit ssh
ali@linux$ sudo ufw allow 80
ali@linux$ sudo ufw allow 1935
ali@linux$ sudo ufw enable

 

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

ali@linux$ 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 اقدام نمایید.
با استفاده از اطلاعات زیر استریم خود را ارسال نمایید:

Host : rtmp://ip_server:1935/hls

StreamName : test_ghm

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

 

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

درصورتی که بخواهید پخش زنده را در وبسایت خود قراردهید، پست آموزش قرار دادن پلیر HLS در وبسایت را مطالعه نمایید.

ویدیو این آموزش را نیز میتوانید در یوتیوب YouTube و آپارات تماشا کنید.

 

امیدوارم این آموزش براتون کاربردی باشه