بلاگ

بازدید: 585

صفر تا صد راه اندازی استریمینگ سرور RTMP و HLS

مقدمه

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

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

 

استریمینگ مدیا (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 نیاز به ابزار و برنامه هایی دارید که با دستور زیر نصب خواهد شد:

شروع نصب

برای کمپایل 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 استریم نامی که در هنگام ارسال وارد کردید را وارد کنید.

 

سخن پایانی

امیدواریم این آموزش برای شما کاربردی باشد و همچنین اگر سوالی دارید می توانید آن ها را با در میان بگذارید  تا کارشناسان ویدئوکلیک شما را در این زمینه یاری کنند.

image

ارسال شده توسط: مدیریت

  • برچسب ها:

  • استریمینگ سرور، Nginx، پروتکلRTMP

بیان دیدگاه

بحث درباره این مقاله را شما آغاز کنید!

ارسال دیدگاه