FFmpeg (https://www.ffmpeg.org/) is 'n volledige, kruisplatform-oplossing om oudio en video op te neem, om te skakel en te stroom. FFmpeg is die toonaangewende multimedia-raamwerk, wat bykans enigiets wat mense en masjiene geskep het, kan dekodeer, enkodeer, transkodeer, mux, demux, stroom, filter en speel. Dit ondersteun die mees obskure ou formate tot op die voorpunt. Maak nie saak of hulle deur een of ander standaardkomitee, die gemeenskap of 'n korporasie ontwerp is nie.
Dit is ook hoogs draagbaar: FFmpeg stel ons toetsinfrastruktuur saam, loop en slaag FATE oor Linux, Mac OS X, Microsoft Windows, die BSD's, Solaris, ens... onder 'n wye verskeidenheid bou-omgewings, masjienargitekture, en konfigurasies.
Die FFmpeg-biblioteek self is onder LGPL 2.1-lisensie. Deur sekere eksterne biblioteke (soos libx264) te aktiveer, verander die lisensie om GPL 2 of later te wees.
Ek het die ffmpeg-android-maker script (bydraers: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) gebruik om die biblioteke saam te stel. Hierdie skrif laai die bronkode van FFmpeg af van https://www.ffmpeg.org en bou die biblioteek en stel dit vir Android saam. Die skrip produseer gedeelde biblioteke (*.so-lêers) sowel as koplêers (*.h-lêers).
Die hooffokus van ffmpeg-android-maker is om gedeelde biblioteke voor te berei vir naatlose integrasie in 'n Android-projek. Die skrip berei die `afvoer`-gids voor wat bedoel is om gebruik te word. En dit is nie die enigste ding wat hierdie projek doen nie. Die bronkode van die ffmpeg-android-maker is beskikbaar onder die MIT-lisensie. Sien die LICENSE.txt-lêer vir meer besonderhede op https://github.com/Javernaut/ffmpeg-android-maker/ Die eXport-it FFmpeg biblioteke is net saamgestel met libaom, libdav1d, liblame, libopus en libtwolame...maar nie alle geassosieerde biblioteke nie.
Om die Java-ondersteuning vir FFmpeg te ontwikkel en dit op Android 7.1 tot 12 te laat loop, het ek begin vanaf die MobileFFmpeg-projek gedokumenteer op https://github.com/tanersener/mobile-ffmpeg/ deur Taner Sener, wat nie meer onderhou word nie. ... en is gelisensieer onder LGPL 3.0 ...
Uiteindelik het ek 'n JNI Android Studio-projek saam met die biblioteke voorberei, lêers en Java-ondersteuningskode ingesluit, en 'n .aar-biblioteeklêer genereer om as 'n bykomende biblioteek in my bestaande projekte te integreer.
Om 'n multicast-kanaal te begin, vereis om 'n kliënt te gebruik, om toegang te verkry tot 'n UPnP-bediener op jou plaaslike netwerk (Wi-Fi) met die FFmpeg-ondersteuning. Hierdie bediener moet die lêers wat dit uitvoer met die lys beantwoord. As hierdie bediener die FFmpeg-ondersteuning het, moet 'n klein teks "As 'n kanaal" in rooi aan die einde van die boonste reël van die lysbladsy gewys word. Wanneer die teks "rooi" is, werk die klik op die "speel"-knoppie soos voorheen deur die UPnP-protokol te gebruik. As jy op die teks klik, behoort dit "groen" te word en deur op die "speel"-knoppie te klik, nadat video- of oudiolêers gekies is, behoort 'n "kanaal" te begin.
Die geselekteerde medialêers word blykbaar op dieselfde manier as deur UPnP gespeel, behalwe dat die opstartvertraging langer is as gevolg van bykomende take. Jy moet hierdie kliënt die medialêers laat speel om die pyp aktief te hou.
IP multicast werk nie oor internet nie, dit werk net op plaaslike area netwerk dus hoofsaaklik op Wi-Fi. 'n Multicast-datakanaal kan gelyktydig deur baie kliënte gedeel word. Jy stuur 'n mediadatavloei op jou Wi-Fi-netwerk en wys hierdie data op gekoppelde toestelle, byna sinchronies, net die vertragingsvertragingsverskil.
Met UPnP- of HTTP-stroming vereis elke toestel die bandwydte van die video wat gewys word en die globale bandwydte is die som van beide verkeer. Met multicast-stroming stuur ons een datavloei op die LAN wat tussen verskeie kliënte gedeel word.
As jy 'n ander kliënt op jou netwerk gebruik nadat jy 'n kanaal begin het, behoort jy 'n bykomende reël op die kliënt se hoofvenster te sien. Deur net op hierdie reël te klik behoort die vertoning te begin.
Dit is ook haalbaar om ander produkte soos VLC, SMplayer, ... te gebruik om 'n video te wys of om na musiek te luister wat oor 'n multicast-kanaal versprei word net deur die "UDP" URL wat op die eXport-it-kliënt gewys word, te gebruik. p>
Die goeie manier om 'n multicast-kanaal te stop, is om dit te stop op die kliënt waarop jy dit begin het, want hierdie kanaal word daar beheer. Speel tot aan die einde van gestroomde medial
Om 'n multicast-kanaal te begin vereis 'n spesifieke kliëntdeel van hierdie toepassing, dieselfde as die eXport-it-kliënt van my ander bygewerkte produkte. Om 'n lopende multicast-kanaal te gebruik, kan gedoen word met die toepassingskliënt of met ander produkte soos VLC, SMPlayer, ... wat op ander platforms of op Android loop. Wanneer VLC gebruik word, is die URL om 'n Multicast-kanaal te gebruik glad anders soos udp://@239.255.147.111:27192 ... net met 'n ekstra "@". Met 'n UDP Multicast-kanaal word die mediadata net een keer gestuur om op verskeie kliënte gewys te word, maar daar is geen werklike sinchronisasie nie, en die vertraging kan sekondes wees, afhangende van die buffer- en toestelkenmerke.
Luister na 'n oudio multicast-kanaal kan gedoen word met ander produkte, maar die spesifieke kliënt wys beelde wat ook oor IP multicast gestuur word. As jy spesifieke foto's saam met jou musiek wil stuur, kan jy die "Page 2" kieslys opsie op die bediener gebruik, om net die beelde te kies wat jy wil hê, ontkies alle beelde met een klik, kies dan hierdie wat jy wil hê... p>
Daar is voordele en ongerief met elke protokol. UPnP en Multicast-kanaal kan slegs op plaaslike netwerk (hoofsaaklik Wi-Fi) gebruik word, HTTP-stroming werk plaaslik maar ook oor die internet en gebruik 'n webblaaier as kliënt. UPnP- en Multicast-kanaal het geen veilige manier om toegang te beheer nie, en enige toestel wat aan die Wi-Fi-netwerk gekoppel is, kan die lopende bediener gebruik. Met die HTTP-protokol kan jy gebruikersname en wagwoorde definieer, en lêers in toegangskategorieë (groepe) stel, wat toegang tot sommige medialêers vir spesifieke gebruikers beperk. Die instellings van die bediener laat toe om te beperk watter lêers versprei word en om 'n kategorienaam per lêer te stel indien nodig.