Sisuliselt kõik levinud videoedastusmeetodid ja -protokollid läbi proovitud! Olin peaaegu kogu projekti korstnasse kirjutamas, sest Raspberryst lihtsalt ei tundunud olema võimalik alla 1-sekundilise viivituse videot kuidagi kätte saada, seda isegi sisevõrgus. Olin päris nördinud, et tänasel päeval ei ole ainsatki normaalset lahendust. Lahendusi on aga kõik on suure viivitusega. Ja põhimõtteliselt reaalaja video edastamine veebi tuli kohe ära unustada. Uskumatu aga selleks ei leidnudki ühtki head lahendust ja selle üle olin väga pettunud kuna plaan oli teha 100% browser-based juhtimine.
Igatahes, lõpuks proovisin GStreamer-i nimelist vidinat ja tundus, et nüüd edasi on vaid softikirjutamise rida. Päris nii lihtne siiski ei olnud. Sisevõrgus autost arvutisse pildi saamine üle UDP, kasutades mõlemas otsas GStreameri enda rakendusi, oli tõesti lihtsamast lihtsam ja viivitus oli juba üsna madal:
Tjah. Proovitud sai ka üle TCP videot edastada sest nõnda oleks päris palju asju lihtsamini lahendatavad aga üle TCP overhead oli koheselt 1-2 sekundit mis ei ole kuidagi OK auto juhtimise seisukohalt. Natuke bitrate-i kohendades sai sisevõrgus üle UDP viivituse ülimadalaks, sisuliselt reaalajaks. Aga sisevõrgus juhtimine mind ei huvita ja nõnda läks jälle auto testimiseks väga olematut kiirust pakkuva netipulga peale. Siin aga tekkisid mõned UDP kasutamisest kaasnevad tagasilöögid. Auto-server-klient andmete edastamine olnuks TCP-ga väga lihtne, UDP-ga oli paras väljakutse. Autost serverisse – easy. Kuidas sealt edasi suvalisele kliendile kellel ei ole avatud porte, vajas natuke mõtlemist. Asi ka muidugi kergelt sellest, et olin siiani UDP-ga vähe kokku puutunud ja kolmeliikmelist lüli ning väljaspool sisevõrku ei olnud UDP-ga kunagi proovinud. Taaskord oli veider see, et Googlest ei leidnud ühtegi konkreetset näidet sellise ülesehituse kohta. Üritan sellest teemast eraldi postituse teha.
Igal juhul kui sain esimest korda näha üle netipulga edastatud near-realtime videot ja kui madal viivitus isegi läbi selle aeglase pulga/paketi tuli, üllatas väga:
Seejuures gStreamer töötleb videot GPU-s ning CPU kasutus jäi stabiilselt vaid ~5-8% juurde. Selline efektiivsus on hea ja see säästab kokkuvõttes oluliselt ka akut. ffmpeg ja alternatiivid kasutasid kõik 100% CPU-d.
Paraku olen hetkel sunnitud auto juhtimiseks kirjutama eraldi programmi ja videopildi jaoks kasutama gstreamerit mõlemas otsas. Kuna päevast-päeva tegelen veebitehnoloogiatega ja mulle tundus juba vaikselt, et veebis on tänasel päeval võimalik pea kõik ära teha siis tilgub süda natuke verd küll.
To be continued… :)