FFmpeg (https://www.ffmpeg.org/) est une solution complète et multiplateforme pour enregistrer, convertir et diffuser de l'audio et de la vidéo. FFmpeg est le framework multimédia leader, capable de décoder, encoder, transcoder, multiplexer, démultiplexer, diffuser, filtrer et lire à peu près tout ce que les humains et les machines ont créé. Il prend en charge les formats anciens les plus obscurs jusqu'à la pointe de la technologie. Peu importe s'ils ont été conçus par un comité de normalisation, la communauté ou une entreprise.
Il est également hautement portable : FFmpeg compile, exécute et transmet notre infrastructure de test FATE à travers Linux, Mac OS X, Microsoft Windows, les BSD, Solaris, etc. sous une grande variété d'environnements de construction, d'architectures de machines, et configurations.
La bibliothèque FFmpeg elle-même est sous licence LGPL 2.1. L'activation de certaines bibliothèques externes (comme libx264) modifie la licence en GPL 2 ou version ultérieure.
J'ai utilisé le script ffmpeg-android-maker (contributeurs : Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) pour compiler les bibliothèques. Ce script télécharge le code source de FFmpeg depuis https://www.ffmpeg.org et construit la bibliothèque et l'assemble pour Android. Le script produit des bibliothèques partagées (fichiers *.so) ainsi que des fichiers d'en-tête (fichiers *.h).
L'objectif principal de ffmpeg-android-maker est de préparer des bibliothèques partagées pour une intégration transparente dans un projet Android. Le script prépare le répertoire `output` qui est censé être utilisé. Et ce n'est pas la seule chose que fait ce projet. Le code source de ffmpeg-android-maker est disponible sous licence MIT. Voir le fichier LICENSE.txt pour plus de détails sur https://github.com/Javernaut/ffmpeg-android-maker/ Les bibliothèques eXport-it FFmpeg sont simplement compilées avec libaom, libdav1d, liblame, libopus et libtwolame... mais pas toutes les bibliothèques associées.
Pour développer le support Java de FFmpeg et l'exécuter sur Android 7.1 à 12, je suis parti du projet MobileFFmpeg documenté sur https://github.com/tanersener/mobile-ffmpeg/ par Taner Sener, qui n'est plus maintenu ... et est sous licence LGPL 3.0 ...
Enfin, j'ai préparé un projet JNI Android Studio avec les bibliothèques, inclus des fichiers et du code de support Java, et généré un fichier de bibliothèque .aar à intégrer en tant que bibliothèque supplémentaire dans mes projets existants.
Pour démarrer un canal multicast, il faut utiliser un client, pour accéder à un serveur UPnP sur votre réseau local (Wi-Fi) avec le support FFmpeg. Ce serveur doit répondre par la liste des fichiers qu'il exporte. Si ce serveur a le support FFmpeg, un petit texte "Comme un canal" doit être affiché en rouge à la fin de la ligne supérieure de la page de liste. Lorsque le texte est "rouge", cliquer sur le bouton "jouer" fonctionne comme avant en utilisant le protocole UPnP. Si vous cliquez sur le texte, il devrait devenir "vert" et cliquer sur le bouton "play", après avoir sélectionné des fichiers vidéo ou audio, devrait démarrer une "chaîne".
Les fichiers multimédias sélectionnés sont apparemment lus de la même manière que via UPnP, sauf que le délai de démarrage est plus long en raison de tâches supplémentaires. Vous devez laisser ce client lire les fichiers multimédias pour que le canal reste actif.
La multidiffusion IP ne fonctionne pas sur Internet, elle fonctionne uniquement sur le réseau local, donc principalement sur le Wi-Fi. Un canal de données multicast peut être partagé par plusieurs clients simultanément. Vous envoyez un flux de données multimédia sur votre réseau Wi-Fi et affichez ces données sur les appareils connectés, de manière presque synchrone, juste la différence de délai de latence.
Avec le streaming UPnP ou HTTP, chaque appareil nécessite la bande passante de la vidéo affichée et la bande passante globale est la somme des deux trafics. Avec le streaming multicast, nous envoyons un flux de données sur le LAN qui est partagé entre plusieurs clients.
Si vous utilisez un autre client sur votre réseau après avoir démarré un canal, vous devriez voir une ligne supplémentaire sur la fenêtre principale du client. Un simple clic sur cette ligne devrait démarrer le spectacle.
Il est également possible d'utiliser d'autres produits comme VLC, SMplayer, ... pour afficher une vidéo ou écouter de la musique distribuée sur un canal multicast en utilisant simplement l'URL "UDP" affichée sur le client eXport-it. p>
La bonne façon d'arrêter un Channel multicast est de l'arrêter sur le client sur lequel vous l'avez démarré car ce channel y est contrôlé. La lecture jusqu'à la fin des fichiers multimédias diffusés devrait également donner la fin de l'émission.
Démarrer un canal multicast nécessite une partie client spécifique de cette application, la même que le client eXport-it de mes autres produits à jour. L'utilisation d'un canal multicast en cours d'exécution peut se faire avec le client de l'application ou avec d'autres produits comme VLC, SMPlayer, ... fonctionnant sur d'autres plates-formes ou sur Android. Lorsque vous utilisez VLC, l'URL pour utiliser un canal multidiffusion est légèrement différente comme udp://@239.255.147.111:27192... juste avec un "@" supplémentaire. Avec un canal de multidiffusion UDP, les données multimédias ne sont envoyées qu'une seule fois pour être affichées sur plusieurs clients, mais il n'y a pas de véritable synchronisation et le délai peut être de quelques secondes en fonction de la mise en mémoire tampon et des caractéristiques de l'appareil.
L'écoute d'un canal de multidiffusion audio peut être effectuée avec d'autres produits, mais le client spécifique affiche des images également envoyées via la multidiffusion IP. Si vous souhaitez envoyer des photos spécifiques avec votre musique, vous pouvez utiliser l'option de menu "Page 2" sur le serveur, pour sélectionner uniquement les images souhaitées, désélectionner toutes les images en un clic, puis sélectionner celles que vous souhaitez... p>
Chaque protocole présente des avantages et des inconvénients. Les canaux UPnP et Multicast ne peuvent être utilisés que sur un réseau local (principalement Wi-Fi), le streaming HTTP fonctionne localement mais également sur Internet et utilise un navigateur Web comme client. Les canaux UPnP et Multicast n'ont aucun moyen sécurisé de contrôler l'accès, et tout appareil connecté au réseau Wi-Fi peut utiliser le serveur en cours d'exécution. Avec le protocole HTTP, vous pouvez définir des noms d'utilisateur et des mots de passe, et définir des fichiers dans des catégories d'accès (groupes), limitant l'accès à certains fichiers multimédias pour des utilisateurs spécifiques. Les paramètres du serveur permettent de limiter les fichiers distribués et de définir un nom de catégorie par fichier si nécessaire.