FFmpeg (https://www.ffmpeg.org/) yra išsamus kelių platformų sprendimas, skirtas įrašyti, konvertuoti ir transliuoti garso ir vaizdo įrašus. FFmpeg yra pirmaujanti daugialypės terpės sistema, galinti iššifruoti, užkoduoti, perkoduoti, sumaišyti, demux, srautu, filtruoti ir atkurti beveik viską, ką sukūrė žmonės ir mašinos. Jis palaiko labiausiai neaiškius senovinius formatus iki pažangiausių. Nesvarbu, ar juos sukūrė koks nors standartų komitetas, bendruomenė ar korporacija.
Jis taip pat yra labai nešiojamas: FFmpeg kompiliuoja, vykdo ir perduoda mūsų testavimo infrastruktūrą FATE sistemoje „Linux“, „Mac OS X“, „Microsoft Windows“, BSD, „Solaris“ ir kt... įvairiose kūrimo aplinkose, mašinų architektūrose, ir konfigūracijos.
Pačiai FFmpeg bibliotekai taikoma LGPL 2.1 licencija. Įgalinus tam tikras išorines bibliotekas (pvz., libx264), licencija pakeičiama į GPL 2 arba naujesnę.
Bibliotekoms sudaryti naudojau scenarijų ffmpeg-android-maker (bendradarbiai: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va). Šis scenarijus atsisiunčia FFmpeg šaltinio kodą iš https://www.ffmpeg.org ir sukuria biblioteką bei surenka ją „Android“. Scenarijus sukuria bendrai naudojamas bibliotekas (*.so failus) ir antraštės failus (*.h failus).
Pagrindinis „ffmpeg-android-maker“ tikslas yra parengti bendrinamas bibliotekas, kad jos būtų sklandžiai integruotos į „Android“ projektą. Scenarijus parengia „išvesties“ katalogą, kuris skirtas naudoti. Ir tai nėra vienintelis dalykas, kurį daro šis projektas. „ffmpeg-android-maker“ šaltinio kodas yra prieinamas pagal MIT licenciją. Daugiau informacijos rasite adresu https://github.com/Javernaut/ffmpeg-android-maker/ LICENSE.txt faile eXport-it FFmpeg bibliotekos yra tik sudarytos su libaom, libdav1d, liblame, libopus ir libtwolame... bet ne visomis susijusiomis bibliotekomis.
Norėdamas sukurti FFmpeg „Java“ palaikymą ir paleisti jį 7.1–12 versijose „Android“, pradėjau nuo „MobileFFmpeg“ projekto, kurį adresu https://github.com/tanersener/mobile-ffmpeg/ dokumentavo Taneris Seneris ir kuris daugiau neprižiūrimas. ... ir yra licencijuota pagal LGPL 3.0 ...
Galiausiai parengiau JNI Android Studio projektą su bibliotekomis, įtraukiau failus ir Java palaikymo kodą ir sugeneravau .aar bibliotekos failą, kurį galima integruoti kaip papildomą biblioteką į esamus projektus.
Norint paleisti daugialypės terpės kanalą, reikia naudoti klientą, pasiekti UPnP serverį vietiniame tinkle (Wi-Fi) su FFmpeg palaikymu. Šis serveris turėtų atsakyti į eksportuojamų failų sąrašą. Jei šis serveris palaiko FFmpeg, sąrašo puslapio viršutinės eilutės pabaigoje raudonai turi būti rodomas mažas tekstas „Kaip kanalas“. Kai tekstas yra "raudonas", paspaudus mygtuką "play" veikia kaip prieš naudojant UPnP protokolą. Jei spustelėsite tekstą, jis turėtų tapti „žalias“, o paspaudus mygtuką „play“, pasirinkus vaizdo ar garso failus, turėtų prasidėti „kanalas“.
Pasirinkti medijos failai atkuriami taip pat, nei naudojant UPnP, išskyrus tai, kad paleidimo delsa yra ilgesnė dėl papildomų užduočių. Turite išlaikyti šį klientą leisti medijos failus, kad vamzdis būtų aktyvus.
IP multicast neveikia internetu, jis veikia tik vietiniame tinkle, taigi daugiausia Wi-Fi. Daugialypės siuntimo duomenų kanalą vienu metu gali bendrinti daug klientų. Siunčiate medijos duomenų srautą savo „Wi-Fi“ tinkle ir rodote šiuos duomenis prijungtuose įrenginiuose beveik sinchroniškai, tik delsos delsos skirtumą.
Naudojant UPnP arba HTTP srautinį perdavimą, kiekvienam įrenginiui reikalingas rodomo vaizdo įrašo pralaidumas, o bendras pralaidumas yra abiejų srautų suma. Naudodami daugialypės terpės transliaciją, LAN siunčiame vieną duomenų srautą, kuriuo dalijasi keli klientai.
Jei paleidę kanalą tinkle naudojate kitą klientą, pagrindiniame kliento lange turėtumėte matyti papildomą eilutę. Tiesiog spustelėjus šią eilutę, pasirodymas turėtų prasidėti.
Taip pat galima naudoti kitus produktus, pvz., VLC, SMplayer, ... norint rodyti vaizdo įrašą arba klausytis muzikos, platinamos daugialypės terpės kanalu, naudojant „UDP“ URL, rodomą „eXport-it“ kliente. p>
Geras būdas sustabdyti daugialypės terpės transliacijos kanalą – sustabdyti jį kliento, kuriame jį pradėjote, programoje, nes šis kanalas ten valdomas. Leidžiant iki transliuojamų daugialypės terpės failų pabaigos taip pat turėtų būti rodoma ir rodoma pabaiga.
Norint paleisti daugialypės terpės kanalą, reikalinga konkreti šios programos kliento dalis, tokia pati kaip ir kitų mano naujausių produktų eXport-it klientas. Naudoti veikiantį multicast kanalą galima naudojant programos klientą arba kitus produktus, pvz., VLC, SMPlayer, ... veikiančius kitose platformose arba „Android“. Naudojant VLC, daugialypės terpės kanalo naudojimo URL yra visiškai kitoks, pvz., udp://@239.255.147.111:27192... tik su papildomu „@“. Naudojant UDP daugialypės siuntimo kanalą, medijos duomenys siunčiami tik vieną kartą, kad būtų rodomi keliuose klientuose, tačiau tikrojo sinchronizavimo nėra, o delsa gali būti sekundės, atsižvelgiant į buferį ir įrenginio charakteristikas.
Garso daugialypės siuntimo kanalą galima klausytis naudojant kitus produktus, tačiau konkretus klientas rodo vaizdus, taip pat siunčiamus per IP daugialypės terpės siuntimą. Jei norite siųsti konkrečias nuotraukas su muzika, galite naudoti serverio meniu parinktį „Puslapis 2“, kad pasirinktumėte tik norimus vaizdus, vienu spustelėjimu panaikinkite visų vaizdų pasirinkimą, tada pasirinkite norimus... p>
Kiekvienas protokolas turi privalumų ir nepatogumų. UPnP ir Multicast kanalas gali būti naudojamas tik vietiniame tinkle (daugiausia Wi-Fi), HTTP srautinis perdavimas veikia ne tik vietoje, bet ir internetu, o kaip klientą naudokite žiniatinklio naršyklę. „UPnP“ ir „Multicast“ kanalas neturi saugaus prieigos valdymo būdo, o bet kuris prie „Wi-Fi“ tinklo prijungtas įrenginys gali naudoti veikiantį serverį. Naudodami HTTP protokolą galite apibrėžti vartotojo vardus ir slaptažodžius bei nustatyti failus prieigos kategorijose (grupėse), apribodami prieigą prie kai kurių medijos failų konkretiems vartotojams. Serverio nustatymai leidžia apriboti platinamus failus ir, jei reikia, nustatyti kiekvieno failo kategorijos pavadinimą.