FFmpeg (https://www.ffmpeg.org/) to kompletne, wieloplatformowe rozwiązanie do nagrywania, konwersji i przesyłania strumieniowego audio i wideo. FFmpeg to wiodąca platforma multimedialna, która jest w stanie dekodować, kodować, transkodować, mux, demux, przesyłać strumieniowo, filtrować i odtwarzać praktycznie wszystko, co stworzyli ludzie i maszyny. Obsługuje najbardziej niejasne, starożytne formaty, aż do najnowocześniejszych. Bez względu na to, czy zostały zaprojektowane przez jakąś komisję normalizacyjną, społeczność czy korporację.
Jest również wysoce przenośny: FFmpeg kompiluje, uruchamia i przekazuje naszą infrastrukturę testową FATE w systemach Linux, Mac OS X, Microsoft Windows, BSD, Solaris itp. w szerokiej gamie środowisk kompilacji, architektur maszynowych, i konfiguracje.
Sama biblioteka FFmpeg jest objęta licencją LGPL 2.1. Włączenie pewnych zewnętrznych bibliotek (takich jak libx264) zmienia licencję na GPL 2 lub nowszą.
Użyłem skryptu ffmpeg-android-maker (współtwórcy: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) do skompilowania bibliotek. Skrypt ten pobiera kod źródłowy FFmpeg z https://www.ffmpeg.org i buduje bibliotekę oraz montuje ją dla Androida. Skrypt tworzy biblioteki współdzielone (pliki *.so), a także pliki nagłówkowe (pliki *.h).
Głównym celem ffmpeg-android-maker jest przygotowanie bibliotek współdzielonych do bezproblemowej integracji z projektem Androida. Skrypt przygotowuje katalog `output`, który ma być użyty. I to nie jedyne, co robi ten projekt. Kod źródłowy ffmpeg-android-maker jest dostępny na licencji MIT. Zobacz plik LICENSE.txt, aby uzyskać więcej informacji na https://github.com/Javernaut/ffmpeg-android-maker/ Biblioteki eXport-it FFmpeg są po prostu skompilowane z libaom, libdav1d, liblame, libopus i libtwolame...ale nie wszystkimi powiązanymi bibliotekami.
Aby opracować obsługę Java dla FFmpeg i uruchomić ją na Androidzie 7.1 do 12, zacząłem od projektu MobileFFmpeg udokumentowanego na https://github.com/tanersener/mobile-ffmpeg/ autorstwa Tanera Senera, który nie jest już utrzymywany ... i jest objęty licencją LGPL 3.0 ...
Na koniec przygotowałem projekt JNI Android Studio z bibliotekami, dołączam pliki i kod wsparcia Java oraz wygenerowałem plik biblioteki .aar, aby zintegrować go jako dodatkową bibliotekę z moimi istniejącymi projektami.
Aby uruchomić kanał multiemisji, należy użyć klienta, aby uzyskać dostęp do serwera UPnP w sieci lokalnej (Wi-Fi) z obsługą FFmpeg. Ten serwer powinien odpowiedzieć listą plików, które eksportuje. Jeśli ten serwer obsługuje FFmpeg, mały tekst „Jako kanał” musi być pokazany na czerwono na końcu górnej linii strony listy. Gdy tekst jest „czerwony”, kliknięcie przycisku „odtwórz” działa tak samo, jak przed użyciem protokołu UPnP. Jeśli klikniesz tekst, powinien on stać się „zielony”, a kliknięcie przycisku „odtwórz”, po wybraniu plików wideo lub audio, powinno rozpocząć „kanał”.
Wybrane pliki multimedialne są odtwarzane najwyraźniej w taki sam sposób, jak przez UPnP, z wyjątkiem tego, że opóźnienie uruchamiania jest dłuższe z powodu dodatkowych zadań. Musisz utrzymywać tego klienta odtwarzającego pliki multimedialne, aby utrzymać potok aktywny.
Multicast IP nie działa przez Internet, działa tylko w sieci lokalnej, a więc głównie w sieci Wi-Fi. Kanał danych multiemisji może być współużytkowany przez wielu klientów jednocześnie. Wysyłasz przepływ danych multimedialnych w swojej sieci Wi-Fi i pokazujesz te dane na podłączonych urządzeniach prawie synchronicznie, tylko różnica w opóźnieniach.
W przypadku przesyłania strumieniowego UPnP lub HTTP każde urządzenie wymaga przepustowości wyświetlanego wideo, a globalna przepustowość jest sumą obu rodzajów ruchu. Dzięki strumieniowaniu multicast wysyłamy jeden przepływ danych w sieci LAN, który jest dzielony między wielu klientów.
Jeśli używasz innego klienta w swojej sieci po uruchomieniu kanału, powinieneś zobaczyć dodatkową linię w głównym oknie klienta. Samo kliknięcie tej linii powinno rozpocząć pokaz.
Możliwe jest również użycie innych produktów, takich jak VLC, SMplayer, ... do wyświetlania wideo lub słuchania muzyki rozprowadzanej przez kanał multiemisji, używając tylko adresu URL „UDP” wyświetlanego w kliencie eXport-it. p>
Dobrym sposobem na zatrzymanie kanału multiemisji jest zatrzymanie go na kliencie, na którym został uruchomiony, ponieważ ten kanał jest tam kontrolowany. Odtwarzanie do końca przesyłanych strumieniowo plików multimedialnych powinno również oznaczać koniec programu.