Ang FFmpeg (https://www.ffmpeg.org/) ay isang kumpletong, cross-platform na solusyon upang mag-record, mag-convert at mag-stream ng audio at video. Ang FFmpeg ay ang nangungunang multimedia framework, magagawang mag-decode, mag-encode, mag-transcode, mux, demux, mag-stream, mag-filter at maglaro ng halos anumang bagay na nilikha ng mga tao at makina. Sinusuportahan nito ang pinaka hindi kilalang mga sinaunang format hanggang sa pinakadulo. Hindi mahalaga kung ang mga ito ay dinisenyo ng ilang komite ng pamantayan, komunidad o isang korporasyon.
Ito rin ay lubos na portable: Ang FFmpeg ay nagko-compile, nagpapatakbo, at pumasa sa aming pagsubok na imprastraktura FATE sa buong Linux, Mac OS X, Microsoft Windows, ang mga BSD, Solaris, atbp... sa ilalim ng maraming uri ng build environment, mga arkitektura ng makina, at mga pagsasaayos.
Ang FFmpeg library mismo ay nasa ilalim ng LGPL 2.1 na lisensya. Ang pagpapagana ng ilang mga panlabas na library (tulad ng libx264) ay magbabago sa lisensya upang maging GPL 2 o mas bago.
Ginamit ko ang script ng ffmpeg-android-maker (mga nag-ambag: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) para i-compile ang mga library. Dina-download ng script na ito ang source code ng FFmpeg mula sa https://www.ffmpeg.org at bumuo ng library at binuo ito para sa Android. Gumagawa ang script ng mga shared library (*.so file) pati na rin ang mga header file (*.h file).
Ang pangunahing pokus ng ffmpeg-android-maker ay ang maghanda ng mga nakabahaging aklatan para sa tuluy-tuloy na pagsasama sa isang proyekto sa Android. Inihahanda ng script ang direktoryo ng `output` na dapat gamitin. At hindi lang ito ang ginagawa ng proyektong ito. Ang source code ng ffmpeg-android-maker ay available sa ilalim ng lisensya ng MIT. Tingnan ang LICENSE.txt file para sa higit pang mga detalye sa https://github.com/Javernaut/ffmpeg-android-maker/ Ang mga library ng eXport-it FFmpeg ay pinagsama-sama lang sa libaom, libdav1d, liblame, libopus at libtwolame...ngunit hindi lahat ng nauugnay na library.
Upang bumuo ng suporta sa Java para sa FFmpeg at patakbuhin ito sa Android 7.1 hanggang 12, nagsimula ako sa proyektong MobileFFmpeg na nakadokumento sa https://github.com/tanersener/mobile-ffmpeg/ ni Taner Sener, na hindi na pinapanatili ... at lisensyado sa ilalim ng LGPL 3.0 ...
Sa wakas, naghanda ako ng proyekto ng JNI Android Studio kasama ang mga aklatan, kasama ang mga file at Java support code, at bumuo ng .aar Library file na isasama bilang karagdagang library sa aking mga kasalukuyang proyekto.
Upang magsimula ng isang multicast Channel ay nangangailangan na gumamit ng isang kliyente, upang ma-access ang isang UPnP server sa iyong lokal na network (Wi-Fi) na may suporta sa FFmpeg. Dapat sagutin ng server na ito kasama ng listahan ang mga file na ini-export nito. Kung ang server na ito ay may suporta sa FFmpeg, isang maliit na text na "Bilang isang channel" ay dapat ipakita sa pula sa dulo ng tuktok na linya ng pahina ng listahan. Kapag ang text ay "pula", ang pag-click sa "play" na buton ay gumagana tulad ng dati gamit ang UPnP protocol. Kung magki-click ka sa text, dapat itong maging "berde" at ang pag-click sa "play" na button, pagkatapos pumili ng mga video o audio file, dapat magsimula ng "channel."
Ang mga media file na napili ay tila nilalaro sa parehong paraan kaysa sa pamamagitan ng UPnP, maliban kung ang pagkaantala sa pagsisimula ay mas matagal dahil sa mga karagdagang gawain. Dapat mong panatilihing naglalaro ang kliyenteng ito ng mga media file upang mapanatiling aktibo ang pipe.
Ang IP multicast ay hindi gumagana sa Internet, ito ay gumagana lamang sa Local Area Network kaya pangunahin sa Wi-Fi. Ang isang multicast data channel ay maaaring ibahagi ng maraming kliyente nang sabay-sabay. Nagpapadala ka ng daloy ng data ng media sa iyong Wi-Fi network at ipinapakita ang data na ito sa mga nakakonektang device, halos sabay-sabay, ang pagkakaiba lang ng latency sa pagkaantala.
Sa UPnP o HTTP streaming, ang bawat device ay nangangailangan ng bandwidth ng video na ipinapakita at ang global bandwidth ay ang kabuuan ng parehong trapiko. Sa multicast streaming, nagpapadala kami ng isang daloy ng data sa LAN na ibinabahagi sa pagitan ng maraming kliyente.
Kung gumagamit ka ng isa pang kliyente sa iyong network pagkatapos magsimula ng isang channel, dapat kang makakita ng karagdagang linya sa pangunahing window ng kliyente. Ang pag-click lamang sa linyang ito ay dapat magsimula ng palabas.
Maaari ding gumamit ng iba pang mga produkto tulad ng VLC, SMplayer, ... para magpakita ng video o makinig sa musikang ipinamahagi sa isang multicast channel gamit lang ang "UDP" na URL na ipinapakita sa eXport-it client. p>
Ang magandang paraan para ihinto ang isang multicast na Channel ay ihinto ito sa kliyente kung saan mo ito sinimulan dahil ang channel na ito ay kinokontrol doon. Ang pag-play hanggang sa dulo ng mga naka-stream na media file ay dapat ding magbigay ng pagtatapos ng palabas.