FFmpeg (https://www.ffmpeg.org/) είναι μια ολοκληρωμένη λύση πολλαπλών πλατφορμών για εγγραφή, μετατροπή και ροή ήχου και βίντεο. Το FFmpeg είναι το κορυφαίο πλαίσιο πολυμέσων, ικανό να αποκωδικοποιεί, κωδικοποιεί, μετακωδικοποιεί, mux, demux, ροή, φιλτράρει και παίζει σχεδόν οτιδήποτε έχουν δημιουργήσει άνθρωποι και μηχανές. Υποστηρίζει τις πιο ασαφείς αρχαίες μορφές μέχρι την αιχμή. Δεν έχει σημασία αν σχεδιάστηκαν από κάποια επιτροπή προτύπων, την κοινότητα ή μια εταιρεία.
Είναι επίσης εξαιρετικά φορητό: το FFmpeg μεταγλωττίζει, εκτελεί και περνά την υποδομή δοκιμών μας FATE σε Linux, Mac OS X, Microsoft Windows, BSD, Solaris κ.λπ... κάτω από μια μεγάλη ποικιλία περιβαλλόντων κατασκευής, αρχιτεκτονικές μηχανών, και διαμορφώσεις.
Η ίδια η βιβλιοθήκη FFmpeg είναι κάτω από την άδεια LGPL 2.1. Η ενεργοποίηση ορισμένων εξωτερικών βιβλιοθηκών (όπως η libx264) αλλάζει την άδεια χρήσης σε GPL 2 ή μεταγενέστερη.
Χρησιμοποίησα το σενάριο ffmpeg-android-maker (συνεισφέροντες: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) για τη μεταγλώττιση των βιβλιοθηκών. Αυτό το σενάριο κατεβάζει τον πηγαίο κώδικα του FFmpeg από τη https://www.ffmpeg.org και δημιουργεί τη βιβλιοθήκη και τη συναρμολογεί για Android. Το σενάριο παράγει κοινόχρηστες βιβλιοθήκες (αρχεία *.so) καθώς και αρχεία κεφαλίδας (αρχεία *.h).
Η κύρια εστίαση του ffmpeg-android-maker είναι να προετοιμάσει κοινόχρηστες βιβλιοθήκες για απρόσκοπτη ενσωμάτωση σε ένα έργο Android. Το σενάριο προετοιμάζει τον κατάλογο «output» που προορίζεται να χρησιμοποιηθεί. Και δεν είναι το μόνο πράγμα που κάνει αυτό το έργο. Ο πηγαίος κώδικας του ffmpeg-android-maker είναι διαθέσιμος με την άδεια του MIT. Δείτε το αρχείο LICENSE.txt για περισσότερες λεπτομέρειες στη διεύθυνση https://github.com/Javernaut/ffmpeg-android-maker/ Οι βιβλιοθήκες eXport-it FFmpeg έχουν μόλις μεταγλωττιστεί με τις βιβλιοθήκες libaom, libdav1d, liblame, libopus και libtwolame...αλλά όχι όλες οι σχετικές βιβλιοθήκες.
Για να αναπτύξω την υποστήριξη Java για το FFmpeg και να το τρέξω σε Android 7.1 έως 12, ξεκίνησα από το έργο MobileFFmpeg που τεκμηριώνεται στη διεύθυνση https://github.com/tanersener/mobile-ffmpeg/ από τον Taner Sener, το οποίο δεν διατηρείται πλέον ... και έχει άδεια σύμφωνα με το LGPL 3.0 ...
Τέλος, ετοίμασα ένα έργο JNI Android Studio με τις βιβλιοθήκες, συμπεριέλαβα αρχεία και κώδικα υποστήριξης Java και δημιούργησα ένα αρχείο Βιβλιοθήκης .aar για να το ενσωματώσω ως πρόσθετη βιβλιοθήκη στα υπάρχοντα έργα μου.
Για να ξεκινήσει ένα κανάλι πολλαπλής μετάδοσης απαιτείται η χρήση πελάτη, για πρόσβαση σε διακομιστή UPnP στο τοπικό σας δίκτυο (Wi-Fi) με την υποστήριξη FFmpeg. Αυτός ο διακομιστής θα πρέπει να απαντά με τη λίστα στα αρχεία που εξάγει. Εάν αυτός ο διακομιστής έχει την υποστήριξη FFmpeg, ένα μικρό κείμενο "Ως κανάλι" πρέπει να εμφανίζεται με κόκκινο χρώμα στο τέλος της επάνω γραμμής της σελίδας λίστας. Όταν το κείμενο είναι "κόκκινο", κάνοντας κλικ στο κουμπί "αναπαραγωγή" λειτουργεί όπως πριν χρησιμοποιώντας το πρωτόκολλο UPnP. Εάν κάνετε κλικ στο κείμενο, θα πρέπει να γίνει "πράσινο" και κάνοντας κλικ στο κουμπί "αναπαραγωγή", αφού επιλέξετε αρχεία βίντεο ή ήχου, θα πρέπει να ξεκινήσει ένα "κανάλι".
Τα επιλεγμένα αρχεία πολυμέσων αναπαράγονται προφανώς με τον ίδιο τρόπο όπως μέσω του UPnP, με τη διαφορά ότι η καθυστέρηση εκκίνησης είναι μεγαλύτερη λόγω πρόσθετων εργασιών. Πρέπει να συνεχίσετε να αναπαράγει τα αρχεία πολυμέσων αυτού του προγράμματος-πελάτη για να διατηρήσετε τον σωλήνα ενεργό.
Η multicast IP δεν λειτουργεί μέσω Διαδικτύου, λειτουργεί μόνο σε τοπικό δίκτυο, επομένως κυρίως σε Wi-Fi. Ένα κανάλι δεδομένων πολλαπλής εκπομπής μπορεί να μοιράζεται από πολλούς πελάτες ταυτόχρονα. Στέλνετε μια ροή δεδομένων πολυμέσων στο δίκτυο Wi-Fi σας και εμφανίζετε αυτά τα δεδομένα σε συνδεδεμένες συσκευές, σχεδόν συγχρονισμένα, μόνο τη διαφορά καθυστέρησης καθυστέρησης.
Με τη ροή UPnP ή HTTP, κάθε συσκευή απαιτεί το εύρος ζώνης του βίντεο που εμφανίζεται και το συνολικό εύρος ζώνης είναι το άθροισμα και των δύο επισκεψιμότητας. Με τη ροή πολλαπλής διανομής, στέλνουμε μία ροή δεδομένων στο LAN, η οποία είναι κοινή μεταξύ πολλών πελατών.
Εάν χρησιμοποιείτε άλλο πελάτη στο δίκτυό σας μετά την έναρξη ενός καναλιού, θα πρέπει να δείτε μια πρόσθετη γραμμή στο κύριο παράθυρο του προγράμματος-πελάτη. Απλώς κάνοντας κλικ σε αυτή τη γραμμή θα ξεκινήσει η εκπομπή.
Είναι επίσης εφικτό να χρησιμοποιήσετε άλλα προϊόντα όπως VLC, SMplayer, ... για να εμφανίσετε ένα βίντεο ή να ακούσετε μουσική που διανέμεται σε ένα κανάλι πολλαπλής εκπομπής χρησιμοποιώντας απλώς τη διεύθυνση URL "UDP" που εμφανίζεται στο πρόγραμμα-πελάτη eXport-it. p>
Ο καλός τρόπος για να σταματήσετε ένα κανάλι πολλαπλής μετάδοσης είναι να το σταματήσετε στον πελάτη στον οποίο το ξεκινήσατε επειδή αυτό το κανάλι ελέγχεται εκεί. Η αναπαραγωγή μέχρι το τέλος των αρχείων πολυμέσων σε ροή θα πρέπει επίσης να δώσει το τέλος της εκπομπής.