FFmpeg-ը (https://www.ffmpeg.org/) ամբողջական, միջպլատֆորմային լուծում է՝ ձայնագրելու, փոխակերպելու և հեռարձակելու աուդիո և վիդեո: FFmpeg-ը առաջատար մուլտիմեդիա շրջանակն է, որը կարող է վերծանել, կոդավորել, տրանսկոդավորել, mux, demux, հոսք, զտել և խաղալ գրեթե այն ամենը, ինչ ստեղծել են մարդիկ և մեքենաները: Այն աջակցում է ամենաանհասկանալի հնագույն ձևաչափերը մինչև ամենակարևորը: Անկախ նրանից, թե դրանք նախագծված են ստանդարտների որոշ կոմիտեի, համայնքի կամ կորպորացիայի կողմից:
Այն նաև շատ շարժական է. FFmpeg-ը հավաքում, գործարկում և փոխանցում է մեր փորձարկման ենթակառուցվածքը FATE-ը Linux-ի, Mac OS X-ի, Microsoft Windows-ի, BSD-ների, Solaris-ի և այլնի միջոցով... կառուցման միջավայրերի, մեքենաների ճարտարապետության լայն տեսականիով, և կոնֆիգուրացիաներ:
FFmpeg գրադարանն ինքնին գտնվում է LGPL 2.1 լիցենզիայի տակ: Որոշ արտաքին գրադարաններ (օրինակ՝ libx264) միացնելը փոխում է լիցենզիան GPL 2 կամ ավելի նոր տարբերակով:
Ես օգտագործել եմ ffmpeg-android-maker սկրիպտը (ներդնողներ՝ Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) գրադարանները կազմելու համար: Այս սցենարը ներբեռնում է FFmpeg-ի սկզբնական կոդը https://www.ffmpeg.org-ից և կառուցում գրադարանը և հավաքում այն Android-ի համար: Սցենարը ստեղծում է ընդհանուր գրադարաններ (*.so ֆայլեր), ինչպես նաև վերնագրի ֆայլեր (*.h ֆայլեր):
ffmpeg-android-maker-ի հիմնական նպատակն է պատրաստել ընդհանուր գրադարաններ՝ Android նախագծին անխափան ինտեգրման համար: Սցենարը պատրաստում է «ելքային» գրացուցակը, որը նախատեսված է օգտագործելու համար: Եվ դա միակ բանը չէ, ինչ անում է այս նախագիծը: ffmpeg-android-maker-ի աղբյուրի կոդը հասանելի է MIT լիցենզիայի ներքո: Լրացուցիչ մանրամասների համար տես LICENSE.txt ֆայլը https://github.com/Javernaut/ffmpeg-android-maker/ կայքում eXport-it FFmpeg գրադարանները պարզապես կազմված են libaom, libdav1d, liblame, libopus և libtwolame...բայց ոչ բոլոր հարակից գրադարաններով:
FFmpeg-ի Java-ի աջակցությունը զարգացնելու և այն Android 7.1-ից մինչև 12-ը գործարկելու համար ես սկսեցի Taner Sener-ի կողմից https://github.com/tanersener/mobile-ffmpeg/-ում փաստագրված MobileFFmpeg նախագծից, որն այլևս չի պահպանվում: ... և լիցենզավորված է LGPL 3.0 ...
Վերջապես, ես գրադարանների հետ պատրաստեցի JNI Android Studio նախագիծ, ներառեցի ֆայլեր և Java-ի աջակցման կոդը և ստեղծեցի .aar Library ֆայլ՝ որպես լրացուցիչ գրադարան իմ գոյություն ունեցող նախագծերին ինտեգրելու համար:
Մուլտիհեռարձակման ալիք սկսելու համար անհրաժեշտ է օգտագործել հաճախորդ՝ ձեր տեղական ցանցում (Wi-Fi) UPnP սերվեր մուտք գործելու համար FFmpeg աջակցությամբ: Այս սերվերը պետք է պատասխանի իր արտահանվող ֆայլերի ցանկով: Եթե այս սերվերն ունի FFmpeg աջակցություն, ապա ցուցակի էջի վերևի տողի վերջում պետք է կարմիր գույնով ցուցադրվի «Որպես ալիք» փոքր տեքստը: Երբ տեքստը «կարմիր է», սեղմելով «play» կոճակը, աշխատում է այնպես, ինչպես նախկինում, օգտագործելով UPnP արձանագրությունը: Եթե սեղմում եք տեքստի վրա, այն պետք է դառնա «կանաչ», և սեղմելով «play» կոճակը, վիդեո կամ աուդիո ֆայլեր ընտրելուց հետո պետք է բացվի «ալիք»:
Ընտրված մեդիա ֆայլերը, ըստ երեւույթին, նվագարկվում են նույն կերպ, քան UPnP-ի միջոցով, բացառությամբ, որ գործարկման հետաձգումն ավելի երկար է պայմանավորված լրացուցիչ առաջադրանքների պատճառով: Դուք պետք է շարունակեք այս հաճախորդը նվագարկել մեդիա ֆայլերը՝ խողովակն ակտիվ պահելու համար:
IP multicast-ը չի աշխատում ինտերնետի միջոցով, այն աշխատում է միայն Տեղական ցանցում, հետևաբար հիմնականում Wi-Fi-ով: Multicast տվյալների ալիքը կարող է համօգտագործվել բազմաթիվ հաճախորդների կողմից միաժամանակ: Դուք մեդիա տվյալների հոսք եք ուղարկում ձեր Wi-Fi ցանցի վրա և ցույց եք տալիս այս տվյալները միացված սարքերի վրա, գրեթե համաժամանակյա, ընդամենը հապաղման հետաձգման տարբերությունը:
UPnP կամ HTTP հոսքի դեպքում յուրաքանչյուր սարքի համար պահանջվում է ցուցադրվող տեսանյութի թողունակությունը, իսկ գլոբալ թողունակությունը երկու տրաֆիկի գումարն է: Multicast հոսքի միջոցով մենք տվյալների մեկ հոսք ենք ուղարկում LAN-ով, որը համօգտագործվում է բազմաթիվ հաճախորդների միջև:
Եթե ալիք սկսելուց հետո ձեր ցանցում այլ հաճախորդ եք օգտագործում, հաճախորդի հիմնական պատուհանում պետք է տեսնեք լրացուցիչ տող: Պարզապես սեղմելով այս տողի վրա, պետք է սկսվի ցուցադրությունը:
Հնարավոր է նաև օգտագործել այլ ապրանքներ, ինչպիսիք են VLC-ը, SMplayer-ը, ... տեսահոլովակ ցուցադրելու կամ երաժշտություն լսելու համար, որը բաշխված է բազմակի հեռարձակման ալիքով, պարզապես օգտագործելով eXport-it հաճախորդի վրա ցուցադրված «UDP» URL-ը:
Մուլտիհեռարձակման ալիքը դադարեցնելու լավ միջոցն այն է, որ այն դադարեցվի այն հաճախորդի վրա, որի վրա այն սկսել եք, քանի որ այս ալիքը վերահսկվում է այնտեղ: Հեռարձակվող մեդիա ֆայլերի մինչև վերջ նվագարկումը նույնպես պետք է ավարտի ցուցադրությունը:
Մուլտիհեռարձակման ալիք սկսելու համար պահանջվում է այս հավելվածի հատուկ հաճախորդի մաս, նույնը, ինչ իմ այլ արդի արտադրանքների eXport-it հաճախորդը: Գործող բազմակի հեռարձակման ալիք օգտագործելը կարող է իրականացվել հավելվածի հաճախորդի կամ այլ արտադրանքների հետ, ինչպիսիք են VLC-ը, SMPlayer-ը, ..., որոնք աշխատում են այլ հարթակներում կամ Android-ում: VLC օգտագործելիս Multicast ալիք օգտագործելու URL-ը սահուն կերպով տարբերվում է, օրինակ՝ udp://@239.255.147.111:27192... պարզապես լրացուցիչ «@»-ով: UDP Multicast ալիքով մեդիա տվյալները ուղարկվում են միայն մեկ անգամ՝ մի քանի հաճախորդների վրա ցուցադրելու համար, սակայն իրական համաժամացում չկա, և հետաձգումը կարող է լինել վայրկյաններ՝ կախված բուֆերացման և սարքի բնութագրերից:
Աուդիո բազմակի հեռարձակման ալիքը լսելը կարող է իրականացվել այլ արտադրանքներով, սակայն կոնկրետ հաճախորդը ցույց է տալիս պատկերներ, որոնք ուղարկվում են նաև IP multicast-ով: Եթե ցանկանում եք ուղարկել կոնկրետ լուսանկարներ ձեզ հետ երաժշտությամբ, կարող եք օգտագործել «Էջ 2» ընտրացանկի տարբերակը սերվերում, ընտրել միայն ձեր ուզած պատկերները, մեկ սեղմումով հանել բոլոր նկարները, ապա ընտրել դրանք, որոնք ցանկանում եք... p>
Յուրաքանչյուր արձանագրության հետ կապված կան առավելություններ և անհարմարություններ: UPnP և Multicast ալիքները կարող են օգտագործվել միայն տեղական ցանցում (հիմնականում Wi-Fi), HTTP հոսքը աշխատում է տեղական, բայց նաև ինտերնետի միջոցով և որպես հաճախորդ օգտագործում է վեբ բրաուզեր: UPnP-ը և Multicast ալիքը մուտքը վերահսկելու անվտանգ միջոց չունեն, և ցանկացած սարք, որը միացված է Wi-Fi ցանցին, կարող է օգտագործել գործող սերվերը: HTTP արձանագրության միջոցով դուք կարող եք սահմանել օգտանուններ և գաղտնաբառեր, ինչպես նաև սահմանել ֆայլերը մուտքի կատեգորիաներում (խմբերում)՝ սահմանափակելով որոշ մեդիա ֆայլերի հասանելիությունը որոշակի օգտվողների համար: Սերվերի կարգավորումները թույլ են տալիս սահմանափակել բաշխված ֆայլերը և անհրաժեշտության դեպքում սահմանել կատեգորիայի անվանում յուրաքանչյուր ֆայլի համար: