FFmpeg (https://www.ffmpeg.org/) is een complete, platformonafhankelijke oplossing voor het opnemen, converteren en streamen van audio en video. FFmpeg is het toonaangevende multimediaframework dat in staat is om vrijwel alles te decoderen, coderen, transcoderen, mux, demux, streamen, filteren en afspelen van vrijwel alles wat mensen en machines hebben gemaakt. Het ondersteunt de meest obscure oude formaten tot op het snijvlak. Het maakt niet uit of ze zijn ontworpen door een normcommissie, de gemeenschap of een bedrijf.
Het is ook zeer draagbaar: FFmpeg compileert, voert uit en geeft onze testinfrastructuur FATE door voor Linux, Mac OS X, Microsoft Windows, de BSD's, Solaris, enz... onder een grote verscheidenheid aan build-omgevingen, machine-architecturen, en configuraties.
De FFmpeg-bibliotheek zelf valt onder de LGPL 2.1-licentie. Door bepaalde externe bibliotheken in te schakelen (zoals libx264) wordt de licentie gewijzigd in GPL 2 of hoger.
Ik heb het script ffmpeg-android-maker (medewerkers: Alexander Berezjnoi Javernaut + codacy-badger Codacy Badger + A2va) gebruikt om de bibliotheken te compileren. Dit script downloadt de broncode van FFmpeg van https://www.ffmpeg.org en bouwt de bibliotheek en assembleert deze voor Android. Het script produceert gedeelde bibliotheken (*.so-bestanden) en header-bestanden (*.h-bestanden).
De belangrijkste focus van ffmpeg-android-maker is het voorbereiden van gedeelde bibliotheken voor naadloze integratie in een Android-project. Het script bereidt de `output`-directory voor die moet worden gebruikt. En het is niet het enige wat dit project doet. De broncode van de ffmpeg-android-maker is beschikbaar onder de MIT-licentie. Zie het LICENSE.txt-bestand voor meer details op https://github.com/Javernaut/ffmpeg-android-maker/ De eXport-it FFmpeg-bibliotheken zijn gewoon gecompileerd met libaom, libdav1d, liblame, libopus en libtwolame... maar niet alle bijbehorende bibliotheken.
Om de Java-ondersteuning voor FFmpeg te ontwikkelen en uit te voeren op Android 7.1 tot 12, ben ik begonnen met het MobileFFmpeg-project dat is gedocumenteerd op https://github.com/tanersener/mobile-ffmpeg/ door Taner Sener, dat niet meer wordt onderhouden ... en is gelicentieerd onder LGPL 3.0 ...
Ten slotte heb ik een JNI Android Studio-project met de bibliotheken voorbereid, bestanden en Java-ondersteuningscode toegevoegd en een .aar-bibliotheekbestand gegenereerd om als extra bibliotheek in mijn bestaande projecten te integreren.
Om een multicast-kanaal te starten, moet u een client gebruiken om toegang te krijgen tot een UPnP-server op uw lokale netwerk (Wi-Fi) met de FFmpeg-ondersteuning. Deze server zou moeten antwoorden met de lijst van de bestanden die hij exporteert. Als deze server de FFmpeg-ondersteuning heeft, moet een kleine tekst "As a channel" in rood worden weergegeven aan het einde van de bovenste regel van de lijstpagina. Als de tekst "rood" is, werkt het klikken op de "play"-knop zoals voorheen bij het gebruik van het UPnP-protocol. Als u op de tekst klikt, moet deze "groen" worden en als u op de "play"-knop klikt, na het selecteren van video- of audiobestanden, zou een "kanaal" moeten starten.
De geselecteerde mediabestanden worden schijnbaar op dezelfde manier afgespeeld als via UPnP, behalve dat de opstartvertraging langer is vanwege extra taken. U moet deze client de mediabestanden laten afspelen om de pipe actief te houden.
IP-multicast werkt niet via internet, het werkt alleen op Local Area Network, dus voornamelijk op Wi-Fi. Een multicast-datakanaal kan door meerdere clients tegelijk worden gedeeld. U verzendt een mediagegevensstroom op uw wifi-netwerk en toont deze gegevens op aangesloten apparaten, bijna synchroon, alleen het verschil in latentievertraging.
Bij UPnP- of HTTP-streaming heeft elk apparaat de bandbreedte van de getoonde video nodig en is de globale bandbreedte de som van beide verkeer. Met multicast-streaming sturen we één gegevensstroom over het LAN die wordt gedeeld tussen meerdere clients.
Als je een andere client op je netwerk gebruikt nadat je een kanaal hebt gestart, zou je een extra regel in het hoofdvenster van de client moeten zien. Gewoon op deze regel klikken, zou de show moeten starten.
Het is ook mogelijk om andere producten zoals VLC, SMplayer, ... te gebruiken om een video te laten zien of om naar muziek te luisteren die via een multicast-kanaal wordt verspreid door gewoon de "UDP"-URL te gebruiken die wordt weergegeven op de eXport-it-client.
p>De goede manier om een multicast-kanaal te stoppen, is door het te stoppen op de client waarop u het hebt gestart, omdat dit kanaal daar wordt beheerd. Het afspelen tot het einde van gestreamde mediabestanden zou ook het einde van de show moeten betekenen.
Om een multicast-kanaal te starten, is een specifiek clientgedeelte van deze applicatie vereist, hetzelfde als de eXport-it-client van mijn andere up-to-date producten. Een draaiend multicast-kanaal gebruiken kan met de applicatieclient of met andere producten zoals VLC, SMPlayer, ... die op andere platforms of op Android draaien. Bij gebruik van VLC is de URL om een Multicast-kanaal te gebruiken heel anders, zoals udp://@239.255.147.111:27192... alleen met een extra "@". Met een UDP Multicast-kanaal worden de mediagegevens slechts één keer verzonden om op meerdere clients te worden weergegeven, maar er is geen echte synchronisatie en de vertraging kan seconden zijn, afhankelijk van de buffering en apparaatkenmerken.
Luisteren naar een audio-multicastkanaal kan met andere producten, maar de specifieke client toont afbeeldingen die ook via IP-multicast zijn verzonden. Als u specifieke foto's met uw muziek wilt verzenden, kunt u de menuoptie "Pagina 2" op de server gebruiken om alleen de gewenste afbeeldingen te selecteren, alle afbeeldingen deselecteren met één klik en vervolgens de gewenste afbeeldingen selecteren... p>
Er zijn voor- en nadelen aan elk protocol. UPnP en Multicast-kanaal kunnen alleen worden gebruikt op lokaal netwerk (voornamelijk Wi-Fi), HTTP-streaming werkt lokaal maar ook via internet en gebruik een webbrowser als client. UPnP- en Multicast-kanalen hebben geen veilige manier om de toegang te regelen, en elk apparaat dat op het wifi-netwerk is aangesloten, kan de actieve server gebruiken. Met het HTTP-protocol kunt u gebruikersnamen en wachtwoorden definiëren en bestanden instellen in toegangscategorieën (groepen), waardoor de toegang tot bepaalde mediabestanden voor specifieke gebruikers wordt beperkt. De instellingen van de server maken het mogelijk om te beperken welke bestanden worden gedistribueerd en om indien nodig een categorienaam per bestand in te stellen.