FFmpeg (https://www.ffmpeg.org/) - гэта поўнае кросплатформеннае рашэнне для запісу, пераўтварэння і перадачы аўдыё і відэа. FFmpeg - гэта вядучая мультымедыйная структура, здольная дэкадаваць, кадаваць, перакадаваць, муксаваць, дэмуксіраваць, перадаваць, фільтраваць і прайграваць практычна ўсё, што стварылі людзі і машыны. Ён падтрымлівае самыя незразумелыя старажытныя фарматы аж да самых сучасных. Незалежна ад таго, распрацаваны яны нейкім камітэтам па стандартах, супольнасцю або карпарацыяй.
Ён таксама вельмі партатыўны: FFmpeg кампілюе, запускае і перадае нашу тэставую інфраструктуру FATE праз Linux, Mac OS X, Microsoft Windows, BSD, Solaris і г.д.... у самых розных асяроддзях зборкі, архітэктуры машын, і канфігурацыі.
Сама бібліятэка FFmpeg знаходзіцца пад ліцэнзіяй LGPL 2.1. Уключэнне некаторых знешніх бібліятэк (напрыклад, libx264) змяняе ліцэнзію на GPL 2 або больш познюю версію.
Для кампіляцыі бібліятэк я выкарыстаў скрыпт ffmpeg-android-maker (укладальнікі: Аляксандр Беражной Javernaut + codacy-badger Codacy Badger + A2va). Гэты скрыпт загружае зыходны код FFmpeg з https://www.ffmpeg.org, стварае бібліятэку і збірае яе для Android. Скрыпт стварае агульныя бібліятэкі (файлы *.so), а таксама файлы загалоўкаў (файлы *.h).
Асноўная задача ffmpeg-android-maker - падрыхтаваць агульныя бібліятэкі для бесперабойнай інтэграцыі ў праект Android. Скрыпт рыхтуе каталог `output`, які прызначаны для выкарыстання. І гэта не адзінае, чым займаецца гэты праект. Зыходны код ffmpeg-android-maker даступны па ліцэнзіі MIT. Глядзіце файл LICENSE.txt для атрымання дадатковай інфармацыі на https://github.com/Javernaut/ffmpeg-android-maker/ Бібліятэкі FFmpeg eXport-it проста кампілююцца з libaom, libdav1d, liblame, libopus і libtwolame... але не з усімі асацыяванымі бібліятэкамі.
Каб распрацаваць падтрымку Java для FFmpeg і запусціць яе на Android ад 7.1 да 12, я пачаў з праекта MobileFFmpeg, задакументаванага на https://github.com/tanersener/mobile-ffmpeg/ ад Taner Sener, які больш не падтрымліваецца ... і ліцэнзаваны пад LGPL 3.0 ...
Нарэшце, я падрыхтаваў праект JNI Android Studio з бібліятэкамі, уключыў файлы і код падтрымкі Java і згенераваў файл бібліятэкі .aar для інтэграцыі ў якасці дадатковай бібліятэкі ў мае існуючыя праекты.
Для запуску канала шматрассылання неабходна выкарыстоўваць кліент для доступу да сервера UPnP у вашай лакальнай сеткі (Wi-Fi) з падтрымкай FFmpeg. Гэты сервер павінен адказаць са спісам файлаў, якія ён экспартуе. Калі гэты сервер падтрымлівае FFmpeg, невялікі тэкст "Як канал" павінен быць паказаны чырвоным колерам у канцы верхняга радка старонкі спісу. Калі тэкст «чырвоны», націск на кнопку «прайграць» працуе, як і раней пры выкарыстанні пратаколу UPnP. Калі вы націснеце на тэкст, ён павінен стаць «зялёным», а пры націску на кнопку «прайграць» пасля выбару відэа- або аўдыяфайлаў павінен запусціць «канал».
Выбраныя мультымедыйныя файлы прайграваюцца, відаць, такім жа чынам, чым праз UPnP, за выключэннем таго, што затрымка запуску большая з-за дадатковых задач. Вы павінны працягваць гэты кліент прайграваць мультымедыйныя файлы, каб канал быў актыўным.
Мультыкаст IP не працуе праз Інтэрнэт, ён працуе толькі ў лакальнай сеткі, такім чынам, у асноўным па Wi-Fi. Канал перадачы даных можа выкарыстоўвацца многімі кліентамі адначасова. Вы адпраўляеце паток медыя-даных у сваю сетку Wi-Fi і паказваеце гэтыя даныя на падлучаных прыладах амаль сінхронна, толькі розніца ў затрымцы.
З UPnP або HTTP струменевым для кожнай прылады патрабуецца прапускная здольнасць паказанага відэа, а глабальная прапускная здольнасць - гэта сума абодвух трафікаў. Пры шматкастнай трансляцыі мы адпраўляем адзін паток даных па лакальнай сетцы, які выкарыстоўваецца некалькімі кліентамі.
Калі вы выкарыстоўваеце іншы кліент у вашай сеткі пасля запуску канала, вы павінны ўбачыць дадатковую радок у галоўным акне кліента. Проста націск на гэты радок павінен пачаць шоў.
Таксама магчыма выкарыстоўваць іншыя прадукты, такія як VLC, SMplayer, ... для паказу відэа або праслухоўвання музыкі, распаўсюджваемай па канале шматкастнай рассылкі, проста выкарыстоўваючы URL-адрас "UDP", паказаны на кліенте eXport-it. p>
Добры спосаб спыніць шматкаляцыйны канал - гэта спыніць яго на кліенце, на якім вы яго запусцілі, таму што гэты канал кіруецца там. Прайграванне да канца трансляцыйных медыяфайлаў таксама павінна завяршыць шоу.
Для запуску канала шматкастнай рассылкі патрабуецца пэўная кліенцкая частка гэтай праграмы, такая ж, як кліент eXport-it для іншых маіх сучасных прадуктаў. Выкарыстоўваць запушчаны шматкаляцыйны канал можна з дапамогай кліента прыкладання або іншых прадуктаў, такіх як VLC, SMPlayer, ..., якія працуюць на іншых платформах або на Android. Пры выкарыстанні VLC URL для выкарыстання канала Multicast плаўна адрозніваецца, як udp://@239.255.147.111:27192... толькі з дадатковым «@». З дапамогай канала Multicast UDP медыя-дадзеныя адпраўляюцца толькі адзін раз для паказу на некалькіх кліентах, але рэальнай сінхранізацыі няма, а затрымка можа складаць секунды ў залежнасці ад буферызацыі і характарыстык прылады.
Праслухоўванне аўдыё канала шматкастнай рассылкі можна рабіць і з іншымі прадуктамі, але канкрэтны кліент паказвае выявы, таксама адпраўленыя па IP-каналу. Калі вы хочаце адправіць пэўныя фатаграфіі з музыкай, вы можаце выкарыстоўваць опцыю меню «Старонка 2» на серверы, каб выбраць толькі тыя выявы, якія вы хочаце, скасаваць выбар усіх малюнкаў адным пстрычкай мышы, а затым выбраць тыя, якія вы хочаце... p>
У кожнага пратакола ёсць свае перавагі і нязручнасці. Канал UPnP і Multicast можна выкарыстоўваць толькі ў лакальнай сеткі (у асноўным Wi-Fi), струменевая трансляцыя HTTP працуе лакальна, але таксама праз Інтэрнэт і выкарыстоўваць вэб-браўзэр у якасці кліента. UPnP і канал Multicast не маюць бяспечнага спосабу кантролю доступу, і любая прылада, падключаная да сеткі Wi-Fi, можа выкарыстоўваць запушчаны сервер. З дапамогай пратаколу HTTP вы можаце вызначаць імёны карыстальнікаў і паролі, а таксама ўсталёўваць файлы ў катэгорыі (групы) доступу, абмяжоўваючы доступ да некаторых медыяфайлаў для пэўных карыстальнікаў. Налады сервера дазваляюць абмежаваць, якія файлы распаўсюджваюцца, і задаць назву катэгорыі для файла, калі патрабуецца.