Οδηγός · FFmpeg για ζωντανό βίντεο
Οδηγός ροής FFmpeg από μία εντολή σε ένα ζωντανό κανάλι
Αυτός ο οδηγός ροής FFmpeg σας βάζει ζωντανά με μία μόνο εντολή: το FFmpeg διαβάζει το αρχείο, την κάμερα ή την οθόνη σας, το κωδικοποιεί σε βίντεο H.264 και ήχο AAC και το στέλνει μέσω RTMP στο κανάλι σας Primcast.
Θα βρείτε την εντολή για κάθε είδος πηγής, τις ρυθμίσεις κωδικοποιητή που κρατούν την αναπαραγωγή ομαλή για τους θεατές σας και μια έκδοση SRT για μεγάλες ή ασταθείς συνδέσεις.
ffmpeg -re -i input.mp4 \ -c:v libx264 -preset veryfast \ -b:v 2500k -maxrate 2500k -bufsize 5000k \ -pix_fmt yuv420p \ -force_key_frames "expr:gte(t,n_forced*2)" \ -sc_threshold 0 \ -c:a aac -b:a 128k -ar 44100 -ac 2 \ -f flv "rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream"
Αντικαταστήστε τις επισημασμένες λέξεις με τις δικές σας τιμές. Το βήμα 02 εξηγεί κάθε σημαία.
Πριν ξεκινήσετε: FFmpeg και τέσσερις τιμές από τον πίνακα ελέγχου σας
Χρειάζεστε το FFmpeg στον υπολογιστή που στέλνει το βίντεο και τις ρυθμίσεις κωδικοποιητή του καναλιού σας. Και τα δύο παίρνουν μερικά λεπτά.
Εγκατάσταση του FFmpeg
Χρησιμοποιήστε τον διαχειριστή πακέτων του συστήματός σας και μετά ελέγξτε ότι εκτελείται. Οποιαδήποτε τρέχουσα έκδοση λειτουργεί με τις εντολές αυτής της σελίδας.
# Windowswinget install Gyan.FFmpeg# macOS (Homebrew)brew install ffmpeg# Debian or Ubuntusudo apt install ffmpeg# check itffmpeg -version
Αντιγράψτε τις ρυθμίσεις κωδικοποιητή σας
Συνδεθείτε, ανοίξτε τον λογαριασμό βίντεό σας και βρείτε την κάρτα Ζωντανή ροή. Οι Ρυθμίσεις κωδικοποιητή της αναφέρουν όλα όσα χρειάζεται το FFmpeg:
- Διακομιστής
- Μοιάζει με
rtmp://HOST:1935/APP. Το όνομα του κεντρικού υπολογιστή και της εφαρμογής σας. - Όνομα ροής
- Συνήθως
livestream. Μπαίνει στο τέλος της διεύθυνσης. - Όνομα χρήστη
- Το στοιχείο σύνδεσης δημοσίευσής σας.
- Κωδικός πρόσβασης
- Κάντε κλικ στο Εμφάνιση για να τον δείτε ή στο Νέος κωδικός για να τον αντικαταστήσετε.
Αν ο πίνακας ελέγχου σας εμφανίζει επίσης μια διεύθυνση Πλησιέστερος διακομιστής, χρησιμοποιήστε εκείνη ως διακομιστή. Ο κωδικοποιητής σας συνδέεται τότε στην πλησιέστερη τοποθεσία μας (Νέα Υόρκη, Μαϊάμι, Σαν Φρανσίσκο, Άμστερνταμ ή Βουκουρέστι) και η ροή ταξιδεύει στο κανάλι σας μέσω του δικτύου μας. Το όνομα ροής, το όνομα χρήστη και ο κωδικός πρόσβασης παραμένουν ίδια.
Η πρώτη σας ροή RTMP με FFmpeg, σημαία προς σημαία
Βάλτε το όνομα χρήστη και τον κωδικό πρόσβασής σας μπροστά από τον κεντρικό υπολογιστή, ακολουθούμενα από ένα @, και προσθέστε το όνομα ροής μετά την εφαρμογή. Το υπόλοιπο της εντολής λέει στο FFmpeg πώς να κωδικοποιήσει.
rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream
Κρατήστε τα εισαγωγικά γύρω από τη διεύθυνση. Αν ο κωδικός σας περιέχει @, : ή /, γράψτε τα ως %40, %3A και %2F ή κάντε κλικ στο Νέος κωδικός στον πίνακα ελέγχου για έναν χωρίς αυτά.
| Σημαία | Τι κάνει |
|---|---|
-re | Διαβάζει ένα αρχείο στην πραγματική του ταχύτητα αναπαραγωγής. Χωρίς αυτήν, το FFmpeg στέλνει ένα αρχείο όσο πιο γρήγορα μπορεί και η ροή διακόπτεται. Παραλείψτε την για κάμερες και συσκευές καταγραφής, που ήδη λειτουργούν σε πραγματικό χρόνο. |
-i input.mp4 | Η είσοδός σας: ένα αρχείο, μια συσκευή ή μια άλλη ροή. Το βήμα 03 έχει μία για κάθε περίπτωση. |
-c:v libx264 | Κωδικοποιεί το βίντεο ως H.264, το οποίο μπορούν να εμφανίσουν όλα τα προγράμματα αναπαραγωγής και οι περιηγητές. |
-preset veryfast | Ανταλλάσσει λίγη ποιότητα με ταχύτητα, ώστε ο υπολογιστής να συμβαδίζει σε πραγματικό χρόνο. Δοκιμάστε faster ή medium αν έχετε περισσευούμενη CPU. |
-b:v 2500k -maxrate 2500k -bufsize 5000k | Διατηρεί το βίντεο κοντά σε σταθερά 2.500 kbps, ώστε η ροή να μη ζητά ποτέ περισσότερη μεταφόρτωση από όση έχετε. Το βήμα 04 έχει τιμές για κάθε ανάλυση. |
-pix_fmt yuv420p | Η μορφή χρώματος που περιμένουν τα τηλέφωνα, οι τηλεοράσεις και οι περιηγητές. |
-force_key_frames "expr:gte(t,n_forced*2)" | Ένα βασικό καρέ κάθε 2 δευτερόλεπτα, ανεξάρτητα από τον ρυθμό καρέ. Η αναπαραγωγή χωρίζεται σε τμήματα στα βασικά καρέ, οπότε αυτό έχει τη μεγαλύτερη σημασία. |
-sc_threshold 0 | Σταματά τα επιπλέον βασικά καρέ σε αλλαγές σκηνής, ώστε ο ρυθμός των 2 δευτερολέπτων να παραμένει σταθερός. |
-c:a aac -b:a 128k -ar 44100 -ac 2 | Στερεοφωνικός ήχος AAC στα 128 kbps και 44,1 kHz. Ο ενσωματωμένος κωδικοποιητής AAC του FFmpeg δεν χρειάζεται επιπλέον σημαία. |
-f flv | Τυλίγει τη ροή σε FLV, τη μορφή που μεταφέρει το RTMP. |
Παλαιότεροι οδηγοί, συμπεριλαμβανομένης της πρώτης έκδοσης αυτής της σελίδας, προσθέτουν -strict experimental για το AAC. Το FFmpeg αφαίρεσε την ετικέτα experimental από τον κωδικοποιητή AAC στην έκδοση 3.0, οπότε μπορείτε να την παραλείψετε.
Επιλέξτε την πηγή σας: αρχείο, κάμερα web, οθόνη ή κάμερα IP
Μόνο το τμήμα εισόδου αλλάζει. Σε κάθε παράδειγμα, το [encoding] αντιπροσωπεύει τις σημαίες βίντεο και ήχου από το βήμα 02 και το RTMP_ADDRESS τη διεύθυνσή σας με εισαγωγικά.
Ροή αρχείου βίντεο με FFmpeg
Προσθέστε -stream_loop -1 πριν από την είσοδο για να παίζει σε επανάληψη μέχρι να σταματήσετε το FFmpeg.
ffmpeg -re -stream_loop -1 -i video.mp4 \ [encoding] -f flv "RTMP_ADDRESS"
Κάμερα web σε Windows
Καταγράψτε πρώτα τις συσκευές σας και μετά χρησιμοποιήστε τα ακριβή ονόματα που εκτυπώνει.
ffmpeg -list_devices true -f dshow -i dummy ffmpeg -f dshow -rtbufsize 256M ^ -i video="Your Camera":audio="Your Microphone" ^ [encoding] -f flv "RTMP_ADDRESS"
Κάμερα web σε macOS
Η λίστα εμφανίζει κάθε κάμερα και μικρόφωνο με έναν αριθμό. Το "0:0" σημαίνει κάμερα 0 και μικρόφωνο 0.
ffmpeg -f avfoundation -list_devices true -i "" ffmpeg -f avfoundation -framerate 30 \ -video_size 1280x720 -i "0:0" \ [encoding] -f flv "RTMP_ADDRESS"
Κάμερα web σε Linux
Βίντεο από τη συσκευή κάμερας, ήχος από την προεπιλεγμένη είσοδο του επιτραπέζιου υπολογιστή σας.
ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 \ -i /dev/video0 -f pulse -i default \ [encoding] -f flv "RTMP_ADDRESS"
Η οθόνη σας σε Windows
Καταγράφει ολόκληρη την επιφάνεια εργασίας στα 30 καρέ ανά δευτερόλεπτο. Προσθέστε ένα μικρόφωνο με μια δεύτερη είσοδο dshow αν θέλετε ήχο.
ffmpeg -f gdigrab -framerate 30 -i desktop ^ [encoding] -f flv "RTMP_ADDRESS"
Κάμερα IP μέσω RTSP
Αν η κάμερα στέλνει ήδη H.264 με διάστημα βασικών καρέ 2 δευτερολέπτων (ρυθμισμένο στο δικό της μενού), αντιγράψτε το βίντεο ως έχει και κωδικοποιήστε μόνο τον ήχο. Διαφορετικά χρησιμοποιήστε τις πλήρεις σημαίες κωδικοποίησης.
ffmpeg -rtsp_transport tcp \ -i "rtsp://CAM_USER:CAM_PASS@192.168.1.64:554/stream1" \ -c:v copy -c:a aac -b:a 128k \ -f flv "RTMP_ADDRESS"
Δεν έχει μικρόφωνο η κάμερα; Αντικαταστήστε τις σημαίες ήχου με -an.
Τα παραδείγματα τελειώνουν τις γραμμές με \ (macOS και Linux) ή ^ (Γραμμή εντολών Windows). Στο PowerShell, ή αν έχετε αμφιβολία, βάλτε ολόκληρη την εντολή σε μία γραμμή.
Ρυθμίσεις κωδικοποιητή FFmpeg που αντέχουν στη ζωντανή μετάδοση
Διαλέξτε μια σειρά που ταιριάζει στην ταχύτητα μεταφόρτωσής σας. Αφήστε ελεύθερο το ένα τρίτο της μεταφόρτωσης: αν ένα τεστ ταχύτητας δείχνει 6 Mbps, στείλτε το πολύ περίπου 4.
| Εικόνα | Προσθέστε στην εντολή | Βίντεο | Ήχος | Μεταφόρτωση που χρειάζεστε |
|---|---|---|---|---|
| 1080p, 30 fps | -vf scale=-2:1080 -r 30 | 4500k | 128k | 7 Mbps |
| 720p, 30 fps | -vf scale=-2:720 -r 30 | 2500k | 128k | 4 Mbps |
| 480p, 30 fps | -vf scale=-2:480 -r 30 | 1200k | 96k | 2 Mbps |
Ορίστε τα -b:v και -maxrate στην τιμή βίντεο και το -bufsize στο διπλάσιό της. Η εντολή στο βήμα 02 είναι η σειρά 720p. Τα προγράμματα ζωντανής μετάδοσης επί πληρωμή δέχονται έως 5 Mbps εισόδου, αρκετά για τη σειρά 1080p.
Τρεις κανόνες που αποτρέπουν το περισσότερο buffering
- Κρατήστε τα keyframes σε σταθερά 2 δευτερόλεπτα. Ένα μεγάλο ή ασταθές διάστημα εμφανίζεται ως κολλήματα στους θεατές σας, και από τη δική σας πλευρά μοιάζει με σφάλμα διακομιστή.
- Κρατήστε τον ρυθμό bit σταθερό με τα
-maxrateκαι-bufsize, ώστε μια πολυάσχολη σκηνή να μην μπορεί να ξεπεράσει τη μεταφόρτωσή σας. - Παρακολουθήστε την τιμή
speed=στη γραμμή κατάστασης του FFmpeg. Θα πρέπει να βρίσκεται στο 1x. Κάτω από αυτό, ο υπολογιστής σας δεν μπορεί να κωδικοποιήσει σε πραγματικό χρόνο.
Αφήστε την GPU σας να κάνει την κωδικοποίηση
Αν το speed= πέσει κάτω από 1x, αντικαταστήστε το -c:v libx264 -preset veryfast με τον κωδικοποιητή υλικού που διαθέτει ο υπολογιστής σας. Η CPU μένει τότε ελεύθερη για όλα τα υπόλοιπα.
- GPU NVIDIA
-c:v h264_nvenc -preset p4- Γραφικά Intel
-c:v h264_qsv- Mac
-c:v h264_videotoolbox
Εκτελέστε το ffmpeg -encoders για να δείτε ποιους περιλαμβάνει η έκδοσή σας.
Στείλτε αντί αυτού μια ροή FFmpeg SRT
Το SRT διατηρεί μια ροή σταθερή σε μεγάλες ή απωλεστικές συνδέσεις, όπως ένα Wi-Fi χώρου εκδηλώσεων, μια κινητή άνω ζεύξη ή μια τροφοδοσία από άλλη ήπειρο, όπου το RTMP τείνει να κολλάει. Περιλαμβάνεται στα προγράμματα Pro και Platinum του video CDN μας.
Η κάρτα ζωντανής μετάδοσης έχει τότε μια ενότητα SRT ingest με τη δική σας θύρα και φράση πρόσβασης. Αντιγράψτε το One-line URL της και χρησιμοποιήστε το ως έξοδο, με MPEG-TS στη θέση του FLV. Οι σημαίες κωδικοποίησης παραμένουν ίδιες.
Μια ροή SRT αναπαράγεται με το δικό της όνομα, οπότε χρησιμοποιήστε τον σύνδεσμο αναπαραγωγής που εμφανίζεται δίπλα της, κάτω από το Plays at.
ffmpeg -re -i input.mp4 \ [encoding] \ -f mpegts \ "srt://HOST:PORT?passphrase=PASSPHRASE&pbkeylen=16"
Η έκδοση FFmpeg που διαθέτετε χρειάζεται υποστήριξη SRT. Ελέγξτε με ffmpeg -protocols και αναζητήστε το srt στη λίστα εξόδου.
Ελέγξτε ότι είστε ζωντανά και διορθώστε ό,τι δεν είναι
- Ξεκινήστε το FFmpeg και αφήστε το παράθυρο ανοιχτό. Μια γραμμή κατάστασης που συνεχίζει να μετρά
frame=καιtime=σημαίνει ότι στέλνει. - Ανοίξτε την κάρτα ζωντανής μετάδοσης. Μέσα σε 15 δευτερόλεπτα θα πρέπει να λέει live και να δείχνει τι στέλνει ο κωδικοποιητής σας, κοντά στον ρυθμό bit σας.
- Αντιγράψτε τον σύνδεσμο αναπαραγωγής από τον ίδιο πίνακα και ανοίξτε τον στο VLC (Media, Open Network Stream) ή εκτελέστε
ffplay "PLAYBACK_LINK". Ο πίνακας σας δίνει επίσης έναν κώδικα ενσωμάτωσης για τον δικό σας ιστότοπο.
| Τι βλέπετε | Τι να κάνετε |
|---|---|
| Το FFmpeg σταματά αμέσως με σφάλμα σύνδεσης ή I/O | Ελέγξτε το host και το όνομα εφαρμογής γράμμα προς γράμμα. Ορισμένα δίκτυα γραφείων και ξενοδοχείων μπλοκάρουν τη θύρα 1935: δοκιμάστε άλλη σύνδεση. |
| Συνδέεται και μετά ο διακομιστής απορρίπτει τη ροή | Το όνομα χρήστη ή ο κωδικός πρόσβασης είναι λάθος, ή ο κωδικός έχει χαρακτήρα που χρειάζεται κωδικοποίηση. Κάντε κλικ στο New password, ενημερώστε την εντολή και δοκιμάστε ξανά. |
speed= παραμένει πολύ πάνω από 1x σε ένα αρχείο | Παραλείψατε το -re. Προσθέστε το πριν από το -i. |
speed= παραμένει κάτω από 1x | Χρησιμοποιήστε ταχύτερη προεπιλογή (superfast), χαμηλότερη σειρά από το βήμα 04 ή τον κωδικοποιητή της GPU σας. |
| Το FFmpeg φαίνεται εντάξει αλλά οι θεατές έχουν buffering | Ελέγξτε τις σημαίες keyframe και μετά μειώστε τον ρυθμό bit. Η μεταφόρτωσή σας μπορεί να είναι πιο αργή απ' όσο νομίζετε εκείνη την ώρα. |
| Η ροή τελειώνει όταν τελειώνει το αρχείο | Προσθέστε -stream_loop -1 πριν από το -i. |
Ερωτήσεις για ροή με FFmpeg
Πώς κάνω ροή σε διακομιστή RTMP με το FFmpeg;
Κωδικοποιήστε σε H.264 και AAC, τυλίξτε την έξοδο σε FLV με -f flv και δώστε στο FFmpeg τη διεύθυνση RTMP ως τελευταίο όρισμα. Για ένα κανάλι Primcast η διεύθυνση είναι ο διακομιστής, η εφαρμογή και το όνομα ροής σας, με το όνομα χρήστη και τον κωδικό σας μπροστά από τον κεντρικό υπολογιστή: rtmp://USERNAME:PASSWORD@HOST:1935/APP/livestream.
Πού βρίσκω τη διεύθυνση διακομιστή, το όνομα χρήστη και τον κωδικό μου;
Στον λογαριασμό σας, στην κάρτα Ζωντανή ροή του λογαριασμού βίντεο, κάτω από τις Ρυθμίσεις κωδικοποιητή. Ο κωδικός παραμένει κρυφός μέχρι να κάνετε κλικ στο Εμφάνιση και το Νέος κωδικός σας δίνει έναν καινούργιο. Η ροή που είναι ζωντανή συνεχίζει να παίζει και ο νέος κωδικός ισχύει για την επόμενη σύνδεση.
Χρειάζομαι ακόμα το -strict experimental για ήχο AAC;
Όχι. Ο ενσωματωμένος κωδικοποιητής AAC του FFmpeg έχασε την πειραματική ετικέτα του στο FFmpeg 3.0, που κυκλοφόρησε το 2016. Το απλό -c:a aac λειτουργεί σε κάθε τρέχουσα έκδοση, οπότε μπορείτε να αφαιρέσετε τη σημαία από παλαιότερες εντολές.
Ποιο διάστημα βασικών καρέ πρέπει να χρησιμοποιεί το FFmpeg για ζωντανή ροή;
Σταθερά 2 δευτερόλεπτα. Κόβουμε τα τμήματα αναπαραγωγής σε βασικά καρέ, οπότε ένα μεγαλύτερο ή ασταθές διάστημα μετατρέπεται σε κολλήματα για τους θεατές σας. Χρησιμοποιήστε -force_key_frames "expr:gte(t,n_forced*2)" με -sc_threshold 0, ή -g ρυθμισμένο στο διπλάσιο του ρυθμού καρέ σας.
Με τι bitrate πρέπει να κάνω ροή;
Περίπου 2.500 kbps για 720p και 4.500 kbps για 1080p στα 30 καρέ ανά δευτερόλεπτο, συν 128 kbps ήχου. Κρατήστε το σύνολο στα δύο τρίτα της μετρημένης ταχύτητας μεταφόρτωσης, ώστε μια αργή στιγμή στη γραμμή σας να μη σταματήσει τη ροή.
Πώς κάνω ένα αρχείο βίντεο να παίζει συνεχώς όλο το εικοσιτετράωρο με το FFmpeg;
Βάλτε -re -stream_loop -1 πριν από το -i και το FFmpeg επαναλαμβάνει το αρχείο μέχρι να το σταματήσετε. Αυτό όμως κρατά έναν υπολογιστή απασχολημένο όλη μέρα. Τα προγράμματα επί πληρωμή CDN βίντεο περιλαμβάνουν κανάλια τηλεοπτικού σταθμού 24/7 που αναπαράγουν τα βίντεό σας από τη δική μας πλευρά.
Μπορεί το FFmpeg να κωδικοποιήσει τη ροή στην κάρτα γραφικών μου;
Ναι. Χρησιμοποιήστε h264_nvenc σε GPU NVIDIA, h264_qsv σε γραφικά Intel ή h264_videotoolbox σε Mac, στη θέση του libx264. Οι σημαίες βασικών καρέ και bitrate παραμένουν ίδιες.
Μπορώ να στείλω SRT αντί για RTMP;
Ναι, στα προγράμματα CDN βίντεο Pro και Platinum. Ο πίνακας ελέγχου σας δίνει μια θύρα SRT και μια φράση πρόσβασης. Χρησιμοποιήστε -f mpegts και τη μονογράμματη διεύθυνση srt:// από τον πίνακα ως έξοδο.
Προτιμάτε παράθυρο αντί για γραμμή εντολών;
Το ίδιο κανάλι λειτουργεί με οποιονδήποτε κωδικοποιητή μιλά RTMP. Αυτά τα σεμινάρια παίρνουν τις ίδιες τέσσερις τιμές.
Χρειάζεστε ένα κανάλι για ροή;
Ανοίξτε ένα κανάλι βίντεο, επικολλήστε τις τιμές σας στην εντολή και κρίνετε μόνοι σας την εικόνα. Κολλήσατε σε μια σημαία; Η συνομιλία μας απαντά σε δευτερόλεπτα και μπορεί να δει το κανάλι σας όσο περιμένετε, ενώ ένα άτομο αναλαμβάνει όποτε το ζητήσετε.