Hostwinds دروس

نتائج البحث عن:


جدول المحتويات


ما هو RTMP؟
التركيب
تثبيت التبعيات
تحميل برنامج
ترجمة البرمجيات
ترتيب
تطبيقات متعددة
أذونات
إعادة الترميز
الدفع إلى خدمات أخرى
HLS
تشغيل HLS
SSL
تكوينات أخرى
تدفق

بث مباشر من VPS مع Nginx + RTMP

العلامات: VPS 

ما هو RTMP؟
التركيب
تثبيت التبعيات
تحميل برنامج
ترجمة البرمجيات
ترتيب
تطبيقات متعددة
أذونات
إعادة الترميز
الدفع إلى خدمات أخرى
HLS
تشغيل HLS
SSL
تكوينات أخرى
تدفق

ما إذا كنت تريد أن يكون خادم يعمل كترحيل لك لتتمكن من الدخول إلى خدمات متعددة في وقت واحد، أعد تشفير دفق الفيديو الخاص بك إلى تنسيقات أو دقة أو بيات مختلفة أو دفق من مقاطع الفيديو المسجلة مسبقا وطريقة جيدة للقيام بذلك هو مع خادم يعمل nginx مترجمة مع وحدة RTMP.

البث المباشر يستخدم الكثير من النطاق الترددي. يستخدم النطاق الترددي الدقيق على عدد التدفقات، وكذلك معدل البت.

يمكن تقليل معدل معدل مرفش الفيديو تقليل استخدام النطاق الترددي الخاص بك بتكلفة جودة الفيديو.

ما هو RTMP؟

RTMP لتقف على بروتوكول المراسلة في الوقت الحقيقي وهي طريقة شائعة وموحدة تستخدم العديد من الخدمات (مثل YouTube و Twitch وما إلى ذلك) ، أو على الأقل تقدم ، لبث الفيديو عبر الإنترنت.

التركيب

يستخدم هذا الدليل CentOS 7 كنظام تشغيل للخادم.

يمكن تكوين Nginx + RTMP على توزيعات Linux الأخرى ويتبع نفس التعليمات، باستخدام "إدارة الحزمة" الأخرى ومسارات الملفات الافتراضية الأخرى.

تثبيت التبعيات

قم بتحديث نظامك

yum update -y

قم بتثبيت أدوات تطوير CentOS

yum groupinstall -y 'Development Tools

قم بتثبيت مستودع EPEL

yum install -y epel-release

تثبيت التبعيات

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel PCRE-devel GeoIP GeoIP-devel

أضف مفتاح ffmpeg GPG ، وقم بتثبيت ffmpeg

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

تحميل برنامج

أنشئ دليل عمل أو انتقل إليه

cd /usr/local/src/

احصل على أحدث إصدار من Nginx من هنا

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

استنساخ وحدة Nginx RTMP من ملف هنا

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

إزالة ملفات tar غير الضرورية

rm -f *.tar.gz

ترجمة البرمجيات

انتقل إلى مجلد Nginx الذي تم تنزيله

cd nginx-1.17.0/

قم بتشغيل البرنامج النصي للتكوين لإضافة SSL ووحدة RTMP
قم بتحديث مسار ملفات وحدة الوحدة النمطية - Add حسب الضرورة للإشارة إلى حيث استنسخت وحدة Nginx-RTMP

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

تجميع Nginx

make

قم بتثبيت Nginx

make install

ابدأ وتمكين Nginx

systemctl start nginx
systemctl enable nginx

ترتيب

لتكوين خدمة RTMP، تحتاج إلى إضافة قسم RTMP إلى ملف تكوين Nginx الخاص بك، والتي يجب أن تكون /etc/nginx/nginx.conf افتراضيا.

أضف قسم RTMP إلى ملف conf كما يلي:

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

في هذا التكوين، أخبرنا الخادم الاستماع بأي طلبات على المنفذ 1935 (المنفذ الافتراضي ل RTMP) وتحديد تطبيق يسمى "LIVE" لقبول تدفقاتنا.

هذا التكوين كافٍ لجعل الخادم يقبل الدفق ، ولكن هناك تكوينات أخرى يمكنك تعيينها لوظائف إضافية.

ثم عند دفق، ستقوم بتعيين وجهتك ك RTMP: // server_address / التطبيق، حيث يكون Server_Address هو عنوان IP أو عنوان الخادم الخاص بك، والتطبيق هو اسم التطبيق الذي قمت بتكوينه في تكوين Nginx ("Live" في هذا المثال).

مثال: rtmp: //127.0.0.1/live

تطبيقات متعددة

ضمن كتلة الخادم {}، يمكنك تكوين أكبر عدد ممكن من التطبيقات. القيود الوحيدة المعمول بها هي أن كل تطبيق يجب أن يكون لديك اسم فريد من نوعه.

أذونات

يمكنك تحديد أذونات ما يمكن أن يقوم IPS بتشغيله إلى الخادم وما يمكن أن يقومه IPS بتشغيل الدفق من هذا الخادم.

لإضافة قاعدة أذونات، أضف خطا إما داخل الخادم {} أو تطبيق {} كتلة بالتنسيق التالي:

يحدد استخدام "السماح" أو "رفض" ما إذا كانت القاعدة تسمح أو تنفي الاتصال من المصدر المحدد.

يحدد استخدام "النشر" أن موقع المصدر يمكن أن تدفقه إلى هذا الخادم.يحدد استخدام "Play" أن موقع المصدر يمكنه تشغيل دفق من هذا الخادم.

باستخدام "ALL" حيث يعمل الموقع ككذب جميعا لأي عنوان يتصل بهذا الخادم.خلاف ذلك، يمكنك تعيين عنوان IP معين.

إن وضع قاعدة الإذن في كتلة الخادم {} يجعل الحكم العالمي عبر جميع التطبيقات. وضع قاعدة الإذن في تطبيق {} كتلة تنطبق القاعدة على هذا التطبيق فقط.

أمثلة:

اسمح لـ 127.0.0.1 بالتدفق إلى هذا الخادم ، لكن ارفض أي مصادر أخرى:

allow publish 127.0.0.1;
deny publish all;

السماح بالتشغيل لجميع المصادر باستثناء 127.0.0.1:

allow play all;
deny play 127.0.0.1;

إعادة الترميز

يمكنك استخدام عبارة EXEC من داخل تطبيق {} Block لتنفيذ أمر. باستخدام هذه الطريقة، يمكنك تمرير دفق RTMP المستلم إلى معالج فيديو، مثل FFMPEG، للترميز.

مثال: قم بتشفير الدفق المستلم إلى تنسيق mp4 وحفظه كملف

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

الدفع إلى خدمات أخرى

يمكنك دفع الدفق من تطبيق إلى جهاز استقبال آخر ببساطة باستخدام عبارة الدفع.

على سبيل المثال، يمكنك إضافة العبارة التالية إلى أي تطبيق {} كتلة لدفع الدفق المستلم إلى نشل، باستخدام واحد من استيعاب العناوين (في هذه الحالة، عنوان سياتل). مجرد استبدال {stream_key} مع مفتاح تيار نشل الخاص بك.

push rtmp://live-sea.twitch.tv/app/{stream_key};

يمكنك أن تفعل الشيء نفسه بالنسبة لأي منصة أخرى تقدم عناوين RTMP استيعابها، يمكنك تدويرها ويمكنها حتى سرد بيانات دفع متعددة للسماح بتدفق منصات متعددة في الأساس.

HLS

HLS أو البث المباشر عبر HTTP، هو تنسيق شائع إلى حد ما لتدفق الفيديو عبر بروتوكولات HTTP و HTTPS، مما يجعل من الأسهل بشكل كبير في تضمين الدفق في صفحة ويب.

لتمكين HLS ، ما عليك سوى إضافة العبارات التالية إلى أي من كتل التطبيق {}.

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

ثم تأكد من وجود دليل HLS_PATH من خلال تشغيل الأمر:

mkdir -p /mnt/has/live

يمكنك تغيير / تطبيق MNT / HLS / $ إلى أي مسار مجلد تريده.سيتم استبدال تطبيق $ باسم التطبيق (في هذه الحالة، "Live").
سيكون هذا هو الموقع الذي سيتم حفظ ملفات HLS .m3u8 فيه.

قد تقوم أيضا بضبط قيم HLS_FRASE و HLS_PLAYLIST_LENTER لتناسب احتياجاتك.
2S و 4S هي القيم التي وجدناها للعمل الأفضل عند التدفق مع فاصل إطعام مفاتيح ثنائي الثاني.

ثم تحتاج أيضا إلى إضافة كتلة HTTP {} إلى تكوين Nginx الخاص بك. يجب أن تكون هذه الكتلة كتلة مستوى أعلى، على نفس المستوى مثل Block RTMP {}. يجب أن تكون هذه الكتلة الجديدة كما يلي:

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        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;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

يمكنك تغيير المنافذ المدرجة في الاستماع إلى البيانات إلى أي منفذ تريد خدمة الفيديو من. إذا قمت بتغيير المنفذ بعيدا عن منافذ HTTP / S قياسية (80 و 443)، فستحتاج إلى تحديد المنفذ بعد عنوان الخادم بالتنسيق التالي: http: // {server_address}: {port}.

مثال: http://example.com:8080/

بعد ذلك، يوفر هذه التغييرات في ملف تكوين Nginx الخاص بك، أعد تشغيل Nginx عن طريق تشغيل الأمر:

systemctl restart nginx

تشغيل HLS

مع تمكين HLS ، يمكنك الآن تضمين الدفق في صفحات الويب الخاصة بك باستخدام أي مشغل فيديو يدعم تشغيل HLS ، مثل Video.JS أو PlayerJS.

ستوفر لاعبك مع العنوان المصدر بالتنسيق التالي:

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

سيكون {server_address} هو عنوان IP الخاص بك أو مجال الخادم الخاص بك، فإن {app_name} سيكون اسم التطبيق {} block التي تقوم بتدفقها إليها، وسيقوم {secret_key} هو المفتاح السري الذي قمت بتعيينه في برنامج البث الخاص بك (مثل OBS ).

مثال:

http://example.com/live/secret_key.m3u8

SSL

يمكنك تقديم HLS على HLS HTTPS أيضا. للقيام بذلك، تحتاج إلى توفير شهادة SSL ومفتاح خاص داخل الخادم {} كتلة مع العبارات التالية:

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

يجب أن تكون الشهادة للمجال الذي حددته في عبارة Server_Name.

ستحتاج أيضا إلى تحرير / إضافة بيانات الاستماع إلى البيانات للاستماع إلى المنفذ 443 (منفذ HTTPS) وفرض استخدام اختياريا من SSL. بيانات الاستماع لذلك يجب أن تكون كما يلي:

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

إذا لم يكن لديك شهادة SSL لمجالك ، يمكنك استخدام دعونا تشفير للحصول على شهادة مجانية.

تكوينات أخرى

هناك الكثير من عبارات التكوين الأخرى التي يمكنك إضافتها لتوسيع وظائف وحدة RTMP لتكوين Nginx.

يمكن العثور على الوثائق الكاملة لما يمكنك إضافته وتكوينه هنا.

تدفق

بعد تكوين الخادم الخاص بك، يمكنك دفق من أي برامج تدفق الفيديو تدعم الدفق إلى عنوان RTMP.قد تفكر في استخدام OBS كما قوية جدا، لديه دعم البرنامج المساعد، تحظى بشعبية مع مجتمع كبير، وهو مفتوح.

للدفق إلى الخادم الخاص بك، كل ما عليك فعله هو تعيين وجهة الدفق كعنوان الخادم الخاص بك، مع اسم التطبيق، وتعيين مفتاح خاص.يجب أن يكون تنسيق عنوان الخادم كما يلي:

RTMP://{server_address}/{app_name}

{server_address} هو IP الخاص بك أو مجال قمت بتعيينه للإشارة إلى هذا الخادم.{app_name} هو اسم التطبيق {} كتلة التي قمت بتعيينها في تكوين Nginx.بعد تكوين مثالنا من الأعلى، سيكون اسم التطبيق هذا "مباشر".

إن توفير مفتاح سري فريد سيضمن أن التدفق فريد من نوعه، حتى لو كانت المصادر الأخرى تدفقها إلى نفس التطبيق.

بعد المثال أعلاه، سيتم إذن الدفق، ثم يعيش في RTMP: //example.com/live/secret_key، والذي يمكنك التقاطه باستخدام أي تشغيل فيديو يمكنه فتح دفق RTMP، مثل VLC.

كتب بواسطة Hostwinds Team  /  يونيو 18, 2019