דלג לתוכן
Callaba

פרסמו זרם RTMP עם FFmpeg ואמתו אותו

בעמוד הזה

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

בחרו תחילה את מצב הגישה

במצב מבוקר, Publisher ו-Receiver הם תפקידים נפרדים באותו שם זרם מוגדר ויכולים להשתמש באותה כתובת URL של RTMP. במצב Guest, פתחו במכוון את נקודת הקצה והשתמשו בשם זרם שאינו ריק; על המקלט להשתמש באותו שם.

לפני הפרסום

קבלו מהפריסה את כתובת ה-URL לפרסום RTMP ואת מפתח הזרם. אל תדביקו מפתח אמיתי בהיסטוריית מעטפת, בכרטיס פנייה או במאמר. ודאו שבניית FFmpeg שלכם חושפת תמיכה ב-RTMP: תיעוד הפרוטוקולים של FFmpeg מתאר אפשרויות פרוטוקול; תיעוד הפורמטים שלו מכסה את התנהגות ה-muxer.

Command
ffmpeg -protocols | grep rtmp

תוצאה צפויה: הפקודה מציגה גרסת RTMP הנתמכת בבנייה זו. אם לא, התאימו את הבדיקה לבנייה המותקנת במקום להניח שחבילה כוללת את הפרוטוקול.

פרסמו קובץ בקצב זמן אמת

Command
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

תוצאה צפויה: FFmpeg ממשיך לדווח על התקדמות פריימים במקום לשלוח את הקובץ במהירות שהאחסון מאפשר. -re קורא קובץ בקצב המקורי שלו בבדיקה תחומה זו. החליפו את מצייני המקום בערכים שהוקצו עבור המאזין; אל תשנו את נתיב היישום או את המפתח.

בצעו המרה כאשר חוזה הפלט דורש זאת

Command
ffmpeg -re -stream_loop -1 -i input.mov -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -ar 48000 -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

תוצאה צפויה: המקלט רואה מפרסם רציף עם וידאו ושמע הניתנים לפענוח. זו דוגמה, לא מרשם קידוד אוניברסלי: בחרו קצב פריימים, מרווח GOP/פריימי מפתח, קצב סיביות, רזולוציה ופרמטרי שמע עבור המקלט ותהליך ההפצה בפועל.

אמתו בשרת, ואז בתוצאה המיועדת

  1. ודאו ש-RTMP Server מדווח על המפרסם הצפוי ועל קצב הסיביות הנכנס.
  2. בדקו תמונה ושמע מהמקלט שהוגדר או מנקודת הניטור.
  3. בדקו את פלט ההמשך היחיד המיועד: הקלטה, ניתוב או נגן דפדפן.
  4. הפסיקו את התהליך פעם אחת ואמתו את מצב המקלט ואת תוכנית ההתאוששות.

עבור התקן לכידה חי, החליפו את קלט הקובץ בתחביר קלט ה-FFmpeg המתועד שלו ושמרו על אותן בדיקות קבלה בצד השרת. הימנעו מלולאות התחברות מחדש אוטומטיות עד שתדעו כיצד המאזין מטפל בהפעלות כפולות; לולאה עלולה להסתיר את השגיאה השימושית הראשונה.

בחרו בפרוטוקול נקודת הקצה שסופק

השתמשו בפרוטוקול נקודת הקצה שסופק עבור משימה זו. Callaba RTMP Server מספק את המאזין, כללי הגישה ותצוגת הפעילות; צפייה בדפדפן משתמשת בפלט שהוגדר בנפרד.

תצורה קשורה

הגדירו את המאזין ב-Callaba RTMP Server, השתמשו ב-מדריך המפעיל לבדיקות גישה ומצב, או עקבו אחר RTMP ל-HLS כאשר התוצאה המיועדת היא הפצה בדפדפן.

שולח ומקלט אבחון מקומיים

Command
ffmpeg -re -f lavfi -i testsrc2=size=1280x720:rate=30 -f lavfi -i sine=frequency=1000:sample_rate=48000 -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"

תוצאה צפויה: FFmpeg מדווח על פריימי וידאו בקצב של כ-30 fps ועל זרם שמע אחד; Callaba מדווחת על קצב הסיביות של הקלט. ערך GOP של 60 נותן פריים מפתח כל שתי שניות ב-30 fps, נקודת פתיחה מעשית לתהליך מקטעים של שתי שניות — לא הגדרת שרת נדרשת.

העתיקו רק לאחר בדיקת הקלט: ffprobe -v error -show_entries stream=codec_name,codec_type -of default=nw=1 input.mp4. השתמשו בפלט זה כדי להשוות את פרטי קודק הקלט והשמע לחוזה המתועד של המקלט. העתקה סבירה רק לאחר שהם תואמים. עבור מקלט אבחון, ffplay -fflags nobuffer "rtmp://RECEIVER_HOST:PORT/APP/STREAM_NAME_OR_KEY" אמור לפתוח תמונה וצליל לאחר שהמקלט מתחבר. עיינו ב-מקורות המסננים של FFmpeg עבור testsrc2 ו-sine.

השלבים הבאים

הגדירו את המאזין ב-Callaba RTMP Server, ולאחר מכן אמתו גישה ופעילות ב-מדריך המפעיל.