FFmpeg (https://www.ffmpeg.org/) és una solució completa i multiplataforma per gravar, convertir i reproduir àudio i vídeo. FFmpeg és el marc multimèdia líder, capaç de descodificar, codificar, transcodificar, mux, demux, transmetre, filtrar i reproduir pràcticament qualsevol cosa que els humans i les màquines hagin creat. Admet els formats antics més obscurs fins a l'avantguarda. No importa si han estat dissenyats per algun comitè d'estàndards, la comunitat o una corporació.
També és altament portàtil: FFmpeg compila, executa i passa la nostra infraestructura de proves FATE a Linux, Mac OS X, Microsoft Windows, els BSD, Solaris, etc... sota una gran varietat d'entorns de construcció, arquitectures de màquines, i configuracions.
La pròpia biblioteca FFmpeg està sota llicència LGPL 2.1. L'activació de determinades biblioteques externes (com ara libx264) canvia la llicència perquè sigui GPL 2 o posterior.
He utilitzat l'script ffmpeg-android-maker (col·laboradors: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) per compilar les biblioteques. Aquest script descarrega el codi font de FFmpeg des de https://www.ffmpeg.org i crea la biblioteca i l'assembla per a Android. L'script produeix biblioteques compartides (fitxers *.so) així com fitxers de capçalera (fitxers *.h).
L'objectiu principal de ffmpeg-android-maker és preparar biblioteques compartides per a una integració perfecta en un projecte Android. L'script prepara el directori de "sortida" que s'ha d'utilitzar. I no és l'únic que fa aquest projecte. El codi font de ffmpeg-android-maker està disponible sota la llicència MIT. Consulteu el arxiu LICENSE.txt per obtenir més informació a https://github.com/Javernaut/ffmpeg-android-maker/ Les biblioteques eXport-it FFmpeg s'acaben de compilar amb libaom, libdav1d, liblame, libopus i libtwolame... però no totes les biblioteques associades.
Per desenvolupar el suport Java per a FFmpeg i executar-lo a Android 7.1 a 12, vaig començar des del projecte MobileFFmpeg documentat a https://github.com/tanersener/mobile-ffmpeg/ per Taner Sener, que ja no es manté ... i té llicència sota LGPL 3.0 ...
Finalment, vaig preparar un projecte JNI Android Studio amb les biblioteques, vaig incloure fitxers i codi de suport Java i vaig generar un fitxer de biblioteca .aar per integrar-lo com a biblioteca addicional als meus projectes existents.
Per iniciar un canal de multidifusió cal utilitzar un client per accedir a un servidor UPnP a la vostra xarxa local (Wi-Fi) amb el suport FFmpeg. Aquest servidor hauria de respondre amb la llista dels fitxers que exporta. Si aquest servidor té el suport FFmpeg, s'ha de mostrar un petit text "Com a canal" en vermell al final de la línia superior de la pàgina de la llista. Quan el text és "vermell", fer clic al botó "reproduir" funciona com abans amb el protocol UPnP. Si feu clic al text, hauria de tornar-se "verd" i fent clic al botó "reproduir", després de seleccionar els fitxers de vídeo o àudio, hauria d'iniciar un "canal".
Els fitxers multimèdia seleccionats es reprodueixen aparentment de la mateixa manera que mitjançant UPnP, excepte que el retard d'inici és més llarg a causa de tasques addicionals. Heu de mantenir aquest client reproduint els fitxers multimèdia per mantenir la canalització activa.
La multidifusió IP no funciona a Internet, només funciona a la xarxa d'àrea local, per la qual cosa principalment a Wi-Fi. Un canal de dades multicast pot ser compartit per molts clients simultàniament. Esteu enviant un flux de dades multimèdia a la vostra xarxa Wi-Fi i mostreu aquestes dades als dispositius connectats, gairebé de manera sincrònica, només la diferència de retard de latència.
Amb la transmissió UPnP o HTTP, cada dispositiu requereix l'ample de banda del vídeo que es mostra i l'amplada de banda global és la suma d'ambdós trànsits. Amb la transmissió multicast, enviem un flux de dades a la LAN que es comparteix entre diversos clients.
Si utilitzeu un altre client a la vostra xarxa després d'iniciar un canal, hauríeu de veure una línia addicional a la finestra principal del client. Només fer clic en aquesta línia hauria d'iniciar el programa.
També és factible utilitzar altres productes com VLC, SMplayer, ... per mostrar un vídeo o escoltar música distribuïda en un canal de multidifusió només utilitzant l'URL "UDP" que es mostra al client eXport-it.
p>La bona manera d'aturar un canal de multidifusió és aturar-lo al client on l'has iniciat perquè aquest canal està controlat allà. Reproduir fins al final dels fitxers multimèdia reproduïts també hauria de donar el final del programa.
Per iniciar un canal multicast requereix una part específica del client d'aquesta aplicació, igual que el client eXport-it dels meus altres productes actualitzats. Per utilitzar un canal de multidifusió en execució es pot fer amb el client de l'aplicació o amb altres productes com VLC, SMPlayer,... executant-se en altres plataformes o en Android. Quan s'utilitza VLC, l'URL per utilitzar un canal de multidifusió és molt diferent com udp://@239.255.147.111:27192... només amb un "@" addicional. Amb un canal de multidifusió UDP, les dades multimèdia s'envien només una vegada per mostrar-se en diversos clients, però no hi ha una sincronització real i el retard pot ser de segons en funció de la memòria intermèdia i de les característiques del dispositiu.
Escoltar un canal de multidifusió d'àudio es pot fer amb altres productes, però el client específic mostra imatges també enviades per multidifusió IP. Si voleu enviar fotos específiques amb la vostra música, podeu utilitzar l'opció de menú "Pàgina 2" del servidor, per seleccionar només les imatges que vulgueu, desmarqueu totes les imatges amb un sol clic i, a continuació, seleccioneu les que vulgueu... p>
Cada protocol té avantatges i inconvenients. El canal UPnP i Multicast només es pot utilitzar a la xarxa local (principalment Wi-Fi), la transmissió HTTP funciona de manera local però també a través d'Internet i utilitza un navegador web com a client. El canal UPnP i Multicast no tenen cap manera segura de controlar l'accés, i qualsevol dispositiu connectat a la xarxa Wi-Fi pot utilitzar el servidor en execució. Amb el protocol HTTP, podeu definir noms d'usuari i contrasenyes, i establir fitxers en categories d'accés (grups), limitant l'accés a alguns fitxers multimèdia per a usuaris específics. La configuració del servidor permet limitar quins fitxers es distribueixen i establir un nom de categoria per fitxer si és necessari.