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.
För att starta en multicast-kanal krävs en specifik klientdel av denna applikation, samma som eXport-it-klienten för mina andra uppdaterade produkter. Att använda en körande multicast-kanal kan göras med applikationsklienten eller med andra produkter som VLC, SMPlayer, ... som körs på andra plattformar eller på Android. När du använder VLC är URL:en för att använda en Multicast-kanal smidigt annorlunda som udp://@239.255.147.111:27192... bara med ett extra "@". Med en UDP Multicast-kanal skickas mediadata endast en gång för att visas på flera klienter, men det finns ingen riktig synkronisering, och fördröjningen kan vara sekunder beroende på buffringen och enhetens egenskaper.
Att lyssna på en multicast-kanal för ljud kan göras med andra produkter, men den specifika klienten visar bilder som också skickas över IP-multicast. Om du vill skicka specifika bilder med din musik kan du använda menyalternativet "Sida 2" på servern, för att bara välja de bilder du vill, avmarkera alla bilder med ett klick, välj sedan dessa du vill ha... p>
Det finns fördelar och olägenheter med varje protokoll. UPnP och Multicast-kanal kan endast användas på lokalt nätverk (främst Wi-Fi), HTTP-streaming fungerar lokalt men även över Internet och använder en webbläsare som klient. UPnP och Multicast-kanaler har inget säkert sätt att kontrollera åtkomst, och alla enheter som är anslutna till Wi-Fi-nätverket kan använda den körande servern. Med HTTP-protokollet kan du definiera användarnamn och lösenord och ställa in filer i åtkomstkategorier (grupper), vilket begränsar åtkomsten till vissa mediefiler för specifika användare. Inställningarna för servern tillåter att begränsa vilka filer som distribueras och att ställa in ett kategorinamn per fil om så krävs.