Tīmekļa kamera
Nepacietīgajiem, - tas, ko šoreiz gribu rādīt, atrodas šeit.
Kā zināms, nesen tika iegādāta tīmekļa kamera. Meklējām veidus, kā panākt, ka vēl kāds bez
mums pašiem to kameras bildi var redzēt. Visideālāk būtu straumēt (stream :) ) tīklā video
un skaņu (mikrofonu arī nopirkām). Dabūjām strādājošā kārtībā 2 variantus -
-
NSVTools + ShoutCast + Winamp (straumējam NSV formātā (VP3 video kodētājs), skatamies ar
jebkuru daudzmaz jaunu winampu). Procesora noslodze turējās 50% - 80% - diezgan daudz
(Athlon XP 2500+).
-
Windows Media Encoder - straumējam ar mms protokolu, sakodējam ar Windows Media Video (WMV)
kodētāju. Skatamies ar Media Player. Procesora noslodze 30% - 60%.
Abiem variantiem ir viens ļoti nopietns trūkums - esam LANET tīkla iekšpusē, starp LANET un
ārējo pasauli ir ugunsmūris un no ārpuses nevienam portam savienojumi neiet cauri. Varianti
-
-
Lietot Shoutcast serveri ārpus LANET - cik meklēju, visi bija par $$$
-
Lietot kādu servisu, kas ar saskaņotu servera un klienta puses programmatūru māk izmānīt tā,
ka ienākošie savienojumi tomēr tiek pieņemti. Tādi atradās tikai ārzemēs un - ļoti lēni un
par - $$$.
Kā redzams, sevišķi lielu iespēju straumēt video un audio mums nav. Paliek daudz
primitīvākais variants savus datus publiskot, reizi noteiktā intervālā kopējot uzņemto bildi
uz kādu FTP serveri. Šim darbam domātu programmu ir cik uziet, un šo ceļu mums arī nācās
izvēlēties. Attēla atjaunošanas laika intervāls tika izvēlēts pats mazākais pieejamais -
reize sekundē. Ik sekundi no mana datora tiek ielādēts attēls uz FTP serveri.
Šo augšupielādēto bildi var skatīties jebkurā pārlūkprogrammā, visu laiku to
atsvaidzinot (refresh). Nav pārāk ērti visu laiku spaidīt F5 vai klikšķināt peli,
tāpēc uztaisīju mazu html dokuemntiņu, kas reizi sekundē pats sevi ielādēja. Trūkums - bieži
gadījās, ka attēlu mēģina lasīt tajā brīdī, kad tas tiek rakstīts, līdz ar to attēls
raustījās, brīžam nerādījās, vai rādījās tikai daļēji.
Lai daļēji kompensētu zemu attēla atjaunināšanas ātrumu, sadomāju uztaisīt tā, lai ielādētie
attēli plūstoši pāriet viens otrā. Sāku ar mēģinājumu šo lietu realizēt ar Flash un
Actionscript, tad pārgāju pie JavaScript. Rezultāts.
Dažas interesantas lietas, ar ko saskāros -
-
Nav standartizēta veida, kā uzstādīt attēla "caurspīdīgumu" - IE lieto savu īpašo filtru
"alpha(opacity=x)", Mozilla lieto savu īpašo CSS definīciju "-moz-opacity:x".
-
Lai pārlūku piespiestu vēlreiz ielādēt vienu un to pašu attēlu, tā url'am jāpievieno katru
reizi cits "query string" - cam.jpg?1, cam.jpg?2, cam.jpg?3 ...
Lai novērstu problēmu, ka reizēm attēlu nevarēs ielādēt, ja tas tajā brīdī tiek rakstīts,
lietojam trīs absolūti pozicionētas, vienu uz otras novietotas bildes, kas katra tiek
ielādēta citā brīdī - varbūtība, ka neviena no trijām nebūs ielādējusies ir diezgan maza.
Trūkums - trīsreiz vairāk lejupielādējam, trīsreiz vairāk aizņemam savu joslu.