איך להגדיר שרת NGINX RTMP לצורך שידור

האם הזרמת השידור החי שלך קורסת כל פעם? אם כן, תצטרך למצוא דרך אמינה לארח את הזרמת השידור שלך. אך אם אין באפשרותך לשלם עבור אפשרויות יקרות, אין צורך לדאוג! NGINX RTMP יכול להציל את המצב. NGINX RTMP הוא מודול קוד פתוח אמין, אז תדע מה זה אומר – זה חינם!

במדריך הזה, תלמד כיצד להגדיר שרת NGINX RTMP כך שתוכל להתקין זרם חי אמין עם האתר שלך.

מוכן? קרא הלאה והתחל להגדיר זרם חי!

דרישות מוקדמות

מדריך זה יהיה הדגמה מעשית. אם ברצונך לעקוב, וודא שיש לך את הדברים הבאים:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • NGINX מותקן על שרת Linux.
  • A non-root user with sudo privileges.
  • משאבים מינימליים הנדרשים כדי להפעיל שרת זרימת חיים – 2 ג'יגה RAM, 2 ליבות CPU, ו-20 ג'יגה בתים דיסק.

ערכים אלו הם המלצות בלבד. הערכים המדויקים תלויים בצרכי התעבורה האמיתיים שלך. ככל שיש לך יותר תעבורה, תצטרך להשתמש בשרתים עוצמתיים יותר כדי לארח ולהזרים את הווידאו החי שלך. בסביבת פיתוח, שרת NGINX RTMP עם 2 ליבות CPU ו-2 ג'יגה RAM מספיק לבדוק.

הגדרת שרת RTMP

עכשיו שהתנאים המוקדמים נגמרו, תוכל כעת להתקין ולהגדיר את השרת שלך RTMP. תתקין תחילה מודול NGINX כדי להמיר את השרת שלך NGINX לשרת RTMP. לאחר מכן, תגדיר את קובץ ההגדרות של NGINX כדי לאפשר לזרמים חיים למשתמשים.

1. פתח את הטרמינל והפעל את הפקודה apt update כדי לעדכן את כל החבילות שלך. הפקודה הזו מסנכרנת את בסיס הנתונים שלך עם בסיס הנתונים העדכני ביותר מ-Ubuntu.

sudo apt update -y
Updating all your packages

2. לאחר מכן, הפעל את הפקודה הבאה כדי להתקין שרת RTMP בשרת ה-Linux שלך.

המודול libnginx-mod-rtmp הוא מודול NGINX הממיר את השרת שלך NGINX לשרת RTMP. מודול זה מאפשר ל-NGINX לתקשר עם Adobe Flash Player כך שתוכל לשדר וידאו או שמע חיים, והוא נתמך באופן רשמי על ידי צוות הפיתוח שלו.

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. פתח את קובץ /etc/nginx/nginx.conf בעורך הטקסט האהוב עליך כדי להגדיר את תוכנית השידור החיה שלך RTMP. קובץ nginx.conf הוא קובץ הגדרות NGINX, אשר מכיל הפניות או בלוקים מספר להגדיר את ההתנהגות של שירות ה-NGINX.

4. לבסוף, מלא את קובץ nginx.conf בקוד הבא, שמור את השינויים וצא מהעורך.

הקוד למטה אומר ל-NGINX לפעול כשרת RTMP ולהפעיל זרמים חיים למשתמשים שלך.

# קוד זה מגדיר ל-NGINX לפעול כשרת RTMP. 
rtmp {
		server {
		# מגדיר את הפורט שבו השרת יאזין.
    listen 1935;
				# גודל כל חתיכת נתונים שישלחו.
				# Flash Player יקפוא אם גודל החתיכה קטן מדי, 
				# מה שיכול לגרום למצב של חוסר בהזרמה בחוסן.
        chunk_size 4096;
				# כתובות ה-IP שמורשות לפרסם תוכן לשרת.
				# מרשה רק למחשב המקומי לפרסם תוכן ב-NGINX RTMP.
				allow publish 127.0.0.1;
				# מכחיש את הפרסום לכל אחד אחר.
				deny publish all;
				# מגדיר אפליקציה בשם "live"
        application live {
				# מספר ל-NGINX לאפשר זרמים חיים למשתמשים שלך.
						live on;
				# שורה זו מגדירה ל-NGINX לבטל הקלטה. אם השורה הזו לא כלולה, 
				# NGINX ימשיך להקליט ולשמור את הזרם לצמיתות בדיסק שלך.
						record off;
				}
		}
}

מאבטחת את הרשת על ידי הגדרת חומת אש

כבר הגדרת את שרת ה-NGINX RTMP שלך, אך עליך לאבטח את הרשת שלך ולשלוט בזרימת התעבורה. איך? על ידי התקנת חומת אש, Uncomplicated Firewall (UFW), שהיא חומת האש ברירת המחדל באובונטו.

אם תשים את שרת ה-NGINX RTMP שלך מאחורי גישה מוצפנת, תצטרך לאפשר פתח נתיב לשרת NGINX RTMP על ידי הגן האש. מאחר והגדרת את שרת ה-NGINX RTMP שלך להאזין בפורט 1935, תצטרך לאפשר פתח זה דרך הגן האש שלך.

1. הריצו את הפקודה הבאה כדי להוסיף כלל הגן שפותח את הפורט 1935 בגישה מוצפנת שלכם. כלל הגן הזה מאפשר לפורט שרת ה-NGINX RTMP שלכם, 1935, להיות נגיש לכל בקשות נכנסות ויוצאות.

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. לאחר מכן, הריצו את הפקודה הבאה כדי לבטל ולהפעיל מחדש את הגן האש שלכם. הפקודה הזו מפעילה מחדש את הגן האש לכל שינויים בו כדי שיתקפלו.

sudo ufw disable && sudo ufw enable

3. לבסוף, הריצו את הפקודה למטה כדי לבדוק את מצב הגן האש שלכם ולוודא אם הפורט 1935 נגיש מכל כתובות ה-IP (בכל מקום).

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

צילום וידאו באמצעות FFmpeg

השרת ה-NGINX RTMP שלך כעת מופעל, אז זה הזמן להשתמש FFmpeg כדי ליצור סרטון דוגמה ולשדר אותו דרך שרת ה-NGINX RTMP שלך. FFmpeg הוא פתרון מלא להקלטה, המרה ושידור של אודיו ווידאו ביישומים שונים כמו VLC, OMXPlayer, VobSub, ועוד.

תבדקו את השידור של הוידאו בשרת שלכם, וניתן להשתמש בכל וידאו שהוא בגודל קטן לשידור.

1. הרץ את הפקודה apt install למטה כדי להתקין את התלות הדרושות עבור FFmpeg כדי שהתוכנה תרוץ תקין.

הפקודה למטה מתקינה את הרכיבים הבאים:

  • libpcre3 – ספרייה רגולרית המשמשת על ידי ערכי הכלים של ffmpeg כדי לעזור לפרש ולהדגיש ביטויים רגולריים.
  • libpcre3-dev – חבילה זו מכילה את הכותרות לפיתוח של חבילת libpcre3.
  • libssl-dev – ספריית OpenSSL הקריפטוגרפית המשמשת ליצירת חיבורי SSL/TLS בשרת RTMP שלך.
  • zlib1g-dev: ספריית zlib היא ספריית דחיסה ופירוק המאיצה את העברת קבצי הווידאו והאודיו ברשת.
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. לאחר מכן, הרץ את הפקודה הבאה כדי להתקין את ffmpeg בשרת שלך.

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. לבסוף, הרץ את הפקודה ffmpeg כדי לבצע את הפעולות הבאות וליצור זרם חי חדש:

  • קרא קלט (re) מהקובץ המקור (i) בקצב המקורי. ודא שאתה מחליף את video.mp4 בנתיב ושם קובץ הווידאו שלך.
  • העתק את פורמט הווידאו כמותו (c:v copy), וקודד את השמע בקודק AAC (c:a aac).
  • קבע את קצב הדגימה של השמע ל-44100 הרץ (ar 44100). אם קצב הדגימה של הווידאו שלך נמוך מהערך הזה (44100 הרץ), FFmpeg מבצע אינטרפולציה כדי להגביר את קצב הדגימה.
  • הגדר ערוצי שמע לערוץ אחד (מונו) (ac 1), ואת התבנית הווידאו שבה FFmpeg ישדר (-f flv).
  • הגדר את תוכנית השידור החיה שלך ב- RTMP (rtmp://localhost/live/streamname.flv) שהגדרת בקטע "הגדרת שרת RTMP" (שלב ארבע). ניתן לשנות את streamname.flv לשם כלשהו שתבחר.
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

כפי שאתה רואה למטה, פקודת ה- ffmpeg מדפיסה את מספר ה- פריימים בכל שנייה שהוא זוהה, את קצב הביט, ואת ה- FPS של זרם השידור החי שנוצר חדש.

Viewing the RTMP Live Stream Data

סיכום

במדריך זה, למדת כיצד להגדיר את שרת ה- NGINX RTMP שלך ולאפשר זרמים חיים על ידי שינוי בקובץ התצורה של NGINX. נגעת גם בהגדרת זרם חי וידאו באמצעות כלי ה- FFmpeg דרך שרת ה- NGINX RTMP שלך.

הבנת פתאום שהקמת זרם חי לא צריכה לעלות לך כל שקל. בנקודה זו, למה לא לשבץ את הזרם שלך לתוך הדף האינטרנטי שלך באמצעות HTML5 ואלמנט <video>. או להקים את OBS Studio עבור זרם RTMP שלך?

Source:
https://adamtheautomator.com/nginx-rtmp/