FFmpeg (https://www.ffmpeg.org/) er en komplet løsning på tværs af platforme til at optage, konvertere og streame lyd og video. FFmpeg er den førende multimedieramme, der er i stand til at afkode, kode, transkode, mux, demux, streame, filtrere og afspille stort set alt, hvad mennesker og maskiner har skabt. Det understøtter de mest obskure gamle formater op til forkant. Lige meget om de er designet af en standardkomité, samfundet eller et selskab.
Det er også meget bærbart: FFmpeg kompilerer, kører og videregiver vores testinfrastruktur FATE på tværs af Linux, Mac OS X, Microsoft Windows, BSD'erne, Solaris osv... under en lang række byggemiljøer, maskinarkitekturer, og konfigurationer.
Selve FFmpeg-biblioteket er under LGPL 2.1-licens. Aktivering af visse eksterne biblioteker (såsom libx264) ændrer licensen til at være GPL 2 eller nyere.
Jeg brugte ffmpeg-android-maker-scriptet (bidragydere: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) til at kompilere bibliotekerne. Dette script downloader kildekoden til FFmpeg fra https://www.ffmpeg.org og bygger biblioteket og samler det til Android. Scriptet producerer delte biblioteker (*.so-filer) samt header-filer (*.h-filer).
Hovedfokus for ffmpeg-android-maker er at forberede delte biblioteker til problemfri integration i et Android-projekt. Scriptet forbereder 'output'-biblioteket, der er beregnet til at blive brugt. Og det er ikke det eneste, dette projekt gør. ffmpeg-android-producentens kildekode er tilgængelig under MIT-licensen. Se LICENSE.txt-filen for flere detaljer på https://github.com/Javernaut/ffmpeg-android-maker/ eXport-it FFmpeg-bibliotekerne er netop kompileret med libaom, libdav1d, liblame, libopus og libtwolame...men ikke alle tilknyttede biblioteker.
For at udvikle Java-understøttelsen til FFmpeg og køre den på Android 7.1 til 12, startede jeg fra MobileFFmpeg-projektet dokumenteret på https://github.com/tanersener/mobile-ffmpeg/ af Taner Sener, som ikke længere vedligeholdes ... og er licenseret under LGPL 3.0 ...
Til sidst forberedte jeg et JNI Android Studio-projekt med bibliotekerne, inkluderer filer og Java-supportkode og genererer en .aar-biblioteksfil til at integrere som et ekstra bibliotek i mine eksisterende projekter.
For at starte en multicast-kanal skal du bruge en klient for at få adgang til en UPnP-server på dit lokale netværk (Wi-Fi) med FFmpeg-understøttelse. Denne server skal svare med listen over de filer, den eksporterer. Hvis denne server har FFmpeg-understøttelse, skal en lille tekst "Som en kanal" vises i rødt i slutningen af den øverste linje på listesiden. Når teksten er "rød", fungerer et klik på "afspil"-knappen som før med UPnP-protokollen. Hvis du klikker på teksten, skulle den blive "grøn", og klik på "afspil"-knappen, efter at have valgt video- eller lydfiler, skulle starte en "kanal".
De valgte mediefiler afspilles tilsyneladende på samme måde som gennem UPnP, bortset fra at startforsinkelsen er længere på grund af yderligere opgaver. Du skal lade denne klient afspille mediefilerne for at holde pipen aktiv.
IP-multicast virker ikke over internettet, det virker kun på lokalt netværk og derfor hovedsageligt på Wi-Fi. En multicast-datakanal kan deles af mange klienter samtidigt. Du sender et mediedataflow på dit Wi-Fi-netværk og viser disse data på tilsluttede enheder, næsten synkront, kun forsinkelsesforskellen.
Med UPnP- eller HTTP-streaming kræver hver enhed båndbredden af den viste video, og den globale båndbredde er summen af begge trafik. Med multicast-streaming sender vi ét dataflow på LAN, som deles mellem flere klienter.
Hvis du bruger en anden klient på dit netværk efter at have startet en kanal, bør du se en ekstra linje i klientens hovedvindue. Bare et klik på denne linje skulle starte showet.
Det er også muligt at bruge andre produkter som VLC, SMplayer, ... til at vise en video eller lytte til musik distribueret over en multicast-kanal ved blot at bruge "UDP"-URL'en vist på eXport-it-klienten. p>
Den gode måde at stoppe en multicast-kanal på er at stoppe den på den klient, som du startede den på, fordi denne kanal styres der. Afspilning til slutningen af streamede mediefiler bør også give slutningen på showet.
For at starte en multicast-kanal kræver det en specifik klientdel af denne applikation, den samme som eXport-it-klienten for mine andre opdaterede produkter. At bruge en kørende multicast-kanal kan gøres med applikationsklienten eller med andre produkter som VLC, SMPlayer, ... kører på andre platforme eller på Android. Når du bruger VLC, er URL'en til at bruge en Multicast-kanal jævnt anderledes som udp://@239.255.147.111:27192... bare med et ekstra "@". Med en UDP Multicast-kanal sendes mediedataene kun én gang for at blive vist på flere klienter, men der er ingen reel synkronisering, og forsinkelsen kan være sekunder afhængigt af buffering og enhedskarakteristika.
At lytte til en audio multicast-kanal kan udføres med andre produkter, men den specifikke klient viser billeder, der også sendes over IP-multicast. Hvis du vil sende bestemte billeder med din musik, kan du bruge menupunktet "Side 2" på serveren, for kun at vælge de billeder du ønsker, fravælg alle billeder med et enkelt klik, og vælg derefter disse du ønsker... p>
Der er fordele og ulemper ved hver protokol. UPnP og Multicast kanal kan kun bruges på lokalt netværk (hovedsageligt Wi-Fi), HTTP-streaming fungerer lokalt, men også over internettet og brug en webbrowser som klient. UPnP- og Multicast-kanaler har ingen sikker måde at kontrollere adgang på, og enhver enhed, der er tilsluttet Wi-Fi-netværket, kan bruge den kørende server. Med HTTP-protokollen kan du definere brugernavne og adgangskoder og indstille filer i adgangskategorier (grupper), hvilket begrænser adgangen til nogle mediefiler for specifikke brugere. Indstillingerne på serveren tillader at begrænse, hvilke filer der distribueres og at angive et kategorinavn pr. fil, hvis det kræves.