FFmpeg (https://www.ffmpeg.org/) är en komplett plattformsoberoende lösning för att spela in, konvertera och strömma ljud och video. FFmpeg är det ledande multimediaramverket, som kan avkoda, koda, omkoda, mux, demux, streama, filtrera och spela upp i stort sett allt som människor och maskiner har skapat. Den stöder de mest obskyra gamla formaten upp till framkanten. Oavsett om de designades av någon standardkommitté, samhället eller ett företag.
Den är också mycket portabel: FFmpeg kompilerar, kör och klarar vår testinfrastruktur FATE över Linux, Mac OS X, Microsoft Windows, BSD:erna, Solaris, etc... under en mängd olika byggmiljöer, maskinarkitekturer, och konfigurationer.
Själva FFmpeg-biblioteket är under LGPL 2.1-licens. Genom att aktivera vissa externa bibliotek (som libx264) ändras licensen till GPL 2 eller senare.
Jag använde ffmpeg-android-maker-skriptet (bidragsgivare: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) för att kompilera biblioteken. Detta skript laddar ner källkoden för FFmpeg från https://www.ffmpeg.org och bygger biblioteket och sätter ihop det för Android. Skriptet producerar delade bibliotek (*.so-filer) såväl som rubrikfiler (*.h-filer).
Huvudfokus för ffmpeg-android-maker är att förbereda delade bibliotek för sömlös integrering i ett Android-projekt. Skriptet förbereder "output"-katalogen som är avsedd att användas. Och det är inte det enda det här projektet gör. ffmpeg-android-tillverkarens källkod är tillgänglig under MIT-licensen. Se LICENSE.txt-filen för mer information på https://github.com/Javernaut/ffmpeg-android-maker/ eXport-it FFmpeg-biblioteken är bara kompilerade med libaom, libdav1d, liblame, libopus och libtwolame...men inte alla associerade bibliotek.
För att utveckla Java-stödet för FFmpeg och köra det på Android 7.1 till 12, utgick jag från MobileFFmpeg-projektet dokumenterat på https://github.com/tanersener/mobile-ffmpeg/ av Taner Sener, som inte underhålls längre ... och är licensierad under LGPL 3.0 ...
Slutligen förberedde jag ett JNI Android Studio-projekt med biblioteken, inkluderar filer och Java-stödkod och genererar en .aar-biblioteksfil för att integreras som ett extra bibliotek i mina befintliga projekt.
För att starta en multicast-kanal måste du använda en klient, för att komma åt en UPnP-server på ditt lokala nätverk (Wi-Fi) med FFmpeg-stöd. Denna server bör svara med listan på filerna som den exporterar. Om denna server har FFmpeg-stöd måste en liten text "Som kanal" visas i rött i slutet av den översta raden på listsidan. När texten är "röd" fungerar att klicka på "spela"-knappen som tidigare med UPnP-protokollet. Om du klickar på texten ska den bli "grön" och klicka på "spela"-knappen, efter att ha valt video- eller ljudfiler, bör starta en "kanal".
De valda mediafilerna spelas uppenbarligen på samma sätt som genom UPnP, förutom att startfördröjningen är längre på grund av ytterligare uppgifter. Du måste låta den här klienten spela upp mediafilerna för att hålla pipen aktiv.
IP-multicast fungerar inte över Internet, det fungerar bara på lokalt nätverk, alltså huvudsakligen på Wi-Fi. En multicast-datakanal kan delas av många klienter samtidigt. Du skickar ett mediadataflöde på ditt Wi-Fi-nätverk och visar dessa data på anslutna enheter, nästan synkront, bara skillnaden i latensfördröjning.
Med UPnP- eller HTTP-strömning kräver varje enhet bandbredden för videon som visas och den globala bandbredden är summan av båda trafiken. Med multicast-strömning skickar vi ett dataflöde på LAN som delas mellan flera klienter.
Om du använder en annan klient i ditt nätverk efter att ha startat en kanal, bör du se en extra rad i klientens huvudfönster. Bara att klicka på den här raden bör starta showen.
Det är också möjligt att använda andra produkter som VLC, SMplayer, ... för att visa en video eller lyssna på musik som distribueras över en multicast-kanal bara genom att använda "UDP"-URL som visas på eXport-it-klienten.
Det bra sättet att stoppa en multicast-kanal är att stoppa den på klienten där du startade den eftersom den här kanalen styrs där. Att spela upp till slutet av strömmade mediefiler bör också ge slutet på programmet.