Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace IP ch˚ uviˇ cka
Plzeˇ n 2014
Petra Kˇrivanov´a
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracovala samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 9. kvˇetna 2014 Petra Kˇrivanov´a
Abstract IP Baby Monitor This thesis presents a development of a baby monitor (hereinafter ”monitor”) which can use a computer network. Many of the commonly used monitors have a considerable disadvantage - they do not work in a room where the WiFi is established. This problem is caused by the fact that respective devices use radio waves with the same frequency. In addition, monitors usually do not support any kind of protection for data transmission. This shortage does not only allow the intruder to watch the baby and the equipment yet he can even spy the people. The main goal is to create a baby monitor which can use the computer network (WiFi) for encrypted data transmission of audio and video streams. This IP baby monitor is a software application that is implemented for two operating systems (Windows, GNU/Linux). The monitor uses the server-client architecture. The server is a program running on a device with camera and microphone and it is placed in the baby’s room. The client is in the parent’s room and it can play the stream produced by the server. The server program can also analyze the stream from the camera and the sound from the microphone and it can find motion or volume changes. The clients are notified with a message if there is such a change. The parents have continual supervision of what happens in baby’s room.
Obsah ´ 1 Uvod 2 Existuj´ıc´ı ˇ reˇ sen´ı 2.1 Teoretick´ y z´aklad . . . 2.1.1 St´avaj´ıc´ı ˇreˇsen´ı 2.1.2 Nov´a aplikace . 2.2 V´ yhody a nev´ yhody . 2.2.1 St´avaj´ıc´ı ˇreˇsen´ı 2.2.2 Nov´e ˇreˇsen´ı . . 2.2.3 Souhrn . . . . .
1
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
2 2 2 2 3 3 4 5
3 Anal´ yza probl´ emu 3.1 Architektura aplikace . . . . . . . . . . . . . 3.1.1 Sluˇzby serveru . . . . . . . . . . . . . 3.1.2 Moˇznosti klienta . . . . . . . . . . . 3.1.3 Komunikace . . . . . . . . . . . . . . 3.2 Zabezpeˇcen´ı . . . . . . . . . . . . . . . . . . 3.2.1 Registrace . . . . . . . . . . . . . . . 3.2.2 Pˇrihl´aˇsen´ı . . . . . . . . . . . . . . . 3.2.3 Komunikace . . . . . . . . . . . . . . 3.3 Stream . . . . . . . . . . . . . . . . . . . . . 3.3.1 Audio . . . . . . . . . . . . . . . . . 3.3.2 Video . . . . . . . . . . . . . . . . . 3.3.3 Knihovna pro pr´aci s audiem/videem 3.3.4 Moˇznosti pˇrenosu streamu . . . . . . 3.3.5 Pˇrehr´av´an´ı streamu . . . . . . . . . . 3.3.6 Detekce zmˇen . . . . . . . . . . . . . 3.4 Spr´ava serveru . . . . . . . . . . . . . . . . . 3.4.1 Pˇrid´an´ı nov´ ych uˇzivatel˚ u . . . . . . . 3.4.2 Nastaven´ı serveru . . . . . . . . . . . 3.4.3 Nastaven´ı streamu . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
8 8 8 9 9 10 11 14 19 26 26 27 30 31 35 36 37 37 38 40
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
OBSAH
OBSAH
4 Program´ atorsk´ a pˇ r´ıruˇ cka 4.1 Architektura aplikace . . . . . . 4.1.1 Server . . . . . . . . . . 4.1.2 Klient . . . . . . . . . . 4.2 Zabezpeˇcen´ı . . . . . . . . . . . 4.2.1 Pˇrihl´aˇsen´ı . . . . . . . . 4.2.2 Z´ısk´an´ı ˇsifrovac´ıch kl´ıˇc˚ u 4.2.3 Multicast . . . . . . . . 4.2.4 Komunikace . . . . . . . 4.3 Stream . . . . . . . . . . . . . . 4.3.1 FFmpeg . . . . . . . . . 4.3.2 Pˇrenos streamu . . . . . 4.3.3 Pˇresmˇerov´an´ı logu . . . 4.3.4 Detekce zmˇen . . . . . . 4.3.5 Pˇrehr´av´an´ı streamu . . . 4.3.6 Ukl´ad´an´ı streamu . . . . 4.4 Spr´ava serveru . . . . . . . . . . 4.4.1 Registrace . . . . . . . . 4.4.2 Ukl´ad´an´ı hodnot . . . . 4.5 Grafick´e rozhran´ı . . . . . . . . 4.6 Konzolov´e rozhran´ı . . . . . . .
. . . . . . . . . . . . . . . . . . . .
41 41 41 43 44 44 45 45 46 48 48 50 51 51 52 53 53 54 56 56 57
5 Namˇ eˇ ren´ e hodnoty 5.1 Vyuˇzit´ı ˇs´ıˇrky p´asma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Vyuˇzit´ı pamˇeti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Pˇrehr´av´an´ı streamu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59 59 59 60
6 Z´ avˇ er
63
Literatura
64
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
Pˇ r´ılohy 68 Uˇzivatelsk´a pˇr´ıruˇcka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Obsah CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
III
Seznam obr´ azk˚ u 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14
Sch´ematick´ y obr´azek fungov´an´ı aplikace. . . . . . . . . . . . . . Autentizace serveru pomoc´ı SSL. [17] . . . . . . . . . . . . . . . Varov´an´ı pˇri pouˇzit´ı ned˚ uvˇeryhodn´eho certifik´atu. . . . . . . . Aplikace S-box na kaˇzd´ y byte u ˇsifry AES v SubBytes f´azi [28]. . Posun ˇra´dk˚ u u ˇsifry AES v ShiftRow f´azi [26]. . . . . . . . . . . Pseudok´od ˇsifry AES [23] (obr. byl upraven). . . . . . . . . . . . ˇ Sifrov´ an´ı AES pomoc´ı metody CBC [30] (obr. byl upraven). . . ˇ Sifrov´ an´ı AES pomoc´ı metody CFB [31] (obr. byl upraven). . . Uk´azka pouˇzit´ı ECB a CBC m´od˚ u na obr´azek [7]. . . . . . . . . Spojen´ı 2(4) pixel˚ u chrominanˇcn´ıho kan´alu dohromady [8]. . . . Uk´azka posloupnosti r´amc˚ u v MPEGu [2]. . . . . . . . . . . . . Kop´ırov´an´ı jednoho vstupu na v´ıce v´ ystup˚ u u FFmpegu [35]. . . K´odov´an´ı vstupu pro kaˇzd´ y v´ ystup zvl´aˇst’ u FFmpegu [35]. . . . Pˇrehr´av´an´ı ˇsifrovan´eho streamu pomoc´ı SRTP a UDP protokol˚ u.
4.1 4.2
UML diagram tˇr´ıd pro server. . . . . . . . . . . . . . . . . . . . . . . 42 UML diagram tˇr´ıd pro klienta. . . . . . . . . . . . . . . . . . . . . . . 43
5.1
Neˇz´adouc´ı ruˇsen´ı obrazu. . . . . . . . . . . . . . . . . . . . . . . . . . 60
P P P P P P P P P P P
1 2 3 4 5
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
Pˇrihlaˇsovac´ı okno do aplikace klienta. . . . . . . . . . . . . . . . . . Klientsk´ y program - pˇrehr´avaˇc. . . . . . . . . . . . . . . . . . . . . Ikona pˇrehr´avaˇce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zobrazen´ı zpr´avy u klienta pˇri zmˇenˇe. . . . . . . . . . . . . . . . . Zobrazen´ı posledn´ı obdrˇzen´e zpr´avy o zmˇenˇe v oznamovac´ı oblasti po stisku ikony pˇrehr´avaˇce. . . . . . . . . . . . . . . . . . . . . . . . . 6 Str´anka pro pˇrid´an´ı nov´ ych klient˚ u. . . . . . . . . . . . . . . . . . 7 Seznam registrovan´ ych uˇzivatel˚ u. . . . . . . . . . . . . . . . . . . . 8 Str´anka pro nastaven´ı mez´ı pro detekce zmˇen. . . . . . . . . . . . . 9 Str´anka pro nastaven´ı parametr˚ u streamu. . . . . . . . . . . . . . . 10 Str´anka pro nastaven´ı serveru. . . . . . . . . . . . . . . . . . . . . 11 Nastaven´ı povolen´ı aplikace ve firewallu syst´emu. . . . . . . . . . . IV
. . . . . . . . . . . . . .
10 12 13 22 23 24 24 25 25 28 29 33 33 34
. . . .
72 73 73 73
. . . . . . .
74 75 76 76 77 78 79
´ ˚ SEZNAM OBRAZK U
´ ˚ SEZNAM OBRAZK U
P 12 Povolen´ı pˇr´ıchoz´ıho spojen´ı na klienta. . . . . . . . . . . . . . . . . . 80 P 13 N´ahled na spuˇstˇen´ y pˇrehr´avaˇc i s oknem se streamem. . . . . . . . . 84
V
Seznam tabulek 2.1
Souhrn nedostatk˚ u souˇcasn´ ych ch˚ uviˇcek. . . . . . . . . . . . . . . . .
3.1
Postup autentizace SRP protokolu [37]. . . . . . . . . . . . . . . . . . 17
4.1 4.2
Typy a v´ yznam komunikaˇcn´ıch zpr´av. . . . . . . . . . . . . . . . . . . 47 Popis parametr˚ u FFmpegu [12]. . . . . . . . . . . . . . . . . . . . . . 50
5.1 5.2
Vyuˇzit´ı ˇs´ıˇrky p´asma programy. . . . . . . . . . . . . . . . . . . . . . . 61 Vyuˇzit´ı pamˇeti program˚ u. . . . . . . . . . . . . . . . . . . . . . . . . 62
VI
4
´ 1 Uvod Dˇetsk´e elektronick´e ch˚ uviˇcky (d´ale jen ch˚ uviˇcky) jiˇz d´avno nejsou jen jednocestn´e vys´ılaˇcky pro pˇrenos zvuku. Dnes jsou k dost´an´ı ch˚ uviˇcky, kter´e kromˇe pˇrenosu zvuku zvl´adaj´ı i pˇrenos obrazu, hl´ıd´an´ı teploty v m´ıstnosti, hl´ıd´an´ı hladiny zvuku, detekuj´ı zmˇenu obrazu, hraj´ı dˇetem ukol´ebavky nebo maj´ı i noˇcn´ı vidˇen´ı. Hodnˇe dneˇsn´ıch ch˚ uviˇcek m´a vˇsak jednu z´asadn´ı vadu, a sice ˇze vys´ılaj´ı ve stejn´em frekvenˇcn´ım p´asmu, jako WiFi s´ıtˇe. V´ ysledek je takov´ y, ˇze ani jedno zaˇr´ızen´ı nefunguje tak, jak by mˇelo. V nˇekter´ ych pˇr´ıpadech dok´aˇz´ı ch˚ uviˇcky dokonce i vyˇradit bezdr´atovou s´ıt’ z provozu u ´plnˇe. C´ılem t´eto pr´ace je vytvoˇrit softwarovou aplikaci, kter´a bude pouˇz´ıvat standardn´ı s´ıt’ov´e protokoly a bude m´ıt takov´e funkce, aby ji bylo moˇzn´e pouˇz´ıt jako n´ahradu st´avaj´ıc´ıch ch˚ uviˇcek. Aplikace by tedy mˇela umˇet pˇren´aˇset zvuk, video, detekovat zmˇenu obrazu nebo zvuku a d´at o tˇechto zmˇen´ach, nˇejak´ ym zp˚ usobem, vˇedˇet pˇr´ıjemci. Oproti bˇeˇzn´ ym ch˚ uviˇck´am bude aplikace prov´adˇet ˇsifrov´an´ı veˇsker´eho datov´eho pˇrenosu. D´ıky pouˇzit´ı standardn´ıch s´ıt’ov´ ych protokol˚ u je moˇzn´e vyuˇz´ıt existuj´ıc´ıch dr´atov´ ych i bezdr´atov´ ych s´ıti k pˇrenosu jak videa tak zvuku. T´ım se eliminuje neˇza´douc´ı ruˇsen´ı, kter´e se u bˇeˇzn´ ych ch˚ uviˇcek jinak objevuje.
1
2 Existuj´ıc´ı ˇreˇsen´ı 2.1 2.1.1
Teoretick´ y z´ aklad St´ avaj´ıc´ı ˇ reˇ sen´ı
Dˇetsk´a ch˚ uviˇcka je mal´e elektronick´e zaˇr´ızen´ı, kter´e se pouˇz´ıv´a pro hl´ıd´an´ı a monitorov´an´ı mal´ ych dˇet´ı. Obvykle se skl´ad´a ze dvou ˇca´st´ı - vys´ılac´ı a pˇrij´ımac´ı. Vys´ılac´ı ˇca´st je um´ıstˇena v pokoji d´ıtˇete, zachyt´av´a zvuk a odes´ıl´a ho na pˇrij´ımac´ı zaˇr´ızen´ı, kter´e je v pokoji rodiˇc˚ u a oni d´ıky tomu slyˇs´ı, ˇze se nˇeco dˇeje. Na takov´emto principu funguj´ı vˇsechny ch˚ uviˇcky. Dnes jsou k dost´an´ı i ch˚ uviˇcky, kter´e umoˇzn ˇuj´ı dvoucestnou komunikaci, tedy je moˇzn´e na d´ıtˇe pˇres pˇrij´ımac´ı zaˇr´ızen´ı mluvit. Mimo to existuj´ı i ch˚ uviˇcky s pˇrenosem obrazu nebo detekc´ı zmˇeny hladiny zvuku. Souˇc´ast´ı tˇech lepˇs´ıch je i infra sn´ım´an´ı okol´ı a dalˇs´ı funkce. Objevily se uˇz i ch˚ uviˇcky, kter´e dok´aˇz´ı pro pˇrenos dat pouˇz´ıvat WiFi s´ıt’.
2.1.2
Nov´ a aplikace
Novˇe vytvoˇren´a aplikace vych´az´ı z konceptu fungov´an´ı st´avaj´ıc´ıch ch˚ uviˇcek, ˇcili je takt´eˇz rozdˇelena na ˇca´st pˇrij´ımac´ı (d´ale jen klient) a ˇc´ast vys´ılac´ı (d´ale jen server). Jedn´a se o softwarovou aplikaci, kter´a byla vytvoˇrena pˇredevˇs´ım pro pouˇzit´ı v priv´atn´ıch s´ıt´ıch1 , a kde je nutn´e, aby na zaˇr´ızen´ı, na kter´em bˇeˇz´ı server, byla um´ıstˇena kamera a mikrofon, na klientovi zobrazovac´ı zaˇr´ızen´ı a jak klient, tak server mˇeli pˇr´ıstup do poˇc´ıtaˇcov´e s´ıtˇe. Klient si m˚ uˇze nechat od serveru pos´ılat aktu´alnˇe sn´ıman´ y zvuk a video (d´ale stream) ze vstupn´ıch zaˇr´ızen´ı a nechat si pos´ılat zpr´avy pˇri zv´ yˇsen´ı hladiny zvuku nebo pohybu pˇred kamerou. D´ale je moˇzn´e pˇr´ıchoz´ı stream u klienta ukl´adat na disk. Aplikace neumoˇzn ˇuje obousmˇern´e pos´ıl´an´ı streamu, tzn. na d´ıtˇe nen´ı moˇzn´e pˇres aplikaci mluvit. Server podporuje pˇripojen´ı v´ıce klient˚ u najednou a veˇsker´a komunikace mezi serverem a klienty je ˇsifrovan´a, vˇcetnˇe pˇrenosu streamu. 1
Aplikace funguje i pˇres internet, pokud m´a zaˇr´ızen´ı se serverem pˇridˇelenu veˇrejnou IPv4 adresu.
2
Existuj´ıc´ı ˇreˇsen´ı
2.2 2.2.1
V´yhody a nev´yhody
V´ yhody a nev´ yhody St´ avaj´ıc´ı ˇ reˇ sen´ı
Jak jiˇz bylo ˇreˇceno, hlavn´ı d˚ uvod, proˇc tato aplikace vznikla, je ten, ˇze digit´aln´ı ch˚ uviˇcky vyuˇz´ıvaj´ı ke sv´ ym pˇrenos˚ um stejn´e frekvenˇcn´ı p´asmo jako WiFi s´ıtˇe. Kv˚ uli tomu jsou obˇe zaˇr´ızen´ı navz´ajem ruˇsena nebo nefunguj´ı v˚ ubec. To pˇredstavuje obrovsk´ y probl´em hlavnˇe pro byty v panel´akov´ ych domech, kde je na mal´em prostoru seskupeno velk´e mnoˇzstv´ı WiFi s´ıt´ı. Vˇetˇsina ch˚ uviˇcek m´a nav´ıc zabudovan´ y jen jeden kan´al, na kter´em vys´ıl´a a nen´ı moˇzn´e ho zmˇenit. Mezi dalˇs´ı nebezpeˇcn´e z´aleˇzitosti velk´eho poˇctu ch˚ uviˇcek patˇr´ı to, ˇze nevaruj´ı, pokud dojde ke ztr´atˇe sign´alu.
U analogov´ ych ch˚ uviˇcek nedoch´az´ı sice k tomu, ˇze by se ruˇsily s WiFi s´ıt´ı, ale je tu jin´ y z´avaˇzn´ y probl´em a to naruˇsen´ı soukrom´ı, a t´ım i bezpeˇcnosti. U tˇechto typ˚ u ch˚ uviˇcek se ˇcasto st´av´a, ˇze d´ıtˇe, kter´e je slyˇset, nepatˇr´ı tˇem rodiˇc˚ um, kteˇr´ı ho slyˇs´ı. Kdokoliv na stejn´e frekvenci m˚ uˇze poslouchat.
Na trhu lze dostat i nˇekolik m´alo ch˚ uviˇcek, kter´e vyuˇz´ıvaj´ı WiFi s´ıt’. Opˇet vˇsak nepodporuj´ı ˇsifrov´an´ı pˇrenosu a nˇekter´e jsou nav´ıc ˇspatnˇe proveden´e. Video nebo zvuk nen´ı tak kvalitn´ı, jak je uvedeno ve specifikac´ıch, nebo ch˚ uviˇcky neposkytuj´ı pˇripojen´ı v´ıce odbˇeratel˚ u videa/zvuku. Zaˇr´ızen´ı bud’ v´ıce odbˇeratel˚ u najednou nepodporuj´ı v˚ ubec nebo podporuj´ı ˇspatnˇe. Vˇsichni uˇzivatel´e maj´ı stejn´e nastaven´ı a vz´ajemnˇe si ho pod rukou mohou mˇenit2 .
Podle u ´hlu pohledu by bylo moˇzn´e za v´ yhodu prohl´asit to, ˇze ch˚ uviˇcky nepotˇrebuj´ı ke sv´emu fungov´an´ı WiFi. U vˇetˇsiny ch˚ uviˇcek se tak´e uv´ad´ı vˇetˇs´ı dosah (v metrech), neˇz kter´ y nab´ız´ı WiFi. Na ch˚ uviˇcku pracuj´ıc´ı pˇres Internet je ale moˇzn´e se pˇripojit odkudkoliv, na rozd´ıl od bˇeˇzn´e ch˚ uviˇcky, jej´ıˇz dosah konˇc´ı cca kolem 200m. Bˇeˇzn´a ch˚ uviˇcka bude fungovat i pˇri vypnut´ı elektrick´eho proudu, pokud je na baterky a ty jsou nabit´e. Souhrn nejˇcastˇejˇs´ıch nedostatk˚ u souˇcasn´ ych ch˚ uviˇcek je v tabulce 2.1.
2
V dobˇe, kdy jiˇz byla tato pr´ ace zad´ana, vzniklo nˇekolik nov´ ych ch˚ uviˇcek, kter´e, kromˇe jin´eho, podporuj´ı jak ˇsifrov´ an´ı pˇrenosu, tak pouˇz´ıvaj´ı WiFi s´ıt’, a obraz se d´a zobrazit na chytr´ ych telefonech.
3
Existuj´ıc´ı ˇreˇsen´ı # 1 2 3 4 5 6 7 8 9 10
V´yhody a nev´yhody Nedostatky st´avaj´ıc´ıch ch˚ uviˇcek Nen´ı moˇzn´ y paraleln´ı provoz ch˚ uviˇcky s WiFi. Neˇsifrovan´ y pˇrenos. Ruˇsen´ı jin´ ymi ch˚ uviˇckami. Neupozornˇen´ı pˇri ztr´atˇe sign´alu. Nemoˇznost v´ ymˇeny pouze kamery/mikrofonu. Nen´ı moˇznost pˇripojit v´ıce pˇrij´ımaˇc˚ u. Nelze mˇenit nastaven´ı pos´ılan´eho streamu. Omezen´ y dosah. Nen´ı moˇznost v´ ybˇeru, zda sledovat video nebo audio. Nelze ukl´adat obraz/zvuk do souboru. Tab. 2.1: Souhrn nedostatk˚ u souˇcasn´ ych ch˚ uviˇcek.
2.2.2
Nov´ eˇ reˇ sen´ı
T´ım, ˇze aplikace vyuˇz´ıv´a jiˇz existuj´ıc´ı rozhran´ı pro komunikaci, kter´ ym jsou poˇc´ıtaˇcov´e s´ıtˇe, ˇreˇs´ı nejvˇetˇs´ı probl´em ch˚ uviˇcek. Dalˇs´ım velk´ y probl´emem, kter´ y je zde vyˇreˇsen, je bezpeˇcnost. Jednak v podobˇe ovˇeˇrov´an´ı pˇrihlaˇsovac´ıch u ´daj˚ u na stranˇe serveru, a pak tak´e ˇsifrov´an´ım veˇsker´eho pˇrenosu vˇcetnˇe ˇsifrov´an´ı stream˚ u. Dalˇs´ı v´ yhodu pˇredstavuje i to, ˇze k serveru se najednou m˚ uˇze pˇripojit v´ıce klient˚ u, kteˇr´ı mohou sledovat stream a m´ıt svoje vlastn´ı nastaven´ı, co se t´ yˇce zas´ıl´an´ı upozornˇen´ı nebo i typu zas´ılan´eho streamu (audio/video). Obraz je moˇzn´e sledovat bud’ nepˇretrˇzitˇe nebo si ho nechat pustit vˇzdy v pˇr´ıpadˇe nˇejak´eho podnˇetu (ˇsum, pohyb).
Na rozd´ıl od ostatn´ıch ch˚ uviˇcek je moˇzn´e si vybrat, zda sledovat video se zvukem 3 nebo jen zvuk . Tato moˇznost je v´ yhodn´a v pˇr´ıpadˇe pomal´eho pˇripojen´ı, kter´e by nemuselo velk´ y objem dat, kter´ y pˇredstavuje pˇrenos video streamu, propustit. Mezi dalˇs´ı vˇeci, kter´e ch˚ uviˇcky neobsahuj´ı, patˇr´ı nastaven´ı kvality pˇren´aˇsen´eho streamu. Upravit lze jak zvuk, tak video. Samozˇrejmˇe, toto nastaven´ı pak sd´ıl´ı vˇsichni klienti.
V pˇr´ıpadˇe, ˇze klient ztrat´ı spojen´ı se serverem, je o tom uˇzivatel ihned informov´an. Mezi nev´ yhody lze ˇradit to, ˇze aplikaci je nutn´e spustit na zaˇr´ızen´ı, kter´e podporuje Windows/Linux a m´a funkˇcn´ı kameru a mikrofon. To plat´ı pro server, klient 3
Pokud nebude uvedeno jinak, budou pˇren´aˇsen´e streamy nad´ale oznaˇcov´any jako video (video+audio) a audio.
4
Existuj´ıc´ı ˇreˇsen´ı
V´yhody a nev´yhody
mus´ı b´ yt naopak puˇstˇen na zaˇr´ızen´ı se zobrazovac´ım zaˇr´ızen´ım a reproduktory. V pˇr´ıpadˇe, ˇze rodiˇc pracuje z domova, m˚ uˇze m´ıt na poˇc´ıtaˇci puˇstˇen´eho klienta, a v pˇr´ıpadˇe, ˇze se nˇeco zaˇcne d´ıt, je upozornˇen zpr´avou. D´ıky tomu nemus´ı sledovat v´ıce zaˇr´ızen´ı najednou. Upozornˇen´ı je pouze vizu´aln´ı, aplikace nepodporuje ˇza´dn´e audio alarmy ani vibrace. V souˇcasn´e dobˇe aplikace, ve v´ ychoz´ım nastaven´ı, poˇc´ıt´a s pouˇzit´ım jedn´e kamery a jednoho mikrofonu. Pˇri pouˇzit´ı uˇzivatelsk´eho nastaven´ı by bylo moˇzn´e sn´ımat obraz ze dvou kamer. Omezen´ı je d´ano t´ım, ˇze pouze na dvou portech poslouchaj´ı udp servery, kter´e streamy ˇsifruj´ı a poskytuj´ı klient˚ um.
Aplikace neumoˇzn ˇuje obousmˇernou komunikaci. To znamen´a, ˇze na d´ıtˇe nen´ı moˇzn´e pomoc´ı aplikace mluvit. Zda se jedn´a o v´ yhodu, ˇci nev´ yhodu, je sporn´e. Pokud d´ıtˇe zaˇcne breˇcet, stejnˇe se na nˇej rodiˇc bude muset j´ıt pod´ıvat. Nav´ıc, d´ıtˇe by mohlo m´ast, ˇze na nˇej nˇekdo mluv´ı, ale nikoho nevid´ı.
2.2.3
Souhrn
Nyn´ı se pod´ıv´ame na shrnut´ı toho, jak´e probl´emy m´ıvaj´ı souˇcasn´e ch˚ uviˇcky, a kter´e z nich a jak ˇreˇs´ı nov´a aplikace. Hlavn´ı probl´em, jak uˇz bylo nˇekolikr´at zm´ınˇeno, je nefunkˇcnost ch˚ uviˇcek spoleˇcnˇe s WiFi. Ch˚ uviˇcky, kter´e vys´ılaj´ı ve stejn´em frekvenˇcn´ım p´asmu jako WiFi s´ıtˇe, jsou ruˇseny a nefunguj´ı spr´avnˇe nebo v˚ ubec. Hodnˇe ch˚ uviˇcek m´a nav´ıc pˇredvolen jen jeden kan´al pro pˇrenos dat. Aplikace tento z´avaˇzn´ y probl´em ˇreˇs´ı tak, ˇze k pˇrenosu dat vyuˇz´ıv´a poˇc´ıtaˇcov´e s´ıtˇe a standardn´ı s´ıt’ov´e protokoly. Je pak nutn´e, aby obˇe zaˇr´ızen´ı s aplikac´ı mˇela pˇripojen´ı do poˇc´ıtaˇcov´e s´ıtˇe.
Hodnˇe ch˚ uviˇcek st´ale nepodporuje ˇsifrov´an´ı pˇren´aˇsen´ ych dat. Data je moˇzn´e bez probl´em˚ u odposlouch´avat a naruˇsovat tak soukrom´ı osob. Hlavn´ı nebezpeˇc´ı pak pˇredstavuj´ı video ch˚ uviˇcky, kde u ´toˇcn´ık m˚ uˇze sledovat napˇr. vybaven´ı bytu. Existuj´ı i ch˚ uviˇcky, kter´e t´eˇz pˇren´aˇs´ı data pˇres poˇc´ıtaˇcovou s´ıt’ a jedin´e zabezpeˇcen´ı pˇredstavuje ovˇeˇren´ı uˇzivatele pomoc´ı jm´ena a hesla. Data ˇsifrov´ana nejsou. Aplikace proto ˇ ˇsifruje veˇsker´ y pˇrenos dat. Sifrov´ any jsou i pˇren´aˇsen´e streamy.
Ch˚ uviˇcky jsou vˇetˇsinou tvoˇreny z jednoho vys´ılaˇce a jednoho pˇrij´ımaˇce. Sledovat d´ıtˇe, tak m˚ uˇze vˇzdy jen jedna osoba. Aplikace podporuje pˇripojen´ı v´ıce klient˚ u, kteˇr´ı mohou odeb´ırat stream. D´ıtˇe tak m˚ uˇze kontrolovat kaˇzd´ y, kdo m´a pˇr´ıstup do aplikace.
5
Existuj´ıc´ı ˇreˇsen´ı
V´yhody a nev´yhody
Ch˚ uviˇcky vˇetˇsinou slouˇz´ı k tomu, aby pˇrepravily zaznamenan´ y vstup na pˇrij´ımac´ı zaˇr´ızen´ı a uˇz neˇreˇs´ı nastaven´ı vlastnost´ı pˇren´aˇsen´ ych dat. Nen´ı tak napˇr´ıklad moˇzn´e upravit velikost nebo kvalitu pˇren´aˇsen´eho videa. U existuj´ıc´ıch video ch˚ uviˇcek, kter´e pouˇz´ıvaj´ı poˇc´ıtaˇcov´e s´ıtˇe, to m˚ uˇze b´ yt probl´em napˇr. pˇri pˇret´ıˇzen´ı s´ıtˇe. Pˇrednastaven´a kvalita videa pˇredstavuje pˇr´ıliˇs velk´ y objem dat, kter´ y nen´ı moˇzn´e pˇren´est. Nov´a ch˚ uviˇcka umoˇzn ˇuje nastaven´ı parametr˚ u pˇren´aˇsen´ ych stream˚ u. Je tak moˇzn´e nastavit poˇcet audio kan´al˚ u, velikost nebo kvalitu videa a audio frekvenci. D´ıky tomu lze hodnˇe redukovat objem pˇren´aˇsen´ ych dat.
Dalˇs´ı probl´em, kter´ y s t´ımto souvis´ı, je nemoˇznost vybr´an´ı si sledovan´eho streamu. Pokud video ch˚ uviˇcka pˇren´aˇs´ı i zvuk, vˇetˇsinou zde nen´ı na v´ ybˇer, jestli bude uˇzivatel sledovat obraz se zvukem nebo jen zvuk. V pˇr´ıpadˇe vyt´ıˇzen´ı s´ıtˇe by se opˇet hodila moˇznost m´ıt na v´ ybˇer a sledovat jen audio, kter´e je oproti videu podstatnˇe m´enˇe n´aroˇcn´e na objem pˇrenesen´ ych dat. Aplikace tuto vlastnost m´a a poskytuje uˇzivatel˚ um 2 moˇznosti. Bud’ mohou sledovat video se zvukem, nebo samotn´ y zvuk.
V ned´avn´e dobˇe se objevila nov´a ch˚ uviˇcka, kter´a podporuje sn´ım´an´ı obrazu z v´ıce kamer najednou. Jedn´a se o uˇziteˇcnou vlastnost v pˇr´ıpadˇe, ˇze jsou v pokoji um´ıstˇeny napˇr. dvˇe dˇeti nebo d´ıtˇe je uˇz vˇetˇs´ı, a mohlo by se dostat ze zorn´eho u ´hlu kamery, kter´a nedok´aˇze sn´ımat cel´ y pokoj. Jedn´a se o novou funkcionalitu a je pouze p´ar ch˚ uviˇcek, kter´e j´ı poskytuj´ı. Naˇse aplikace poˇc´ıt´a s pouˇzit´ım jedn´e kamery a jednoho mikrofonu. M´a vˇsak i funkci pro zad´an´ı vlastn´ıho pˇr´ıkazu, kter´ y z´ısk´av´a vstupn´ı streamy. T´ım je umoˇznˇeno zkuˇsen´ ym uˇzivatel˚ um pouˇzit´ı i dvou kamer najednou.
Hodnˇe ch˚ uviˇcek obsahuje upozornˇen´ı v pˇr´ıpadˇe nˇejak´e ud´alosti. Upozornˇen´ı m˚ uˇze b´ yt bud’ zvukov´e, vizu´aln´ı nebo vibraˇcn´ı. Mezi nejˇcastˇejˇs´ı ud´alosti pak patˇr´ı pohyb pˇred kamerou nebo zv´ yˇsen´ı hlasitosti v pokoji d´ıtˇete. Naˇse aplikace vyuˇz´ıv´a pouze vizu´aln´ıch upozornˇen´ı v podobˇe zpr´av v oznamovac´ı oblasti. ˇ ym a i nebezpeˇcn´ Cast´ ym probl´emem je, ˇze pokud se pˇrij´ımaˇc dostane mimo dosah vys´ılaˇce, ned´a o tom ˇza´dn´ ym zp˚ usobem vˇedˇet uˇzivateli. Ten si pak mysl´ı, ˇze se u d´ıtˇete nic nedˇeje, ale skuteˇcnost m˚ uˇze b´ yt jin´a. Nˇekter´e ch˚ uviˇcky to ˇreˇs´ı napˇr. varovn´ ym sign´alem. Nov´a aplikace tento probl´em t´eˇz ˇreˇs´ı. Pokud dojde ke ztr´atˇe spojen´ı mezi serverem a klientem, klient je upozornˇen zpr´avou a jeho program je ukonˇcen. Ke ztr´atˇe spojen´ı m˚ uˇze doj´ıt bud’ d˚ usledkem chyby pˇri pˇrenosu dat nebo i tak, ˇze server byl odpojen.
6
Existuj´ıc´ı ˇreˇsen´ı
V´yhody a nev´yhody
Hodnˇe ch˚ uviˇcek poskytuje kameru s noˇcn´ım vidˇen´ım. D´ıtˇe je tak moˇzn´e bez probl´em˚ u sledovat i v noci. Ne vˇsechna zaˇr´ızen´ı jsou ale natolik kvalitn´ı, aby na nich bylo v noci nˇeco vidˇet. Naˇse aplikace pˇren´aˇs´ı stream bez ohledu na to, o jakou kameru se jedn´a. Pokud bude pˇripojena infra kamera, bude se pˇren´aˇset stream z infra kamery. T´ım p´adem z´aleˇz´ı pouze na uˇzivateli, jakou kameru si poˇr´ıd´ı. V pˇr´ıpadˇe, ˇze kamera nebude kvalitn´ı nebo se rozbije, lze ji, na rozd´ıl od bˇeˇzn´ ych ch˚ uviˇcek, bez probl´em˚ u vymˇenit.
Ch˚ uviˇcky se vytv´aˇr´ı tak, aby byly mobiln´ı a tud´ıˇz jsou pˇrev´aˇznˇe nap´ajen´e na baterie. U naˇs´ı aplikace z´aleˇz´ı na tom, na jak´ ych zaˇr´ızen´ıch jednotliv´e programy pobˇeˇz´ı. Server je moˇzn´e spustit na mal´em zaˇr´ızen´ı s procesorem ARM, kter´e je t´eˇz moˇzn´e nap´ajet z baterie.
Jako pˇrednost nˇekter´e ch˚ uviˇcky uv´ad´ı moˇznost mluven´ı na d´ıtˇe pˇres zaˇr´ızen´ı. Naˇse aplikace toto nepodporuje. D´ıtˇe by mohlo m´ast, pokud by na nˇej nˇekdo mluvil a ono by ho nevidˇelo. Pravdˇepodobnˇe by pak utˇeˇsov´an´ı skrz ch˚ uviˇcku ani nefungovalo. Lepˇs´ı vlastnost´ı nˇekter´ ych ch˚ uviˇcek je pˇrehr´av´an´ı ukol´ebavek. Naˇse aplikace vˇsak nepodporuje ani tuto vlastnost.
Nˇekolik ch˚ uviˇcek podporuje ukl´ad´an´ı pˇren´aˇsen´eho streamu do souboru. Vznikne tak video, kter´e je moˇzn´e pˇrehr´at v multimedi´aln´ım pˇrehr´avaˇci. Takov´ y soubor m˚ uˇze b´ yt dobr´ y napˇr. pˇri zjiˇstˇen´ı, jak d´ıtˇe vylezlo z post´ ylky a do budoucna tomu zabr´anit. Aplikace t´eˇz umoˇzn ˇuje ukl´ad´an´ı streamu. Ten je ukl´ad´an do souboru vˇzdy na stranˇe klienta. Kaˇzd´ y pˇripojen´ y klient si m˚ uˇze vybrat, zda si bude stream ukl´adat, ˇci nikoliv.
7
3 Anal´yza probl´emu V t´eto kapitole se budeme zab´ yvat dostupn´ ymi technologiemi, jejich popisem a z´aroveˇ n i v´ ybˇerem tˇech nejvhodnˇejˇs´ıch, kter´e budou dostaˇcuj´ıc´ı pro naˇse u ´ˇcely.
3.1
Architektura aplikace
Aplikace, kter´a bude splˇ novat vlastnosti ch˚ uviˇcky, se mus´ı skl´adat ze dvou ˇca´st´ı. Jedna ˇc´ast bude m´ıt za u ´kol pˇrij´ımat obraz a zvuk v pokoji d´ıtˇete a druh´a mus´ı b´ yt schopn´a dan´e streamy zobrazit. Mimo to, vys´ılac´ı ˇca´st aplikace mus´ı umˇet obsluhovat v´ıce pˇrij´ımac´ıch zaˇr´ızen´ı najednou, mus´ı je od sebe jednoznaˇcnˇe rozeznat, umˇet rozliˇsit ta, kter´a jsou pˇrihl´aˇsen´a a registrovan´a, a mus´ı b´ yt schopna drˇzet pro kaˇzd´e zaˇr´ızen´ı jin´ y relaˇcn´ı kl´ıˇc urˇcen´ y k ˇsifrov´an´ı komunikace. Vys´ılac´ı zaˇr´ızen´ı tedy poskytuje sv´ ym pˇrij´ımaˇc˚ um urˇcit´e sluˇzby, ke kter´ ym, aby je mohly pouˇz´ıvat, se mus´ı nejdˇr´ıve registrovat, a pak pˇrihl´asit. Proto byla zvolena architektura klient-server, kter´a odpov´ıd´a charakteru ch˚ uviˇcek.
Jako server bude d´ale oznaˇcov´an program, jenˇz je um´ıstˇen na zaˇr´ızen´ı s kamerou a mikrofonem, a m´a za u ´kol zaznamen´avat zvuk a video a pˇrepos´ılat ho vˇsem registrovan´ ym klient˚ um, kteˇr´ı si o nˇej zaˇz´adaj´ı (vys´ılac´ı zaˇr´ızen´ı). Naopak jako klient bude d´ale oznaˇcov´an program, kter´ y je um´ıstˇen na zaˇr´ızen´ı s monitorem a reproduktory, a zobrazuje pˇrij´ıman´ y stream od serveru (pˇrij´ımac´ı zaˇr´ızen´ı). Aplikac´ı pak rozum´ıme oba dva programy dohromady, ˇcili celou ch˚ uviˇcku.
3.1.1
Sluˇ zby serveru
Mezi sluˇzby, kter´e bude server poskytovat, se ˇrad´ı: • Pos´ıl´an´ı streamu z´ıskan´eho z kamery a mikrofonu na vyˇza´d´an´ı. Pos´ılat je moˇzn´e bud’ jen samotn´e audio nebo audio+video. • Pos´ıl´an´ı zpr´av pˇri zmˇenˇe videa/audia. Zpr´avy chod´ı pouze na vyˇz´ad´an´ı. • Registrace nov´ ych uˇzivatel˚ u, kteˇr´ı mohou aplikaci pouˇz´ıvat. • Spr´ava serveru pˇres webov´e rozhran´ı. 8
Anal´yza probl´emu
3.1.2
Architektura aplikace
Moˇ znosti klienta
Klient m˚ uˇze vyuˇz´ıvat vˇsech v´ yˇse popsan´ ych sluˇzeb serveru. Funkce klienta tedy jsou: • Vyˇz´ad´an´ı si a pˇrehr´av´an´ı audia/videa+audia. • Zobrazen´ı pˇr´ıchoz´ıch zpr´av o zmˇenˇe audia/videa. • Ukl´ad´an´ı pˇr´ıchoz´ıho streamu do souboru. • Registrace.
3.1.3
Komunikace
Na sch´ematick´em n´ahledu na obr. 3.1 budou struˇcnˇe pops´any z´akladn´ı prvky komunikace a toku dat v aplikaci. Klient a server jsou zde vyobrazeny jako dva poˇc´ıtaˇce, na kter´ ych aplikace bˇeˇz´ı. Na serveru bˇeˇz´ı program ffmpeg.exe (viz kap. 3.3.3), kter´ y dok´aˇze z´ısk´avat stream z webov´e kamery a mikrofonu. Tento stream pˇrek´oduje na vhodn´ y form´at (viz kap. 3.3.2) a na server pos´ıl´a dva na sobˇe nez´avisl´e streamy na dva r˚ uzn´e porty. Prvn´ı stream je audio+video a druh´ y je jen audio. Server d´ale tyto streamy zaˇsifruje a pos´ıl´a klientovi. Je d˚ uleˇzit´e si uvˇedomit, ˇze klientovi pos´ıl´a vˇzdy maxim´alnˇe jeden stream.
Klient pˇrij´ım´a stream na pˇredem zn´am´em portu. Tento stream deˇsifruje a pos´ıl´a ho na dalˇs´ı port, kde poslouch´a program, kter´ y je urˇcen pro pˇrehr´av´an´ı streamu ffplay.exe (viz kap. 4.3.5). Kromˇe zobrazov´an´ı streamu, m˚ uˇze klient pos´ılat deˇsifrovan´ y stream jeˇstˇe na jeden port, na kter´em poslouch´a ffmpeg.exe, kter´ y pˇrijat´ y stream dek´oduje a ukl´ad´a do souboru.
Kromˇe t´eto komunikace, kde server pos´ıl´a stream a kter´a je jednosmˇern´a (stream je pos´ıl´an pouze ze serveru klientovi), je zde jeˇstˇe obousmˇern´a komunikace mezi serverem a klientem. Na obr´azku je zn´azornˇena nejspodnˇejˇs´ı ˇca´rou, kter´a m´a na obou konc´ıch ˇsipky. Tato komunikace je t´eˇz ˇsifrovan´a a pouˇz´ıv´a se k v´ ymˇenˇe komunikaˇcn´ıch zpr´av mezi servererm a klientem. Tyto zpr´avy jsou napˇr´ıklad ˇz´adosti o zas´ıl´an´ı streamu (klient ˇza´d´a), pˇrihl´aˇsen´ı na server (pos´ıl´a klient) atd.
9
Anal´yza probl´emu
Zabezpeˇcen´ı
Obr. 3.1: Sch´ematick´ y obr´azek fungov´an´ı aplikace. Cel´a aplikace byla vytvoˇrena v programovac´ım jazyce C++. Pˇrestoˇze bude aplikace vyv´ıjena pod syst´emem Windows 7 s pˇrekladaˇcem GCC (MinGW), bude j´ı moˇzn´e pˇreloˇzit i pod syst´emy GNU/Linux.
3.2
Zabezpeˇ cen´ı
Jak bylo uvedeno v´ yˇse, jeden z hlavn´ıch probl´em˚ u dneˇsn´ıch ch˚ uviˇcek je to, ˇze pˇrenos dat mezi pˇrij´ımac´ım a vys´ılac´ım zaˇr´ızen´ım nen´ı nijak zabezpeˇcen´ y. Kromˇe toho, ˇze nˇekdo uslyˇs´ı breˇc´ıc´ı d´ıtˇe, jsou zde mnohem z´avaˇznˇejˇs´ı bezpeˇcnostn´ı rizika, kter´a se objevila s n´astupem video ch˚ uviˇcek. Pokud by se u ´toˇcn´ıkovi povedlo odchyt´avat obraz a zvuk z dˇetsk´e ch˚ uviˇcky, tak se dost´av´a k velice citliv´ ym informac´ım v podobˇe vybaven´ı domu, osobn´ıch informac´ı ˇclen˚ u dom´acnosti, ˇcasov´ ych rozvrh˚ u, kdy kdo bude doma atd. Netˇreba dod´avat, jak by s takov´ ymi informacemi bylo moˇzn´e naloˇzit.
Abychom minimalizovali tato rizika, bude nutn´e zabezpeˇcit aplikaci na nˇekolika u ´rovn´ıch. Prvn´ım krokem by mˇelo b´ yt omezen´ı klient˚ u, kteˇr´ı se na server mohou 10
Anal´yza probl´emu
Zabezpeˇcen´ı
pˇripojit. To lze ˇreˇsit zaveden´ım registrace klient˚ u viz kap. 3.2.1. Dalˇs´ım krokem je ovˇeˇren´ı klient˚ u, kteˇr´ı se chtˇej´ı na server pˇrihl´asit a vyuˇz´ıvat jeho sluˇzby. Bude tedy nutn´e prov´adˇet autentizaci klient˚ u viz kap. 3.2.2. Posledn´ım nem´enˇe d˚ uleˇzit´ ym krokem je samotn´e ˇsifrov´an´ı pˇren´aˇsen´ ych dat viz kap. 3.2.3 .
3.2.1
Registrace
Prvn´ı krok v s´erii zabezpeˇcovac´ıch mechanism˚ u pˇredstavuje registrace. Odbˇer streamu klienty ze serveru mus´ı b´ yt hl´ıd´an, aby nemohlo doj´ıt k tomu, ˇze stream bude odeb´ırat kdokoliv. Bude tedy nutn´e zav´est ovˇeˇrovac´ı mechanismus (viz kap. 3.2.2), kter´ y klienta ovˇeˇr´ı a pokud bude klienta zn´at, tak mu zpˇr´ıstupn´ı dan´e sluˇzby. To znamen´a, ˇze na stranˇe serveru mus´ı existovat seznam registrovan´ ych klient˚ u, aby bylo proti ˇcemu ovˇeˇrovat. Moˇzn´e alternativy, co a proˇc (ne)ukl´adat na stranˇe serveru, budou pops´any v kapitole 3.2.2. Nyn´ı se budeme zab´ yvat pouze t´ım, jak jednotliv´e klienty na serveru registrovat.
Jednou z moˇznost´ı by bylo, implementovat registraci na stranˇe klienta. To znamen´a, ˇze klient, kter´eho by server neznal a kter´ y by se tud´ıˇz nemohl pˇrihl´asit k odbˇeru ˇza´dn´eho streamu, by se nejdˇr´ıve z programu registroval, a pak by se z toho sam´eho programu jiˇz mohl pˇrihl´asit. To by vˇsak umoˇzn ˇovalo registraci komukoliv, a to je pr´avˇe to, ˇcemu se snaˇz´ıme vyhnout. Aby bylo moˇzn´e pouˇz´ıvat tento mechanismus, museli by klienti pˇri registraci prokazovat, ˇze to jsou leg´aln´ı uˇzivatel´e aplikace. To by bylo moˇzn´e udˇelat napˇr´ıklad pomoc´ı certifik´at˚ u. Klient by spoleˇcnˇe s poˇzadavkem registrace pos´ılal i sv˚ uj certifik´at. Server by si pak mohl kontrolovat, jac´ı klienti ˇza´daj´ı o registraci.
Nab´ız´ı se i opaˇcn´a moˇznost, tedy soustˇredit veˇsker´e registrace nov´ ych klient˚ u na server. Klientsk´a aplikace by pak provedla jen pˇrihl´aˇsen´ı k serveru a n´aslednˇe by uˇz mohla pˇrehr´avat vyˇza´dan´ y stream. Pohodln´e a pˇrehledn´e pˇrid´av´an´ı nov´ ych klient˚ u by umoˇzn ˇovalo webov´e rozhran´ı serveru. Webov´e rozhran´ı by se dalo vyuˇz´ıt nejen k registraci nov´ ych klient˚ u, ale i ke spr´avˇe serveru a nastaven´ı stream˚ u (viz 3.4). Kv˚ uli ˇsirˇs´ım moˇznostem vyuˇzit´ı bylo webov´e rozhran´ı zvoleno jako lepˇs´ı ˇreˇsen´ı pro registraci klient˚ u.
I u tohoto ˇreˇsen´ı mus´ı doj´ıt k autentizaci uˇzivatele, kter´ y se pˇres webov´ y prohl´ıˇzeˇc snaˇz´ı registrovat nov´e uˇzivatelsk´e u ´daje. To je moˇzn´e udˇelat tak, ˇze webov´e rozhran´ı bude opatˇreno heslem. Nikdo jin´ y, neˇz ten, kdo heslo spolu s aplikac´ı vlastn´ı, nem´a 11
Anal´yza probl´emu
Zabezpeˇcen´ı
pˇr´ıstup. Vzhledem k pˇrenosu citliv´ ych u ´daj˚ u v podobˇe nov´eho uˇzivatelsk´eho jm´ena a hesla je nutn´e komunikaci, kter´a prob´ıh´a mezi serverem a prohl´ıˇzeˇcem, ˇsifrovat. Toho lze dos´ahnout pomoc´ı protokolu HTTPS.
Protokol HTTPS Protokol HTTPS (Hypertext Transfer Protocol Secure) je s´ıt’ov´ y protokol z aplikaˇcn´ı vrstvy modelu ISO/OSI. Vych´az´ı z protokolu HTTP (Hypertext Transfer Protocol), kter´ y je urˇcen pro pˇrenos hypertextov´ ych dokument˚ u. Oproti nˇemu ale nav´ıc dok´aˇze ovˇeˇrit komunikuj´ıc´ı protistrany a ˇsifrovat komunikaci pomoc´ı SSL nebo TLS protokolu (d´ale jen SSL). SSL k zajiˇstˇen´ı bezpeˇcnosti pouˇz´ıv´a jak symetrickou, tak asymetrickou ˇsifru a certifik´aty [17]. Neˇz je moˇzn´e samotn´e ˇsifrov´an´ı komunikace, je nejdˇr´ıve nutn´e prov´est takzvan´ y handshake.
Handshake je mnoˇzina u ´kon˚ u, kter´e mus´ı server a klient podstoupit, neˇz si mohou pos´ılat zaˇsifrovan´a data. C´ılem handshaku je domluva na hlavn´ım sd´ılen´em tajemstv´ı, kter´e je pouˇzito pro v´ ypoˇcet symetrick´ ych kl´ıˇc˚ u. Prvn´ı pos´ılan´e zpr´avy mezi klientem a serverem jsou hello zpr´avy. D´ıky tˇemto zpr´av´am si komunikuj´ıc´ı protistrany vymˇen´ı informace o tom, kdo pouˇz´ıv´a jakou verzi SSL, jak´e ˇsifrovac´ı algoritmy atd. V t´eto f´azi pos´ıl´a server sv˚ uj certifik´at, kter´ y si klient ovˇeˇr´ı. D´ale pak, podle typu vybran´eho ˇsifrovac´ıho algoritmu, dojde k pˇreposl´an´ı poˇca´teˇcn´ıho tajemstv´ı, kter´e je ˇsifrovan´e veˇrejn´ ym kl´ıˇcem serveru a pouˇz´ıv´a se ke generov´an´ı hlavn´ıho tajemstv´ı. Na konci handshaku jsou z tohoto hlavn´ıho tajemstv´ı vygenerov´any relaˇcn´ı kl´ıˇce pro ˇsifrov´an´ı komunikace. Proces autentizace serveru pomoc´ı SSL je vidˇet na obr. 3.2. [17]
Obr. 3.2: Autentizace serveru pomoc´ı SSL. [17] 12
Anal´yza probl´emu
Zabezpeˇcen´ı
Certifik´ at Aby bylo moˇzn´e pouˇz´ıt HTTPS, bude nutn´e z´ıskat certifik´at pro server. Certifik´at je dokument digit´alnˇe podepsan´ y certifikaˇcn´ı autoritou. Certifik´at obsahuje kromˇe u ´daj˚ u o sv´em drˇziteli a o dobˇe platnosti i veˇrejn´ y kl´ıˇc majitele [17]. Existuj´ı dva zp˚ usoby, jak z´ıskat certifik´at. T´ım prvn´ım je zaˇza´d´an´ı o certifik´at pˇr´ısluˇsnou d˚ uvˇeryhodnou certifikaˇcn´ı autoritu, kter´a certifik´at za poplatek na urˇcitou dobu vyd´a. Druh´a moˇznost spoˇc´ıv´a ve vygenerov´an´ı takzvan´eho self-signed certifik´atu. Jak uˇz n´azev napov´ıd´a, tento certifik´at nen´ı podeps´an d˚ uvˇeryhodnou autoritou, ale pouze t´ım, kdo ho vygeneroval.
Takto podepsan´ y certifik´at samozˇrejmˇe nen´ı d˚ uvˇeryhodn´ y a je pouze na uˇzivateli, zda ho za nˇej oznaˇc´ı. Ned˚ uvˇeryhodnost se ve webov´ ych prohl´ıˇzeˇc´ıch projevuje varov´an´ım, kter´e je podobn´e tomu na obr. 3.3.
Obr. 3.3: Varov´an´ı pˇri pouˇzit´ı ned˚ uvˇeryhodn´eho certifik´atu. Pro naˇse u ´ˇcely postaˇc´ı self-signed certifik´at, jelikoˇz budeme vˇedˇet, co schvalujeme. Nav´ıc je i moˇznost dan´ y certifik´at do poˇc´ıtaˇce nainstalovat, a t´ım se vyhnout varovn´emu hl´aˇsen´ı.
13
Anal´yza probl´emu
3.2.2
Zabezpeˇcen´ı
Pˇ rihl´ aˇ sen´ı
Dalˇs´ım krokem v zabezpeˇcen´ı je pˇrihlaˇsov´an´ı registrovan´ ych uˇzivatel˚ u z klientsk´e aplikace. Aby uˇzivatel mohl sledovat stream, mus´ı nejdˇr´ıve prok´azat, o koho se jedn´a. Toho uˇzivatel dos´ahne zad´an´ım sv´ ych pˇrihlaˇsovac´ıch u ´daj˚ u, kter´e se na serveru ovˇeˇr´ı. Jedn´a se o u ´daje, kter´e se ukl´adaj´ı pˇri registraci pˇres webov´e rozhran´ı. Pokud server dan´e u ´daje shled´a spr´avn´ ymi, umoˇzn´ı dan´emu klientovi odeb´ırat stream. D´ale si pop´ıˇseme moˇznosti ukl´ad´an´ı citliv´ ych u ´daj˚ u na serveru a vybranou metodu pro pˇrihlaˇsovac´ı proces.
Ukl´ ad´ an´ı pˇ rihlaˇ sovac´ıch u ´ daj˚ u na stranˇ e serveru Aby server vˇedˇel, komu m˚ uˇze a nem˚ uˇze stream pos´ılat, mus´ı m´ıt list nebo seznam uˇzivatel˚ u s jejich pˇrihlaˇsovac´ımi u ´daji. V principu existuj´ı 3 metody [17], jak lze uˇzivatele autentizovat: ˇ • Rekni, co v´ıˇs (heslo) • Ukaˇz, co m´aˇs (platebn´ı karta) • Ukaˇz, co jsi (otisk prstu) Prvn´ı metoda je jednoduch´a a spoˇc´ıv´a v ovˇeˇren´ı uˇzivatele na z´akladˇe nˇejak´eho tajemstv´ı. U t´eto metody se poˇc´ıt´a s t´ım, ˇze tajemstv´ı nezn´a nikdo jin´ y neˇz uˇzivatel, a tud´ıˇz se za nˇej nem˚ uˇze nikdo jin´ y vyd´avat. Pˇredpokl´ad´a se, ˇze s´ıt’ mezi serverem a klientem je n´achyln´a na odposlechy, a nen´ı zde ˇza´dn´a tˇret´ı d˚ uvˇeryhodn´a strana [37]. V´ yhodou t´eto metody je jednoduch´a implementace a nev´ yhoda je v tom, ˇze lid´e si vol´ı pˇr´ıliˇs kr´atk´a a jednoduch´a hesla, kter´a neb´ yv´a tˇeˇzk´e, pomoc´ı slovn´ıkov´ ych u ´tok˚ u, prolomit. [17]
Druh´a metoda je zaloˇzen´a na ovˇeˇrov´an´ı podle toho, co uˇzivatel vlastn´ı. Nejˇcastˇeji to jsou r˚ uzn´e typy karet (OTP, Smart, platebn´ı karty). Nˇekter´e generuj´ı nov´e heslo pokaˇzd´e, kdyˇz se uˇzivatel chce pˇrihl´asit (OTP karty), jin´e zas umoˇzn ˇuj´ı zniˇcen´ı uloˇzen´ ych u ´daj˚ u v pˇr´ıpadˇe, ˇze se k nim nˇekdo snaˇz´ı dostat n´asilnou cestou (Smart karty). Tento zp˚ usob ovˇeˇrov´an´ı nen´ı pro naˇsi aplikaci pˇr´ıliˇs vhodn´ y. [17]
14
Anal´yza probl´emu
Zabezpeˇcen´ı
Posledn´ım a nejsloˇzitˇejˇs´ım typem, co se implementace t´ yˇce, je ovˇeˇrov´an´ı uˇzivatele na z´akladˇe biometrick´ ych u ´daj˚ u. Pouˇz´ıv´a otisk prstu nebo sken rohovky. Moˇzn´e je i uˇzit´ı podpisu uˇzivatele, kde se monitoruje tlak vyv´ıjen´ y pˇri psan´ı a ˇcasov´an´ı jednotliv´ ych smyˇcek. Nev´ yhodou b´ yv´a ˇcast´e odm´ıtnut´ı prav´eho uˇzivatele a pˇrijet´ı u ´toˇcn´ıka. Nev´ yhoda u biometrick´e autentizace je spr´ava kl´ıˇc˚ u. Ty jsou generov´any z u ´daj˚ u uˇzivatele (otisku prstu, skenu rohovky, atd.) a jsou pro dan´eho uˇzivatel unik´atn´ı. Pokud nˇekdo toto ukradne, zkop´ıruje nebo jinak z´ısk´a, p˚ uvodn´ı uˇzivatel si nem˚ uˇze nechat vygenerovat novou rohovku, jako by to bylo moˇzn´e v pˇr´ıpadˇe ztr´aty hesla. [17]
Z v´ yˇse uveden´ ych metod se pro naˇse u ´ˇcely jako nejlepˇs´ı jev´ı metoda prvn´ı, tedy ovˇeˇrov´an´ı uˇzivatele na z´akladˇe toho, co zn´a. Tato metoda m´a nˇekolik u ´rovn´ı zabezpeˇcen´ı. Tou prvn´ı, dalo by se ˇr´ıci nulovou, je uloˇzen´ı p´aru uˇzivatelsk´e jm´eno - heslo na stranˇe serveru v prost´em textu. To pˇredstavuje obrovsk´e bezpeˇcnost´ı riziko. V pˇr´ıpadˇe, ˇze by se na server nˇekdo dostal a ukradl takov´ y seznam uˇzivatel˚ u, m´a pˇr´ım´ y pˇr´ıstup ke vˇsem uˇzivatelsk´ ym u ´ˇct˚ um.
Lepˇs´ı ˇreˇsen´ı pˇredstavuje pouˇzit´ı hashovac´ı funkce, kter´a se pouˇzije na hesla. Na stranˇe serveru pak nejsou uloˇzena hesla, ale jen jejich hashe. Hash je jednocestn´a funkce, tedy ze zahashovan´ ych hesel bychom nemˇeli b´ yt schopni z´ıskat p˚ uvodn´ı text. O tom, co je hashov´an´ı a jak´e by se mˇely pouˇz´ıvat hashovac´ı funkce, si pov´ıme v kap. 3.2.2. Kdyˇz uˇzivatel zad´a sv´e pˇrihlaˇsovac´ı u ´daje, tak se z jeho hesla vytvoˇr´ı hash a porovn´a s t´ım, jenˇz je uloˇzen v datab´azi serveru. Pokud je stejn´ y, uˇzivatel je autentizov´an.
Pokud bychom chtˇeli u ´toˇcn´ıkovi napaden´ı zt´ıˇzit, je moˇzn´e pouˇz´ıt takzvan´e solen´ı (salting). Solen´ı je proces, kdy se do hashovan´eho hesla pˇrid´av´a dalˇs´ı informace [17]. Tato informace se naz´ yv´a s˚ ul (salt) a jedn´a se o n´ahodn´e ˇc´ıslo, kter´e mus´ı b´ yt uloˇzeno spolu s hashem hesla na stranˇe serveru. Aby u ´toˇcn´ık odhalil heslo pˇri pouˇzit´ı hash˚ u, musel by vytvoˇrit slovn´ık, ve kter´em by byly vˇsechny moˇzn´e kombinace znak˚ u. Kaˇzdou jednotlivou kombinaci by musel hashovat a porovn´avat se z´ıskan´ ym heslem. Pˇri velikosti slovn´ıku n slov by u ´toˇcn´ık musel prov´est n hashov´an´ı. Pokud se pˇri hashov´an´ı hesla pouˇzije jeˇstˇe s˚ ul, kter´a je dlouh´a k bit˚ u, pak uˇz u ´toˇcn´ık mus´ı prov´est 2k n hash˚ u [17]. Omezen´ı t´eto metody je v tom, ˇze nen´ı stavˇen´a na offline slovn´ıkov´e u ´toky [17].
Posledn´ı u ´rovn´ı zabezpeˇcen´ı ukl´adan´ ych u ´daj˚ u by bylo pouˇzit´ı ˇsifrov´an´ı. Jak uˇzivatelsk´a jm´ena, tak hesla v jak´emkoliv form´atu, by byla ˇsifrov´ana pouˇzit´ım napˇr´ıklad symetrick´e ˇsifry. 15
Anal´yza probl´emu
Zabezpeˇcen´ı
Vzhledem k tomu, ˇze poˇcet potenci´aln´ıch uˇzivatel˚ u, kteˇr´ı by se na server pˇripojovali, je velice mal´ y (do 10), nebyla pro ukl´ad´an´ı uˇzivatelsk´ ych u ´daj˚ u zvolena datab´aze, ale pouze soubor. Datab´aze by nenaˇsla uplatnˇen´ı ani v jin´e ˇca´sti aplikace. Podle v´ yˇse uveden´ ych u ´rovn´ı ukl´ad´an´ı hesla, byly zvoleny posledn´ı dvˇe, tzn. do souboru budou ukl´ad´any uˇzivatelsk´a jm´ena spolu s hashem a sol´ı a soubor bude ˇsifrov´an symetrickou ˇsifrou AES (viz kap. 3.2.3), kde kl´ıˇc pro tuto ˇsifru je nadefinov´an jako promˇenn´a.
Autentizaˇ cn´ı protokol [37] Jedna vˇec je, jak uloˇzit a porovn´avat u ´daje od klienta na stranˇe serveru, a druh´a, jak je tam dostat. Za t´ımto u ´ˇcelem vznikl jiˇz v roce 1997 protokol SRP (Secure remote password ptotocol), kter´ y slouˇz´ı k autentizaci pomoc´ı hesla a k v´ ymˇenˇe kl´ıˇc˚ u. Tento protokol patˇr´ı do skupiny AKE (Asymmetric key exchange) a jeho hlavn´ı funkc´ı je v´ ymˇena kl´ıˇc˚ u a jejich vyuˇzit´ı k ovˇeˇren´ı, ˇze obˇe strany znaj´ı heslo. Na rozd´ıl od EKE (Encrypted key exchange) neˇsifruje pˇren´aˇsen´e zpr´avy, ale m´ısto toho pouˇz´ıv´a pˇreddefinovan´e matematick´e vztahy ke slouˇcen´ı n´ahodn´ ych hodnot a hesla. Dalˇs´ı rozd´ıl od EKE pˇredstavuje to, ˇze se nepos´ıl´a pˇr´ımo heslo, ale pouze jeho hash (v p˚ uvodn´ım textu oznaˇcovan´ y jako verifier ). Klientovo heslo tak nikdy neopust´ı syst´em a nedostane se do s´ıtˇe. Samotn´ y hash hesla vˇsak k imitov´an´ı uˇzivatele nestaˇc´ı, p˚ uvodn´ı heslo je st´ale tˇreba.
Veˇsker´e poˇcetn´ı operace jsou prov´adˇeny v koneˇcn´e mnoˇzinˇe GF (n). Tzn. velk´e prvoˇc´ıslo n je vybr´ano pˇredem a veˇsker´e sˇc´ıt´an´ı, n´asoben´ı a umocˇ nov´an´ı je modifikov´ano modulo n. Vˇsechny vstupn´ı i v´ ystupn´ı parametry jsou tak ˇc´ısla na intervalu <0, n-1>. D´ale bude na pˇr´ıkladu pops´an autentizaˇcn´ı proces. ˇ Reknˇ eme, ˇze m´ame dvˇe osoby, Alici a Boba, a budeme cht´ıt Alici pˇrihl´asit u Boba. Nejdˇr´ıve mus´ıme k Bobovi uloˇzit hash Alicina hesla (verifier ) a n´ahodnˇe vybranou s˚ ul. Hash v se spoˇc´ıt´a jako: x = H(s, P ) v = gx x je zahozeno, jelikoˇz odpov´ıd´a otevˇren´e formˇe hesla P. U AKE protokol˚ u se obvykle pouˇz´ıv´a i heslo a veˇrejn´ y kl´ıˇc na stranˇe Boba, kter´ y by schraˇ novala Alice. U protokolu SRP dojde ke vz´ajemn´emu ovˇeˇren´ı uˇz jen t´ım, ˇze Bob bezpeˇcnˇe uchov´av´a 16
Anal´yza probl´emu
Zabezpeˇcen´ı
Alicin verifier. To zjednoduˇsuje cel´ y protokol, protoˇze Alice si nemus´ı pamatovat Bob˚ uv kl´ıˇc. V tabulce 3.1 je uveden postup vz´ajemn´e autentizace Boba a Alice krok za krokem. Alice 1. 2. 3.
Bob C
x = H(s, P) A = ga
4. 5. S = (B − g x )a+ux 6. K = H(S) 7. M1 = (A, B, K) 8. ovˇeˇren´ı M2
− → s ← − A − →
(lookup s,v )
B, u
B = v + gb S = (Av u )b K = H(S) ovˇeˇren´ı M1 M2 = H(A, M1 , K)
←−−
M
1 −−→ M2 ←−−
Tab. 3.1: Postup autentizace SRP protokolu [37].
1. Alice poˇsle Bobovi svoje uˇzivatelsk´e jm´eno (napˇr. alice). 2. Bob vyhled´a vstupn´ı u ´daje o Alici a st´ahne si jej´ı verifier a s˚ ul. S˚ ul s poˇsle Alici a ta si z jej´ı pomoc´ı a skuteˇcn´eho hesla spoˇc´ıt´a priv´atn´ı kl´ıˇc x. 3. Alice n´ahodnˇe vygeneruje ˇc´ıslo a, pro nˇejˇz plat´ı: 1 < a < n. Pak spoˇc´ıt´a doˇcasn´ y veˇrejn´ y kl´ıˇc A = g a a poˇsle ho Bobovi. 4. Bob vygeneruje n´ahodn´e ˇc´ıslo b, kde plat´ı 1 < b < n a spoˇc´ıt´a sv˚ uj doˇcasn´ y veˇrejn´ y kl´ıˇc B = v + g b . Tento kl´ıˇc poˇsle zpˇet Alici spolu s n´ahodnˇe vygenerovan´ ym parametrem u. 5. Oba si nyn´ı spoˇc´ıtaj´ı S = g ab+bux pomoc´ı hodnot, kter´e m´a kaˇzd´ y dostupn´e. Pokud Alicino heslo, kter´e zadala v kroku 2, je shodn´e s origin´aln´ım heslem, kter´e se pouˇzilo na generov´an´ı hashe, pak se obˇe hodnoty S shoduj´ı. 6. Obˇe strany si pomoc´ı S spoˇc´ıtaj´ı relaˇcn´ı kl´ıˇc (session). 7. Alice poˇsle Bobovi M1 jako d˚ ukaz, ˇze m´a spr´avn´ y relaˇcn´ı kl´ıˇc. Bob si s´am spoˇc´ıt´a M1 a porovn´a je. 8. Bob poˇsle Alici M2 jako d˚ ukaz, ˇze m´a spr´avn´ y relaˇcn´ı kl´ıˇc. Alice tak´e ovˇeˇr´ı M2 a pˇrijme ho jen, pokud se shoduje s jej´ım v´ ypoˇctem.
17
Anal´yza probl´emu
Zabezpeˇcen´ı
V´ ysledn´ y relaˇcn´ı kl´ıˇc je pˇri kaˇzd´em pˇrihl´aˇsen´ı jin´ y. Dalˇs´ı podrobnosti, jako napˇr. jakou roli hraje parametr u, se lze doˇc´ıst v [37].
V roce 2002 vyˇsla nov´a verze protokolu SRP-6. V t´eto verzi protokolu, kter´ y odol´av´a jak aktivn´ım, tak pasivn´ım s´ıt’ov´ ym u ´tok˚ um i pˇres pouˇzit´ı kr´atk´ ych dobˇre zapamatovateln´ ych hesel, byly odstranˇeny nˇekter´e menˇs´ı bezpeˇcnost´ı nedostatky, kter´a p˚ uvodn´ı verze skr´ yvala. Jeden takov´ y nedostatek u ´toˇcn´ık˚ um umoˇzn ˇoval uskuteˇcnit a ovˇeˇrit 2 pokusy o uh´adnut´ı hesla pˇri napodoben´ı pˇrihl´aˇsen´ı [36]. Tato vlastnost nepˇredstavuje z´avaˇznou bezpeˇcnost´ı hrozbu, jelikoˇz kaˇzd´ y pokus o uh´adnut´ı m´a za n´asledek detekovateln´e selh´an´ı na obou stran´ach a st´ale by bylo potˇreba nere´aln´eho poˇctu on-line pokus˚ u, a to i v pˇr´ıpadˇe, ˇze by se toto ˇc´ıslo sn´ıˇzilo na polovinu [36]. Jednoduchou zmˇenou protokolu popsanou v [36] se u ´toku Two-for-one, jak je v origin´alu naz´ yv´an, d´a zabr´anit.
Tento protokol se jev´ı jako velice u ´ˇcinn´ y n´astroj urˇcen´ y pro bezpeˇcnou autentizaci bez moˇznosti napadan´ı u ´toˇcn´ıkem nebo odposlechu hesla. Jedinou vadu pˇredstavuje to, ˇze jiˇz poˇc´ıt´a s t´ım, ˇze na stranˇe serveru jsou pˇrihlaˇsovac´ı u ´daje uloˇzeny, a nezab´ yv´a se jejich bezpeˇcn´ ym pˇrenesen´ım od klienta na server. Naˇstˇest´ı pro n´as je tento probl´em je uˇz vyˇreˇsen v kapitole 3.2.1, a tak je moˇzn´e protokol SRP-6 bez probl´emu pouˇz´ıt.
Hashovac´ı funkce Hashovac´ı funkce mapuje dlouh´ y ˇretˇezec na kratˇs´ı a bˇeˇznˇe se pouˇz´ıv´a v hashovac´ıch tabulk´ach, kde m´a za u ´kol urychlit pˇr´ıstup k jednotliv´ ym poloˇzk´am. Bezpeˇcn´a ˇsifrovac´ı funkce m´a, oproti t´e bˇeˇznˇe pouˇz´ıvan´e, jej´ımˇz hlavn´ım u ´kolem je rovnomˇern´e rozdˇelen´ı dat, nˇekolik vlastnost´ı nav´ıc [17]: • Nemˇela by spotˇrebov´avat pˇr´ıliˇs mnoho v´ ypoˇcetn´ıho ˇcasu pro v´ ypoˇcet hashe ani pro relativnˇe dlouh´e ˇretˇezce - efektivnost. • Z hashe by nemˇelo b´ yt v´ ypoˇcetnˇe moˇzn´e z´ıskat p˚ uvodn´ı ˇretˇezec - jednocestn´a funkce. • Pro kaˇzd´e dvˇe rozd´ıln´e zpr´avy neexistuje stejn´ y hash - bezkolizn´ı funkce. Dˇr´ıve se pouˇz´ıvala hashovac´ı funkce MD5. Tato funkce je vˇsak n´achyln´a na kolizn´ı u ´toky. Prvn´ı takov´ y byl pops´an jiˇz v roce 2004 (viz [34]). Od t´e doby doˇslo k 18
Anal´yza probl´emu
Zabezpeˇcen´ı
vylepˇs´ı MD5, ale z´aroveˇ n i pˇribyly dalˇs´ı algoritmy (viz [27]) na vyhled´av´an´ı koliz´ı a MD5 se jiˇz nepovaˇzuje za bezpeˇcnou hashovac´ı funkci.
M´ısto MD5 se dnes pouˇz´ıv´a SHA-256 nebo SHA-512. Kter´e vych´az´ı ze sv´eho pˇredch˚ udce, SHA-1, ale produkuj´ı delˇs´ı v´ ystupn´ı hashe (256 a 512 bit˚ u). [17]
Multicast [16] Aby se klient dok´azal pˇripojit na server, tak mus´ı zn´at IP adresu serveru a jeho port. Pro snadnˇejˇs´ı pouˇzit´ı je moˇznost implementovat vyhled´av´an´ı serveru pomoc´ı dom´enov´eho jm´ena. Jm´ena si lid´e zapamatuj´ı sn´aze neˇz IP adresy. Toho je moˇzn´e dos´ahnout pomoc´ı sluˇzby, kter´a se jmenuje Multicast DNS (d´ale mDNS).
mDNS se pouˇz´ıv´a k vytvoˇren´ı DNS z´aznam˚ u v s´ıti (priv´atn´ı), kde ˇza´dn´ y DNS server nen´ı. Pouˇz´ıv´a k tomu dobˇre zn´am´e funkce a operace z DNS (Domain Name System) rozhran´ı. M´ısto unicastu se vˇsak pouˇz´ıv´a multicast. Kaˇzd´ y poˇc´ıtaˇc v s´ıti m´a svoj´ı tabulku z´aznam˚ u a mus´ı b´ yt pˇripojen do mDNS skupiny. Tato skupina pouˇz´ıv´a IP adresu 224.0.0.251 a port 5353. Pokud potˇrebuje klient zn´at IP adresu stroje, poˇsle t´eto skupinˇe zpr´avu se jm´enem. Zp´atky mu odpov´ı pouze ten, kdo toto jm´eno zn´a, a ve zpr´avˇe poˇsle i pˇr´ısluˇsnou IP adresu.
Form´at jmen, kter´ y se pro mDNS pouˇz´ıv´a, je ve tvaru vlastni-nazev-domeny.local. Kde sufix .local. urˇcuje lokalizaci jm´ena na lok´aln´ı s´ıt’.
3.2.3
Komunikace
Posledn´ım krokem v s´erii zabezpeˇcen´ı je ˇsifrov´an´ı nav´azan´eho spojen´ı. Nejdˇr´ıve ale mus´ıme urˇcit, jak´e typy komunikace budou v naˇs´ı aplikaci prob´ıhat. Tradiˇcn´ı pojet´ı architektury klient - server, kdy server pouze poslouch´a, a aˇz k nˇemu doraz´ı zpr´ava, tak na n´ı odpov´ı, je pro naˇse u ´ˇcely nedostaˇcuj´ıc´ı. Je to z toho d˚ uvodu, ˇze i server bude potˇrebovat pos´ılat zpr´avy nez´avisle na tom, jestli zrovna nˇekomu odpov´ıd´a ˇci nikoliv. Mezi tyto zpr´avy patˇr´ı upozornˇen´ı, zda se zmˇenil obraz nebo hlasitost. Komunikace mezi serverem a klientem bude tedy obousmˇern´a ve smyslu, ˇze jak jeden, tak druh´ y budou moct poslat zpr´avu kdykoliv. S t´ım, ˇze na zpr´avy od klienta bude server odpov´ıdat, ale obr´acenˇe nikoliv. 19
Anal´yza probl´emu
Zabezpeˇcen´ı
Vedle t´eto obousmˇern´e komunikaˇcn´ı linky bude mezi serverem a klientem existovat jeˇstˇe jedna jednocestn´a linka. Touto linkou se budou pos´ılat multimedi´aln´ı data ze serveru klientovi. Klient bude tato data jen pˇrij´ımat a ˇza´dn´ ym zp˚ usobem je nebude potvrzovat.
Na realizaci tˇechto komunikaˇcn´ıch linek m´ame 2 moˇznosti, co se t´ yˇce pouˇzit´ı transportn´ıch protokol˚ u (TCP, UDP).
Komunikaˇ cn´ı protokoly Protokol TCP (Transmision Control Protocol) poskytuje spojovan´e sluˇzby. To znamen´a, ˇze mezi obˇema konci spojen´ı vytv´aˇr´ı na ˇcas virtu´aln´ı okruh, kter´ y je plnˇe duplexn´ı. Pokud se data ztrat´ı nebo poˇskod´ı, jsou vyˇz´ad´ana znovu a jejich integrita je zabezpeˇcena kontroln´ım souˇctem. Aplikace se tedy jiˇz nemus´ı starat o to, jestli se nˇejak´a data ztratila. Protokol TCP neobsahuje ˇz´adnou ochranu proti modifikac´ım zpr´av a jejich kontroln´ıch souˇct˚ u. [9]
Aplikace vyuˇz´ıvaj´ıc´ı TCP protokol pro komunikaci m´a tu vlastnost, ˇze pokud se spojen´ı pˇreruˇs´ı, tak funkce, kter´a slouˇz´ı pro pˇr´ıjem dat (napˇr. recv, read...), skonˇc´ı chybou. T´ımto se d´a detekovat, ˇze se klient/server odpojil nebo nastalo pˇreruˇsen´ı spojen´ı. T´eto vlastnosti a dalˇs´ıch jmenovan´ ych, kter´e protokol TCP poskytuje, lze vyuˇz´ıt pˇri vytv´aˇren´ı prvn´ıho komunikaˇcn´ıho kan´alu, kter´ y slouˇz´ı pro pˇrenos zpr´av mezi serverem a klientem. V pˇr´ıpadˇe, ˇze se klient neoˇcek´avanˇe odpoj´ı, server to zjist´ı a m˚ uˇze se podle toho zachovat (vymaz´an´ı klientov´ ych u ´daj˚ u jako jeho id nebo uloˇzen´eho nastaven´ı ohlednˇe zas´ıl´an´ı zpr´av o detekci zmˇen atd.). To sam´e plat´ı i pro klienta, kter´ y d´ıky tomu nebude do nekoneˇcna ˇcekat na odpovˇed’ serveru. V pˇr´ıpadˇe, ˇze by TCP protokol touto vlastnost´ı nedisponoval, pak by bylo nutn´e implementovat cyklick´e dotazov´an´ı, jestli aplikace jeˇstˇe ˇzije.
Protokol UDP (User Datagram Protocol) poskytuje, na rozd´ıl od TCP, nespojovan´e sluˇzby. To znamen´a, ˇze nenavazuje spojen´ı a nestar´a se o to, jestli odeslan´ y datagram pˇr´ıjemci dojde nebo ne [9]. UDP protokol je moˇzn´e pouˇz´ıt pro pˇrenos streamu, jednak proto, ˇze pokud se ztrat´ı jeden datagram s video r´amcem, tak na v´ ysledn´em obrazu to vˇetˇsinou nen´ı pozorovateln´e, a tak´e proto, ˇze pr´avˇe neobsahuje potvrzovac´ı mechanismus. Video r´amec, kter´ y obsahuje jeden obr´azek a kter´ y pˇrijde
20
Anal´yza probl´emu
Zabezpeˇcen´ı
mimo sv´e poˇrad´ı (pozdˇe) je stejnˇe zahozen, a proto nem´a smysl ho za kaˇzdou cenu vyˇzadovat.
Vzhledem k tomu, ˇze ze serveru je potˇreba pˇren´aˇset stream klient˚ um, tak i protokol UDP zde najde sv´e uplatnˇen´ı. Dalˇs´ı moˇznosti pˇren´aˇsen´ı stream˚ u budou pops´any v kap. 3.3.4.
Nyn´ı se dost´av´ame k moˇznostem ˇsifrov´an´ı pˇrenosu. Pop´ıˇseme nˇekolik blokov´ ych ˇsifer, kter´e je moˇzn´e pro ˇsifrov´an´ı komunikace pouˇz´ıt. Pro ˇsifrov´an´ı obou kan´al˚ u bude vybr´ana stejn´a ˇsifra. Vzhledem k velk´emu mnoˇzstv´ı dat, kter´a se pˇren´aˇs´ı po streamovac´ım kan´alu, je lepˇs´ı volbou symetrick´a ˇsifra. Asymetrick´e ˇsifry se v praxi nedaj´ı pouˇz´ıt pro velk´e mnoˇzstv´ı dat, nebot’ jsou pˇr´ıliˇs pomal´e.
DES [17] Prvn´ı ˇsifra, kterou zm´ın´ıme, je ˇsifra DES (Data Encryption Standard). Data jsou ˇsifrov´ana po 64 bitov´ ych bloc´ıch pomoc´ı 64 bitov´eho kl´ıˇce. Respektive se pouˇz´ıv´a 56 bitov´ y kl´ıˇc, jelikoˇz 8 bit˚ u se pouˇz´ıv´a pro detekci poˇskozen´ı kl´ıˇce. Dˇr´ıv se DES pouˇz´ıval ve vˇsech moˇzn´ ych odvˇetv´ıch vˇcetnˇe finanˇcn´ıho. Pak se ji ale podaˇrilo prolomit pomoc´ı hrub´e s´ıly, kde u ´toˇcn´ık na zaˇsifrovan´ y text zkouˇsel jeden kl´ıˇc za druh´ ym 56 (existuje ”jen”c moˇznost´ı).
Po prolomen´ı ˇsifry DES byla vytvoˇrena nov´a ˇsifra, Triple DES. Jak uˇz n´azev napov´ıd´a, jedn´a se o bezpeˇcnˇejˇs´ı verzi p˚ uvodn´ı ˇsifry DES. U t´eto ˇsifry doch´az´ı k zaˇsifrov´an´ı dat tˇrikr´at a pokaˇzd´e lze pouˇz´ıt jin´ y kl´ıˇc. Zpr´ava se nejdˇr´ıve zaˇsifruje prvn´ım kl´ıˇcem, pak se druh´ ym provede deˇsifrov´an´ı a tˇret´ım se opˇet zaˇsifruje. Tento zvl´aˇstn´ı postup se dˇel´a kv˚ uli zpˇetn´e kompatibilitˇe a jednoduˇsˇs´ı moˇznosti pˇrechodu z DES na Triple DES. Oproti p˚ uvodn´ı verzi je tato prakticky tˇrikr´at pomalejˇs´ı a i od jej´ıho pouˇz´ıv´an´ı se ustupuje.
AES ˇ Sifra AES (Advance Encryption Standard) byla vytvoˇrena jako n´ahrada za prolomenou ˇsifru DES. Oproti dvˇema v´ yˇse zmiˇ novan´ ym je bezpeˇcnˇejˇs´ı a rychlejˇs´ı. Zat´ım nebyla prolomena a uv´ad´ı se, ˇze super poˇc´ıtaˇc s v´ ypoˇcetn´ım v´ ykonem 10,51 * 1015
21
Anal´yza probl´emu
Zabezpeˇcen´ı
FLOPS1 by pomoc´ı hrub´e s´ıly potˇreboval 1,02 * 1018 let na prolomen´ı (na DES by mu staˇcilo 399 sekund) [5]. AES je symetrick´a ˇsifra, kter´a ˇsifruje data po pevnˇe dan´ ych d´elk´ach, a takt´eˇz pracuje s d´elkami kl´ıˇc˚ u 128, 192, 256 bit˚ u [17]. Jin´e d´elky standard nedovoluje.
AES vnitˇrnˇe pracuje s matic´ı, kter´a se naz´ yv´a stav (state). D´elka vstupn´ıho bloku, v´ ystupn´ıho bloku i stavu je 128 bit˚ u. Stav je pak tvoˇren matic´ı o rozmˇerech 4x4. Na zaˇca´tku ˇsifrov´an´ı jsou vstupn´ı byty nakop´ırov´any do stavov´e matice. N´aslednˇe jsou na ni aplikov´any ˇsifrovac´ı operace a v´ ysledek je pak zkop´ırov´an na v´ ystup. Poˇcet cykl˚ u, kter´e se vykonaj´ı bˇehem algoritmu, je d´an d´elkou kl´ıˇce, 128b = 10 kol, 192b = 12 a 256b = 14 kol. Bˇehem kaˇzd´eho kola se vykonaj´ı n´asleduj´ıc´ı operace [4]: • SubBytes - Jedn´a se o neline´arn´ı substituci byt˚ u, kter´a se aplikuje na kaˇzd´ y byte zvl´aˇst’ za pouˇzit´ı substituˇcn´ı tabulky (S-box ) (viz obr. 3.4). • ShiftRow - Spodn´ı 3 ˇra´dky stavov´e matice jsou posunov´any o urˇcit´ y d´ıl doleva. • MixColumn - Line´arn´ı transformace sloupeˇck˚ u stavu. • AddRoundKey - Kaˇzd´ y byte stavu je slouˇcen s kl´ıˇcem cyklu, kter´ y je kaˇzd´e kolo jin´ y a kter´ y se derivuje z ˇsifrovac´ıho kl´ıˇce.
Obr. 3.4: Aplikace S-box na kaˇzd´ y byte u ˇsifry AES v SubBytes f´azi [28]. V posledn´ım kole se MixColumn vynech´av´a. Pseudok´od k pr˚ ubˇehu ˇsifry je na obr. 3.6 [4]. 1
Floating-point Operations per Second - poˇcet operac´ı v plovouc´ı ˇr´adov´e ˇc´arce za sekundu
22
Anal´yza probl´emu
Zabezpeˇcen´ı
Obr. 3.5: Posun ˇra´dk˚ u u ˇsifry AES v ShiftRow f´azi [26]. M´ıra bezpeˇcnosti AES z´avis´ı nejen na tom, ˇze ˇsifrovac´ı kl´ıˇc mus´ı b´ yt dostateˇcnˇe n´ahodn´ y, ale i na tom, jak´ y ˇsifrovac´ı m´od se pouˇzije. M´ody, kter´e lze pouˇz´ıt, jsou ECB, CBC, CFB a OFB [10].
ECB (Electronic Codebook Mode) m´od aplikuje ˇsifru na bloky dat tak, jak jdou za sebou. V tomto m´odu je moˇzn´e (de)ˇsifrovat v´ıce blok˚ u paralelnˇe. Probl´em ale pˇredstavuje to, ˇze urˇcit´ y blok textu bude ˇsifrov´an pokaˇzd´e stejnˇe. To m˚ uˇze zp˚ usobovat opakuj´ıc´ı se sekvence a urˇcitou ˇcitelnost k´odu, jako je vidˇet na obr. 3.9 (b).
Bezpeˇcnˇejˇs´ı metoda je CBC (Cipher Block Chaining Mode), kter´a nejdˇr´ıve text XORuje s pˇredchoz´ım zaˇsifrovan´ ym blokem, a aˇz pak ho tak´e zaˇsifruje. D´ıky tomu jsou na sobˇe jednotliv´e bloky z´avisl´e. Pro u ´plnˇe prvn´ı blok jeˇstˇe neexistuje blok pˇredchoz´ı, a tak se pouˇz´ıv´a inicializaˇcn´ı vektor (IV). Tento vektor nemus´ı b´ yt tajn´ y, ale mus´ı b´ yt nepˇredv´ıdateln´ y. Postup ˇsifrov´an´ı je uk´az´an na obr. 3.7. Vzhledem k tomu, ˇze bloky jsou na sobˇe z´avisl´e, nen´ı moˇzn´e jejich paraleln´ı (de)ˇsifrov´an´ı [10]. Metoda CBC je oproti ECB mnohem bezpeˇcnˇejˇs´ı, coˇz je vidˇet i na zaˇsifrov´an´ı obr´azku 3.9 (c). [10]
Metoda CFB (Cipher Feedback Mode) je podobn´a metodˇe CBC. K ˇsifrov´an´ı bloku tak´e vyuˇz´ıv´a blok pˇredchoz´ı. Metoda pracuje tak, ˇze na zaˇca´tku se vezme 23
Anal´yza probl´emu
Zabezpeˇcen´ı
Obr. 3.6: Pseudok´od ˇsifry AES [23] (obr. byl upraven).
ˇ Obr. 3.7: Sifrov´ an´ı AES pomoc´ı metody CBC [30] (obr. byl upraven). inicializaˇcn´ı vektor a ten se zaˇsifruje. Z tohoto zaˇsifrovan´eho bloku se vezme s nejv´ yznamnˇejˇs´ıch bit˚ u a ty jsou XORov´any s origin´aln´ım textem k zaˇsifrov´an´ı, t´ım vznikne prvn´ı zaˇsifrovan´ y segment. Z IV se n´aslednˇe vezme b-s nejm´enˇe v´ yznamn´ ych bit˚ u, spoj´ı se s s prvn´ıho zaˇsifrovan´eho segmentu a vytvoˇr´ı tak dalˇs´ı vstupn´ı blok. Stejnˇe jako u CBC metody, ani zde nen´ı moˇzn´e pouˇz´ıt paraleln´ı ˇsifrov´an´ı, jelikoˇz bloky na sobˇe z´avis´ı. [10]
Metoda OFB (Output Feedback Mode) pouˇz´ıv´a n´asleduj´ıc´ı postup pˇri ˇsifrov´an´ı: vektor IV je zaˇsifrov´an a vznikne prvn´ı v´ ystupn´ı blok, kter´ y je XORov´an s textem k ˇ zaˇsifrov´an´ı, a t´ım vznikne prvn´ı zaˇsifrovan´ y blok. Sifra je d´ale aplikov´ana na prvn´ı v´ ystupn´ı blok, a t´ım vznikne druh´ y v´ ystupn´ı blok.
24
Anal´yza probl´emu
Zabezpeˇcen´ı
ˇ Obr. 3.8: Sifrov´ an´ı AES pomoc´ı metody CFB [31] (obr. byl upraven). Druh´ y v´ ystupn´ı blok je XORov´an s druh´ ym textem k zaˇsifrov´an´ı atd. Vektor IV mus´ı b´ yt jedineˇcn´ y pro kaˇzd´ y bˇeh (kaˇzdou zpr´avu) s dan´ ym kl´ıˇcem. [10]
(a) Origin´ aln´ı obr´ azek
(b) Metoda ECB
(c) Metoda CBC
Obr. 3.9: Uk´azka pouˇzit´ı ECB a CBC m´od˚ u na obr´azek [7]. P˚ uvodn´ım z´amˇerem bylo pouˇzit´ı kl´ıˇce o d´elce 512 bit˚ u kv˚ uli vyˇsˇs´ı bezpeˇcnosti. Standard AES vˇsak st´ale umoˇzn ˇuje pouˇzit´ı maxim´alnˇe 256 bitov´eho kl´ıˇce. Nakonec byl tedy zvolen kl´ıˇc o d´elce 256 bit˚ u a metoda CBC, kterou budou ˇsifrov´ana data v obou komunikaˇcn´ıch kan´alech. Probl´em s distribuc´ı symetrick´ ych kl´ıˇc˚ u zde odpad´a, jelikoˇz v´ ysledkem autentizaˇcn´ıho procesu protokolu SRP je relaˇcn´ı kl´ıˇc, kter´ y je moˇzn´e d´ale pouˇz´ıt k ˇsifrov´an´ı pomoc´ı AES (viz kap. 4.2.2).
25
Anal´yza probl´emu
3.3
Stream
Stream
Jak uˇz bylo zm´ınˇeno v´ yˇse, server mus´ı umˇet poskytnout dva streamy k odbˇeru. T´ım prvn´ım je audio+video stream, a t´ım druh´ ym pak pouze audio stream. V t´eto kapitole si pˇribl´ıˇz´ıme stream, jeho moˇznosti, co se t´ yˇce form´at˚ u audia/videa, a tak´e se pod´ıv´ame na zp˚ usoby, jak je moˇzn´e dopravit stream ze serveru klientovi. D˚ uleˇzitou ˇca´st tvoˇr´ı i kapitola o moˇznostech detekce zmˇeny obrazu nebo hlasitosti.
Streamov´an´ı je technika pouˇz´ıvaj´ıc´ı se pˇredevˇs´ım pro pˇrenos multimedi´aln´ı informace pˇres internet. Pˇri streamov´an´ı je moˇzn´e dan´ y video soubor spustit jiˇz bˇehem stahov´an´ı. Coˇz je v´ yhodn´e, ale na druhou stranu to klade vˇetˇs´ı n´aroky na klienta, kter´ y stream odeb´ır´a. Typy streamu jsou obecnˇe dva, prvn´ı je on demand, tedy stream na vyˇza´d´an´ı (napˇr. Youtube), a t´ım druh´ ym jsou pˇrenosy v re´aln´em ˇcase, kter´e se budou t´ ykat i naˇs´ı aplikace.
Datov´e prvky obsaˇzen´e ve streamu se oznaˇcuj´ı jako r´amce (frame). Kaˇzd´ y r´amec je dek´odov´an jin´ ym typem CODECu, podle toho, o jak´ y typ r´amce se jedn´a (audio, video). CODEC (coder-decoder) urˇcuje, jak´ ym zp˚ usobem jsou data komprimov´ana a uloˇzena. Komprimovan´a data neobsahuj´ı vˇsechny informace jako data p˚ uvodn´ı, kapacitnˇe zab´ıraj´ı mnohem m´enˇe m´ısta a jsou d´ıky tomu vhodnˇejˇs´ı pro pˇrenos po s´ıti.
3.3.1
Audio
Audiem budeme d´ale oznaˇcovat digit´aln´ı audio, kter´e se d´a z´ıskat pomoc´ı A/D pˇrevodu. A/D pˇrevodem rozum´ıme pˇrevod analogov´eho sign´alu na digit´aln´ı. Audio se skl´ad´a z velk´eho poˇctu vzork˚ u, kter´e pˇredstavuj´ı hodnotu p˚ uvodn´ıho sign´alu v urˇcit´em ˇcase. Audia jsou nahr´av´ana s r˚ uznou vzorkovac´ı frekvenc´ı, kter´a ud´av´a, jak rychle se m´a kaˇzd´ y vzorek pˇrehr´avat, a je d´ana poˇctem vzork˚ u za sekundu. Nejˇcastˇeji pouˇz´ıvan´e frekvence jsou 44 100Hz a 22050Hz.
Intenzitu zvuku je moˇzn´e urˇcit pomoc´ı decibel˚ u - dB. Jedn´a se o veliˇcinu, kter´a je vyj´adˇrena jako logaritmus pod´ılu dvou hodnot. Pades´ati decibely se d´a oznaˇcit bˇeˇzn´a konverzace a 120 decibel˚ u pˇredstavuje pr´ah bolesti. [33]
26
Anal´yza probl´emu
Stream
MP3 Pro pˇrenos audia byla zvolena komprimace pomoc´ı MP3 (MPEG Layer III Audio Encoding). MP3 komprese pouˇz´ıv´a percepˇcn´ı k´odov´an´ı (metoda zaloˇzen´a na vn´ım´an´ı zvuku ˇclovˇekem - psychoacoustic). Tato metoda dovoluje odstranit nebo redukovat pˇresnost takov´ ych ˇca´st´ı audia, kter´e jsou pro lidsk´ y sluch m´enˇe slyˇsiteln´e. MP3 soubor, jehoˇz pˇrenosov´a rychlost je 128 kbit/s, tvoˇr´ı asi 1/11 p˚ uvodn´ıho nekomprimovan´eho LPCM (Linear pulse-code modulation) souboru, kter´ y m´a kvalitu kompaktn´ıho disku (44 100 Hz, 16 bit˚ u hloubku). [20]
3.3.2
Video
Jako digit´aln´ı video se d´a oznaˇcit sekvence r´amc˚ u, kde kaˇzd´ y r´amec se skl´ad´a z obd´eln´ıkov´e mˇr´ıˇzky obrazov´ ych element˚ u - pixel˚ u. Kaˇzd´ y pixel m˚ uˇze b´ yt bud’ jeden bit (pouze ˇcernob´ıl´ y obraz) nebo 8 bit˚ u (256 odst´ın˚ u ˇsedi). Pro dosaˇzen´ı barevn´eho obrazu se vˇetˇsinou pouˇz´ıv´a 8 bit˚ u pro kaˇzdou barevnou sloˇzku z RGB (red - green - blue). To pˇredstavuje 24 bit˚ u na pixel, a tedy okolo 16 milion˚ u barev (v´ıce, neˇz lidsk´e oko m˚ uˇze rozliˇsit). Obvykl´e sn´ımkovac´ı frekvence (frame rate) se pohybuj´ı od 24 do 30 sn´ımk˚ u/s. [33]
Pˇrenos videa po s´ıti je n´aroˇcn´ y na pˇrenosovou kapacitu, nen´ı-li pouˇzita komprese. 2 Pro pˇredstavu : • Video, kter´e m´a velikost 640x480, 24 bit˚ u barevn´e informace na pixel a 30 sn´ımk˚ u/s, potˇrebuje ke sv´emu pˇrenosu 421 Mb/s [33]. • Video velikosti 720x576, s 8 bitovou barevnou hloubkou a 25 sn´ımky/s, potˇrebuje ˇs´ıˇrku p´asma 158 Mb/s [19]. • HDTV (High Definition Television) uˇz potˇrebuje 1,85 Gb/s [19].
MPEG MPEG standard (Moving Picture Coding Exports Group) patˇr´ı mezi nejzn´amˇejˇs´ı a asi i nejpouˇz´ıvanˇejˇs´ı k´odov´an´ı videa (um´ı komprimovat ale i audio [33]). 2
Vˇsechny v´ ypoˇcty poˇc´ıtaj´ı s barevn´ ym modelem YUV 4:2:2 a byly ovˇeˇreny pomoc´ı [13].
27
Anal´yza probl´emu
Stream
Tento standard zahrnuje kompresn´ı metody: MPEG-1, MPEG-2, MPEG-4. MPEG4 je nejmladˇs´ı a byl konstruov´an na pouˇzit´ı v multimedi´aln´ıch aplikac´ıch a pro video komunikace [19].
Z´akladn´ım stavebn´ım kamenem MPEG streamu jsou komponenty naz´ yvaj´ıc´ı se element´arn´ı stream (Elementary Stream) (d´ale ES). Kaˇzd´e video m˚ uˇze obsahovat nˇekolik typ˚ u ES: audio, video, titulky atd. Jednotliv´e ES jsou ukl´ad´any do vˇetˇs´ıch celk˚ u, kter´ ym se ˇr´ık´a PES pakety (Packetised Elementary Stream). Kaˇzd´ y PES paket m´a 6 bytovou hlaviˇcku, kter´a mimo jin´e ud´av´a i typ pˇren´aˇsen´ ych dat (stream ID je ve ˇctvrt´em bytu hlaviˇcky a m´a tvar: 110x xxxx - audio, 1110 yyyy - video). [11]
MPEG komprimuje data v 5 kroc´ıch: redukce rozliˇsen´ı, nahrazen´ı pohybu, diskr´etn´ı kosinov´a transformace (DCT), kvantizace a k´odov´an´ı entropie [19]. D´ale si bl´ıˇze pˇribl´ıˇz´ıme prvn´ı dva kroky.
Redukce rozliˇsen´ı vyuˇz´ıv´a toho, ˇze lidsk´e oko je m´enˇe citliv´e na barevnou informaci neˇz na kontrasty tmav´e a svˇetl´e a ˇze prov´ad´ı pˇrevod z prostoru RGB na YUV komponenty. Barevn´e sloˇzky U a V mohou b´ yt redukov´any (pˇrevzorkov´any) na polovinu pixel˚ u v horizont´aln´ı u ´rovni (YUV 4:2:2) nebo z´aroveˇ n i ve vertik´aln´ı (YUV 4:2:0). Toto pˇrevzorkov´an´ı m´a za n´asledek sn´ıˇzen´ı objemu dat o 50% a 33%. [19]
Obr. 3.10: Spojen´ı 2(4) pixel˚ u chrominanˇcn´ıho kan´alu dohromady [8]. V druh´em kroku, nahrazen´ı pohybu, se vyuˇz´ıv´a redundance, kter´a se ve videu objevuje. Tato redundance spoˇc´ıv´a v tom, ˇze dva po sobˇe jdouc´ı r´amce, jsou ˇcasto t´emˇeˇr identick´e. To plat´ı hlavnˇe pro sc´eny, kde se kamera neh´ ybe, a osoby se pohybuj´ı velice pomalu. MPEG tak rozliˇsuje 3 typy r´amc˚ u [33]:
28
Anal´yza probl´emu
Stream
• I r´amce (Intracoded): obsahuj´ı cel´ y obr´azek. • P r´amce (Predictive): obsahuj´ı rozd´ıl oproti pˇredchoz´ımu r´amci (P nebo I ). Bez referenˇcn´ıho r´amce je nejde zrekonstruovat. • B r´amce (Bidirectional): obsahuj´ı rozd´ıl, jako P r´amce, ale na obˇe strany (vzhledem k pˇredchoz´ımu a n´asleduj´ıc´ımu r´amci). Podle poˇctu pouˇzit´ ych typ˚ u r´amc˚ u se odv´ıj´ı i v´ ysledn´a kvalita a velikost videa. ˇ C´ım v´ıce I r´amc˚ u, t´ım vˇetˇs´ı kvalita a velikost, a naopak, ˇc´ım v´ıce B r´amc˚ u, t´ım je kvalita horˇs´ı a velikost menˇs´ı [19]. Moˇzn´ y sled r´amc˚ u videa je vidˇet na obr. 3.11. B r´amce se, kv˚ uli sv´ ym n´arok˚ um na buffer a vˇetˇs´ı sloˇzitosti, ne vˇzdy pouˇz´ıvaj´ı [33]. Vztah (pohybov´ y) mezi dvˇema r´amci se urˇcuje pomoc´ı pohybov´eho vektoru. Jak´e jsou v´ ypoˇcetn´ı moˇznosti toho algoritmu se lze doˇc´ıst v [3], [19] a [33].
Obr. 3.11: Uk´azka posloupnosti r´amc˚ u v MPEGu [2].
MPEG-TS [11] MPEG-TS (MPEG transport stream) je kontejner pouˇz´ıvaj´ıc´ı se na pˇrenos dat (audio, video atd.) po nespolehliv´e s´ıti. Oproti programov´emu streamu obsahuje robustn´ı mechanismus na opravu chyb a synchronizaci. Transportn´ı stream se skl´ad´a 29
Anal´yza probl´emu
Stream
z TS paket˚ u, kter´e maj´ı pevnˇe danou d´elku - 188B (4B tvoˇr´ı hlaviˇcka). Jeden PES paket b´ yv´a rozdˇelen do nˇekolika TS paket˚ u a nach´az´ı se v ˇca´sti pro data. V hlaviˇcce TS paketu je pak jeden bit nastaven na indikaci zaˇca´tku PES paketu. Vzhledem k tomu, ˇze PES paket m˚ uˇze m´ıt r˚ uznou d´elku, mus´ı se pˇr´ıpadn´e zb´ yvaj´ıc´ı m´ısto v TS paketu doplnit 0xFF, aby dalˇs´ı PES paket zaˇc´ınal na zaˇc´atku nov´eho TS paketu. V kaˇzd´em TS paketu sm´ı b´ yt zaˇca´tek jen jednoho PES paketu. Vzhledem ke tˇemto vlastnostem byl tento kontejner vybr´an pro pˇrenos obou stream˚ u, kter´e se v aplikaci pˇren´aˇsej´ı.
3.3.3
Knihovna pro pr´ aci s audiem/videem
Pro z´ısk´av´an´ı audia a videa ze vstupn´ıch zaˇr´ızen´ı je nutn´e vybrat vhodn´ y n´astroj a d´ale s´ıt’ov´e protokoly, pomoc´ı kter´ ych bude stream dopraven k pˇr´ıjemci (viz kap. 3.3.4). Pro z´ısk´an´ı i pos´ıl´an´ı audia/videa se nab´ız´ı pouˇzit´ı jiˇz existuj´ıc´ıch n´astroj˚ u jako je napˇr. Skype. Tyto n´astroje vˇsak nejsou dostupn´e na u ´rovni zdrojov´eho k´odu, a nav´ıc u nich nen´ı moˇznost dostat se k pos´ılan´ ym dat˚ um, aby je bylo moˇzn´e zkoumat kv˚ uli detekci zmˇen. Proto byla vybr´ana jin´a varianta v podobˇe multiplatformn´ı opensourcov´e knihovny - FFmpeg.
FFmpeg pˇredstavuje kompletn´ı ˇreˇsen´ı pro nahr´av´an´ı, pˇrevod a streamov´an´ı audia/videa [12]. FFmpeg poskytuje knihovny napsan´e v programovac´ım jazyce C, kter´ y um´ı prov´adˇet v´ yˇse zm´ınˇen´e (napˇr. avcodec, avdevice, avutil atd.) nebo poskytuje jiˇz hotov´e n´astroje (pˇreloˇzen´e nebo zdrojov´e k´ody) na t´eˇz v´ yˇse zm´ınˇen´e aktivity (ffmpeg.exe, ffprobe.exe, ffserver.exe, ffplay.exe).
• ffmpeg.exe - N´astroj pro konverzi audia/videa, kter´ y dok´aˇze z´ısk´avat vstup(y) z pˇripojen´ ych zaˇr´ızen´ı (soubor, internetov´ y stream, pipe, multimedi´aln´ı zaˇr´ızen´ı) a pos´ılat je na v´ ystupy (soubor, internet atd.). • ffprobe.exe - Slouˇz´ı k z´ısk´av´an´ı informac´ı o dan´em streamu. • ffserver.exe - Jedn´a se o streamovac´ı server, kter´ y podporuje audio i video. • ffplay.exe - N´astroj urˇcen´ y pro pˇrehr´av´an´ı multim´edi´ı bud’ ze souboru nebo internetu. Pouˇz´ıv´a knihovnu SDL. M´ame tedy dvˇe moˇznosti, jak FFmpeg pouˇz´ıt. Jedna je rovnou pomoc´ı knihoven a druh´a pomoc´ı jiˇz vytvoˇren´ ych n´astroj˚ u. FFmpeg poskytuje rozs´ahlou, ˇcitelnou a 30
Anal´yza probl´emu
Stream
srozumitelnou dokumentaci k tomu, jak pouˇz´ıvat v´ yˇse zm´ınˇen´e n´astroje. Popisuje zde, jak´e parametry se na co pouˇz´ıvaj´ı, jak´e maj´ı pˇr´ıpustn´e hodnoty atd. Dokumentace, kde by bylo pops´ano, jak pouˇz´ıvat knihovny a jejich funkce ve zdrojov´em k´odu, aˇz na cca 6 vzorov´ ych pˇr´ıklad˚ u poskytovan´ ych FFmpegem, neexistuje. Dalˇs´ı nev´ yhoda pouˇzit´ı knihoven je ta, ˇze jednotliv´e updaty nejsou zpˇetnˇe kompatibiln´ı. Pokud se tedy vyd´a update, pak se mus´ı cel´ y napsan´ y k´od proj´ıt a opravit. V nˇekter´ ych pˇr´ıpadech jde o mal´e zmˇeny typu: pˇrid´an´ı za n´azev funkce o jedniˇcku vˇetˇs´ı ˇc´ıslo. Pokud jsou ale zmˇeny velk´e, m˚ uˇze j´ıt o zmˇenu cel´e logiky prov´adˇen´eho u ´konu, a pak jsou z´asahy do k´odu mnohem vˇetˇs´ı. Pˇresnˇe takov´e jsou rozd´ıly mezi verzemi 1.2 a 2.0 knihovny SDL (Simple DirectMedia Layer). Tato knihovna byla uvaˇzov´ana pro pˇrehr´av´an´ı doruˇcen´eho streamu a n´astroj ffplay.exe ji k tomuto u ´ˇcelu t´eˇz pouˇz´ıv´a. Knihovna SDL verze 2.0 je na tom s dokumentac´ı podobnˇe jako FFmpeg pro sv´e knihovny.
Po zhodnocen´ı v´ yˇse uveden´ ych d˚ uvod˚ u, bylo jako lepˇs´ı ˇreˇsen´ı vybr´ano pouˇzit´ı jiˇz hotov´ ych n´astroj˚ u, konkr´etnˇe pak ffmpeg.exe pro z´ısk´an´ı vstupu z kamery a mikrofonu a ffplay.exe pro pˇrehr´av´an´ı streamu na stranˇe klienta. Tato varianta umoˇzn ˇuje jednoduch´e vymˇenˇen´ı n´astroj˚ u v pˇr´ıpadˇe updatu bez z´asahu do zdrojov´eho k´odu vlastn´ı aplikace.
3.3.4
Moˇ znosti pˇ renosu streamu
Data, kter´a z´ısk´ame pomoc´ı FFmpegu, je nutn´e nˇejak´ ym zp˚ usobem doruˇcit klient˚ um a jeˇstˇe je zaˇsifrovat. Nab´ız´ı se nˇekolik moˇznost´ı popsan´ ych n´ıˇze.
ffserver.exe Jak jiˇz bylo zm´ınˇeno v´ yˇse, jedn´ım z n´astroj˚ u, kter´e FFmpeg nab´ız´ı, je i streamovac´ı server ffserver.exe. Streamovac´ı server slouˇz´ı k distribuci streamu na v´ıce klient˚ u, kteˇr´ı se k nˇemu pˇripoj´ı. ffserver.exe um´ı z jednoho vstupu vytvoˇrit v´ıce r˚ uzn´ ych v´ ystup˚ u. To znamen´a, ˇze pokud se na nˇej poˇsle napˇr. MPEG soubor, tak ffserver.exe ho m˚ uˇze pˇrekonvertovat a klient˚ um nab´ızet jako tˇreba AVI a MOV soubory najednou. ffserver.c obsahuje platformˇe (Linux) z´avisl´e komponenty a nen´ı ho proto moˇzn´e pˇreloˇzit a pouˇz´ıvat pod syst´emem Windows. Nav´ıc se i uv´ad´ı, ˇze je zastaral´ y, a nedoporuˇcuje se ho jiˇz jako streamovac´ı server pouˇz´ıvat.
31
Anal´yza probl´emu
Stream
Streamovac´ı servery Dalˇs´ı alternativu pro distribuci streamu pˇredstavuj´ı jin´e streamovac´ı servery. Pro naˇse u ´ˇcely pˇripadaj´ı v u ´vahu ty, kter´e je moˇzn´e pouˇz´ıvat zdarma nebo patˇr´ı do kategorie opensource. Mezi takov´e patˇr´ı Darwin Streaming Server (d´ale Darwin) a C++ RTMP Server (d´ale crtmp). Oba servery maj´ı vcelku jednoduch´e ovl´ad´an´ı a Darwin disponuje i webov´ ym rozhran´ım, kde je moˇzn´e server nastavovat a ovl´adat.
Na Darwinu nen´ı probl´em streamovat soubory, kter´e jsou uloˇzen´e na disku, ale zd´a se b´ yt probl´em streamov´an´ı live streamu. To naopak nen´ı probl´em u druh´eho serveru - crtmp. Tento server pouˇz´ıv´a prim´arnˇe pro pˇrenos streamu protokol RTMP (Real Time Messaging Protocol), ale podporuje i UDP, TCP nebo HTTP. Server crtmp podporuje ˇsifrov´an´ı streamu v podobˇe implementovan´ ych protokol˚ u RTMPE (vnitˇrn´ı bezpeˇcnostn´ı mechanismus) nebo RTMPS (pouˇz´ıv´a SSL/TLS). Aby vˇsak tyto protokoly fungovaly, je zapotˇreb´ı certifik´at vydan´ y certifikaˇcn´ı autoritou. Nestaˇc´ı pouˇz´ıt self signed certifik´at.
Jako moˇzn´e ˇreˇsen´ı je tedy pouˇzit´ı streamovac´ıch server˚ u tˇret´ıch stran zavrˇzeno.
ffmpeg.exe FFmpeg um´ı nejen z´ıskat data z pˇripojen´e kamery a mikrofonu, ale dok´aˇze je i pos´ılat (ukl´adat) na c´ılovou adresu, kter´a je ve form´atu [protokol]://[ip adresa]:[port] (z´avis´ı na typu protokolu). Nen´ı to dlouho, co byla do FFmpegu pˇrid´ana dalˇs´ı funkcionalita v podobˇe v´ıcen´asobn´eho v´ ystupu. Bud’ je moˇzn´e jeden pˇrek´odovan´ y vstup poslat na v´ıce v´ ystup˚ u (viz obr. 3.12) nebo je moˇzn´e jeden vstup k´odovat r˚ uzn´ ymi zp˚ usoby pro kaˇzd´ y v´ ystup zvl´aˇst’ (viz obr. 3.13), coˇz je v´ ypoˇcetnˇe n´aroˇcnˇejˇs´ı [35].
FFmpeg sice um´ı pos´ılat vstup na v´ıce klient˚ u, ale pro naˇse u ´ˇcely, alespoˇ n co se t´ yˇce rozes´ıl´an´ı streamu klient˚ um, je tento zp˚ usob nedostaˇcuj´ıc´ı. Je to proto, ˇze se bude pouˇz´ıvat vytvoˇren´ y n´astroj (ffmpeg.exe), kde se jiˇz pˇri jeho spuˇstˇen´ı mus´ı zadat, co se kam bude pos´ılat, a nelze pak za bˇehu pˇrid´avat nov´e klienty. Jednou moˇznost´ı by bylo pouˇstˇet pˇr´ıkaz pro ffmpeg.exe pokaˇzd´e, kdyˇz se pˇri(od)poj´ı nˇejak´ y klient. T´ım by se ale naruˇsila nez´avislost jednotliv´ ych klient˚ u, kteˇr´ı by na obdrˇzen´em streamu mohli zaznamen´avat mal´e v´ ypadky pokaˇzd´e, kdyˇz se nˇekdo jin´ y odpoj´ı nebo pˇripoj´ı.
32
Anal´yza probl´emu
Stream
Obr. 3.12: Kop´ırov´an´ı jednoho vstupu na v´ıce v´ ystup˚ u u FFmpegu [35].
Obr. 3.13: K´odov´an´ı vstupu pro kaˇzd´ y v´ ystup zvl´aˇst’ u FFmpegu [35]. Popsan´e funkcionality proto vyuˇzijeme t´ım zp˚ usobem, ˇze sice nebudeme pos´ılat stream pomoc´ı pˇr´ıkazu pˇr´ımo klient˚ um, ale z´ıskan´ y vstup z kamery (mikrofonu) se bude pos´ılat na lok´aln´ı porty, kde bude poslouchat server. Z tˇechto port˚ u bude stream odchyt´av´an a pˇrepos´ıl´an na vˇsechny klienty, kteˇr´ı si o stream zaˇza´dali. V pˇr´ıpadˇe, ˇze ˇza´dn´ y klient neodeb´ır´a stream, nebude se ani z´ısk´avat vstup z kamery (mikrofonu), a t´ım se uˇsetˇr´ı v´ ypoˇcetn´ı ˇcas procesoru. Vzhledem k tomu, ˇze server bude poskytovat 2 streamy (audio+video, audio), budou na serveru existovat 2 lok´aln´ı porty, na kter´ ych bude server poslouchat a doruˇcen´ y stream pˇrepos´ılat. Pomoc´ı pˇr´ıkazu pro ffmpeg.exe pak budou vytvoˇreny 2 streamy, kde jeden bude obsahovat jak video tak audio a bude se pos´ılat na lok´aln´ı port xxxxx, a druh´ y bude obsahovat pouze audio a bude se t´eˇz pos´ılat na (jin´ y) lok´aln´ı port yyyyy. Jak vypad´a pˇr´ıkaz pro z´ısk´an´ı streamu bude pops´ano v kap. 4.3.1. Pro pˇrenos streamu byl vybr´an protokol UDP, jak jiˇz bylo pops´ano v´ yˇse.
33
Anal´yza probl´emu
Stream
ˇ Sifrov´ an´ı Jako jeden ze z´akladn´ıch poˇzadavk˚ u na aplikaci je ˇsifrov´an´ı pˇrenosu kv˚ uli bezpeˇcnosti. D´ale se budeme zab´ yvat vytvoˇren´ım ˇsifrovan´eho streamu, kter´ y budeme z´ısk´avat v´ yˇse uveden´ ym zp˚ usobem. FFmpeg podporuje mnoho s´ıt’ov´ ych protokol˚ u, mimo jin´e i ty, co umoˇzn ˇuj´ı ˇsifrov´an´ı pˇrenosu. Pomoc´ı protokolu SRTP (Secure Real-time Transport Protocol) m˚ uˇzeme pos´ılat stream napˇr. takto:
ffmpeg -re -i "output.mpg"-vcodec libx264 -f flv srtp://192.168.0.100:7777?srtp_out_suite=AES_CM_128_HMAC_SHA1_80& srtp_out_params=NmcxMmQ2ZjVnYjEyNmRmMTV2czY1YWR2ZjFhc2Rm (3.1) ystupn´ıho ˇsifrov´an´ı a srtp out params je ˇsifrovac´ı Kde srtp out suite urˇcuje typ v´ blok (k´odov´an´ı base64), kde prvn´ıch 16 byt˚ u se pouˇzije jako kl´ıˇc a zbyl´ ych 14 jako s˚ ul. Na stranˇe klienta se pak pouˇzije stejn´ y ˇsifrovac´ı blok i typ ˇsifrov´an´ı. Na obr´azku 3.14 (a) je uk´azka streamu, kter´ y byl pˇrenesen pomoc´ı protokolu SRTP a deˇsifrov´an stejn´ ym kl´ıˇcem jako je v uk´azce 3.1. Na obr´azku 3.14 (b) je pak z´aznam z toho sam´eho streamu, tentokr´at ale pˇrij´ıman´eho protokolem UDP, kter´ y ˇz´adn´e ˇsifrov´an´ı nepodporuje.
(a) SRTP protokol
(b) UDP protokol
Obr. 3.14: Pˇrehr´av´an´ı ˇsifrovan´eho streamu pomoc´ı SRTP a UDP protokol˚ u. 34
Anal´yza probl´emu
Stream
Z obr´azk˚ u je jasnˇe patrn´e, ˇze protokol SRTP, kter´ y je v FFmpegu implementov´an, ˇza´dn´e ˇsifrov´an´ı neprov´ad´ı. Kdyby ano, zaˇsifrovan´ y stream nep˚ ujde spustit pomoc´ı protokolu UDP, pˇr´ıpadnˇe nebude doruˇcen´ y stream ˇciteln´ y. Parametry byly nastaveny podle dokumentace. Je moˇzn´e, ˇze se tato chyba vyskytuje pouze na nˇekter´ ych buildech a do budoucna bude opravena. Pro ˇsifrov´an´ı bylo tedy zvoleno jin´e ˇreˇsen´ı, kter´e vyuˇz´ıv´a fakt, ˇze stream, pˇred odesl´an´ım klientovi proch´az´ı pˇres server.
Stream, kter´ y je pomoc´ı ffmpeg.exe pos´ıl´an na server, je moˇzn´e jeˇstˇe pˇred jeho odesl´an´ım klientovi zaˇsifrovat. K tomu se pouˇzije symetrick´a ˇsifra AES (viz kap. 3.2.3), kde ˇsifrovac´ı kl´ıˇc je vygenerov´an na serveru, a pomoc´ı ˇsifrovan´eho spojen´ı, kter´e je tou dobou jiˇz nav´azan´e, doruˇcen klientovi. Kl´ıˇc je klientovi doruˇcen jeˇstˇe dˇr´ıv, neˇz se zaˇcne pos´ılat stream, aby klient mohl bez probl´em˚ u stream deˇsifrovat. ˇ Pro kaˇzd´ y stream bude existovat jeden ˇsifrovac´ı kl´ıˇc. Sifrovac´ ı kl´ıˇce budou m´ıt omezenou ˇzivotnost v tom smyslu, ˇze pˇri kaˇzd´em zapnut´ı pˇr´ıkazu pro odeb´ır´an´ı streamu budou kl´ıˇce vygenerov´any znovu. To znamen´a, ˇze pokud bude stream odeb´ırat jeden klient, kter´ y se po nˇejak´e dobˇe odhl´as´ı, bude pro ˇsifrov´an´ı streamu pouˇz´ıvat jin´e kl´ıˇce, neˇz ten klient, kter´ y se pˇrihl´as´ı napˇr. aˇz 5 minut po nˇem. V pˇr´ıpadˇe, ˇze je najednou pˇrihl´aˇseno v´ıce klient˚ u, budou vˇsichni pouˇz´ıvat stejn´e ˇsifrovac´ı kl´ıˇce pro ˇsifrov´an´ı streamu (ale kaˇzd´ y klient m´a jin´ y kl´ıˇc pro obousmˇernou komunikaci se serverem). Jak se ˇsifrovac´ı kl´ıˇc pro stream dostane ke klientovi je pops´ano v kap. 4.2.2.
3.3.5
Pˇ rehr´ av´ an´ı streamu
Pro pˇrehr´av´an´ı streamu na stranˇe klienta byl vybr´an n´astroj ffplay.exe od FFmpegu. Tento n´astroj zastupuje multimedi´aln´ı pˇrehr´avaˇc a je schopn´ y pˇrehr´avat stream jak ze souboru, tak ze s´ıtˇe. Vzhledem k tomu, ˇze stream, kter´ y bude klientovi pos´ıl´an, bude ˇsifrovan´ y, nen´ı moˇzn´e ho rovnou smˇerovat do pˇrehr´avaˇce. Na stranˇe klienta se mus´ı vytvoˇrit stejn´ y mechanismus na ˇsifrov´an´ı streamu jako na serveru. To znamen´a, ˇze klient bude m´ıt vyhrazen´ y port, na kter´em bude pˇrij´ımat stream. Tento stream projde deˇsifrovac´ım procesem, a aˇz pak bude smˇerov´an do pˇrehr´avaˇce, kter´ y ho bude zobrazovat.
35
Anal´yza probl´emu
3.3.6
Stream
Detekce zmˇ en
Server mus´ı b´ yt schopn´ y analyzovat proch´azej´ıc´ı stream a urˇcit, zda nedoˇslo ke zmˇenˇe obrazu (pohyb) nebo zvuku (zv´ yˇsen´ı hlasitosti). D´ıky v´ yˇse popsan´emu zp˚ usobu pos´ıl´an´ı streamu to je moˇzn´e. Algoritmy na detekci zmˇeny obrazu b´ yvaj´ı zaloˇzen´e na porovn´av´an´ı dvou po sobˇe jdouc´ıch r´amc˚ u. Neporovn´avaj´ı je pixel po pixelu, ale vˇzdy po vˇetˇs´ıch ˇca´stech, a na z´akladˇe v´ ysledku se pak rozhoduj´ı, zda doˇslo ke zmˇenˇe. FFmpeg m´a zakomponov´anu jak detekci hlasitosti, tak detekci pohybu.
Detekce zmˇeny hlasitosti prob´ıh´a n´asledovnˇe: 1. Na zaˇca´tku sn´ım´an´ı se do logu zaznamen´a silence start. 2. Pokud se zv´ yˇs´ı hladina zvuku nad mez danou pomoc´ı dB, tak se zaznamen´a silence end a doba trv´an´ı ticha. 3. Po ubˇehnut´ı urˇcit´e doby se opˇet zap´ıˇse silence start a zaˇcne se mˇeˇrit ˇcas trv´an´ı ticha. N´as budou zaj´ımat ty u ´seky logu, kde se vyskytuje silence end, protoˇze to znaˇc´ı, ˇze hladina zvuku se zv´ yˇsila nad n´ami danou tolerovanou mez. Pokud je zapnut´e sledov´an´ı zmˇen sc´eny, pak se do logu zapisuj´ı ˇr´adky obsahuj´ıc´ı informaci o tom, jak moc se dan´ y r´amec liˇs´ı od toho pˇredchoz´ıho: scene:0.750000. Hodnota 0.750000 ud´av´a, ˇze aktu´aln´ı r´amec se od toho pˇredch´azej´ıc´ıho liˇs´ı o 75% (pˇred kamerou tedy doˇslo k vˇetˇs´ımu pohybu).
D´ıky moˇznostem, kter´e FFmpeg nab´ız´ı, dok´aˇzeme jednoduch´ ym zp˚ usobem z´ıskat informaci o tom, zda se zmˇenila sc´ena nebo hladina zvuku. Veˇsker´e tyto informace jsou logov´any do konzole, kde ffmpeg.exe bˇeˇz´ı. Naˇstˇest´ı pro n´as, vˇsechny v´ ypisy prov´ad´ı FFmpeg na standardn´ı chybov´ y v´ ystup, a tak po pˇresmˇerov´an´ı toho v´ ystupu do souboru se lehce dostaneme k obsaˇzen´ ym informac´ım. Probl´em zde ale pˇredstavuje to, ˇze velikost souboru s logem bude pˇri nepˇretrˇzit´em provozu serveru neust´ale nar˚ ustat. FFmpeg nepodporuje nastaven´ı pevn´e d´elky logovac´ıho souboru, kde by se z´aznamy po dosaˇzen´ı urˇcit´e velikosti souboru opˇet zapisovaly od zaˇc´atku souboru. Z tohoto d˚ uvodu musela b´ yt zvolena jin´a technika pro z´ısk´an´ı dat, neˇz jen pouh´e ˇcten´ı logovac´ıho souboru.
Pro z´ısk´an´ı informac´ı z logu je moˇzn´e pouˇz´ıt roury (d´ale pipe). Logovac´ı soubor tedy v˚ ubec nebude vytv´aˇren a v´ ystup ze spuˇstˇen´eho ffmpeg.exe bude pomoc´ı pipe 36
Anal´yza probl´emu
Spr´ava serveru
pˇresmˇerov´an ke zpracov´an´ı rovnou na server. Podrobnˇejˇs´ı informace jsou obsaˇzen´e v implementaci v kap. 4.3.3.
3.4
Spr´ ava serveru
Pro spr´avu serveru, streamu a pˇrid´av´an´ı nov´ ych uˇzivatel˚ u bylo, na stranˇe serveru, zvoleno webov´e rozhran´ı. Tato varianta je pro bˇeˇzn´e uˇzivatele mnohem pˇr´ıjemnˇejˇs´ı neˇz bˇeˇzn´a pˇr´ıkazov´a ˇra´dka, ze kter´e je server spouˇstˇen. Toto webov´e rozhran´ı je pˇr´ıstupn´e pˇres bˇeˇzn´ y webov´ y prohl´ıˇzeˇc po zad´an´ı IP adresy serveru a portu 9443. Vzhledem k tomu, ˇze se mezi prohl´ıˇzeˇcem a serverem budou pˇren´aˇset citliv´e informace v podobˇe uˇzivatelsk´ ych u ´daj˚ u, je pro komunikaci zvolen protokol HTTPS (viz kap. 3.2.1). Pˇr´ıstupnost webov´eho rozhran´ı mus´ı b´ yt omezena, aby se nemohl kdokoliv registrovat, a pak i sledovat stream. Vstup do administrace je tedy omezen zad´an´ım hesla a uˇzivatelsk´eho jm´ena.
3.4.1
Pˇ rid´ an´ı nov´ ych uˇ zivatel˚ u
Hlavn´ım d˚ uvodem vzniku webov´eho rozhran´ı bylo pˇrid´av´an´ı nov´ ych klient˚ u. Je to kv˚ uli tomu, ˇze protokol SRP (viz kap. 3.2.2) zajiˇst’uje pouze bezpeˇcnou autentizaci, ale uˇz neˇreˇs´ı dopravu citliv´ ych u ´daj˚ u od klienta na server bˇehem registrace, kter´a je pˇred samotnou autentizac´ı nutn´a. Po pˇrihl´aˇsen´ı do rozhran´ı bude tedy moˇzn´e pˇridat nov´eho uˇzivatele zad´an´ım jeho uˇzivatelsk´eho jm´ena a hesla. Tyto u ´daje jsou pak uloˇzeny na serveru zp˚ usobem, kter´ y byl diskutov´an v´ yˇse (viz 3.2.2). Uloˇzen´e u ´daje pak poslouˇz´ı k pˇrihlaˇsov´an´ı klient˚ u na server.
Pˇri zad´av´an´ı nov´ ych u ´daj˚ u bude nutn´e ohl´ıdat duplicitu uˇzivatelsk´ ych jmen a tak´e jejich d´elku. Nen´ı moˇzn´e, aby uˇzivatelsk´ ym jm´enem nebo heslem byl pr´azdn´ y ˇretˇezec nebo naopak ˇretˇezec pˇresahuj´ıc´ı 300 znak˚ u. Stejnˇe tak je nutn´e omezit znaky, kter´e je moˇzn´e pro uˇzivatelsk´e u ´daje pouˇz´ıt. Ne vˇsechny znaky se pˇrenesou tak, jak je uˇzivatel zad´a, u nˇekter´ ych doch´az´ı k pˇreveden´ı do hexadecim´aln´ıho k´odu (napˇr. znak ! se pˇrenese jako %21 ). Tomu je nutn´e zabr´anit, uˇzivatel by se pak nikdy nemohl pod registrovan´ ymi u ´daji pˇrihl´asit, protoˇze by zad´aval u ´plnˇe jin´e u ´daje, neˇz jak´e jsou ve skuteˇcnosti uloˇzeny.
37
Anal´yza probl´emu
3.4.2
Spr´ava serveru
Nastaven´ı serveru
Webov´e rozhran´ı se d´a vyuˇz´ıt, kromˇe registrace nov´ ych uˇzivatel˚ u, i k z´akladn´ı spr´avˇe serveru, kterou m˚ uˇze prov´adˇet uˇzivatel. Mezi tyto u ´kony patˇr´ı zmˇena port˚ u, na kter´ ych bˇeˇz´ı jednotliv´e ˇc´asti serveru, zmˇena hlavn´ıho hesla do rozhran´ı a omezen´ı pˇr´ıstupu do rozhran´ı. U port˚ u je nutn´e ohl´ıdat, aby se jejich hodnota nach´azela mezi ˇc´ısly 1025 a 65535 a aby nebyly duplicitn´ı.
Zmˇena hesla do administr´atorsk´e ˇca´sti serveru m´a stejn´a pravidla jako vˇetˇsina takov´ ych zmˇen stejn´eho typu. Pro zmˇenu hesla je nutn´e zadat i to star´e, aby bylo ovˇeˇreno, ˇze ho uˇzivatel zn´a. D´elku hesla je opˇet nutn´e omezit, aby uˇzivatel nezad´aval pˇr´ıliˇs kr´atk´a/dlouh´a hesla. Omezen´ı se t´ yk´a i skupiny pouˇzit´ ych znak˚ u, kter´a je stejn´a jako v´ yˇse (viz kap. 3.4.1). Nov´e heslo se pak uloˇz´ı jen v pˇr´ıpadˇe, ˇze to star´e se bude shodovat s aktu´alnˇe uloˇzen´ ym. Pˇr´ıstupov´e u ´daje do administr´atorsk´e ˇc´asti webov´eho rozhran´ı jsou na server uloˇzeny jako hashe. ˇ ım m´enˇe bude webov´e rozhran´ı pˇr´ıstupn´e, t´ım menˇs´ı je ˇsance, ˇze se do nˇej C´ u ´toˇcn´ık dostane. Pˇr´ıstup do rozhran´ı je moˇzn´e omezit tak, ˇze budou pˇrij´ım´ani pouze webov´ı klienti ze stejn´e pods´ıtˇe, ve kter´e je s´am server. Toho lze dos´ahnout pomoc´ı masky pods´ıtˇe.
Maska s´ıtˇ e S´ıt’ov´a maska se pouˇz´ıv´a pro urˇcen´ı adresy s´ıtˇe (bit˚ u, kter´e j´ı pˇr´ısluˇs´ı), kter´a je souˇc´ast´ı IP adresy [9]. Jedn´a se o ˇctyˇrbytov´e ˇc´ıslo, kter´e m´a (ve dvojkov´e soustavˇe) zleva v m´ıstech s´ıt’ov´e adresy sam´e 1, jinak 0 [9]. IP adresa klienta do pods´ıtˇe patˇr´ı, pokud logick´ y souˇcin masky pods´ıtˇe a IP adresy klienta je roven IP adrese pods´ıtˇe. V uk´azce 3.2 je uveden pˇr´ıklad, kde se podle IP adresy serveru nejdˇr´ıve urˇc´ı IP adresa pods´ıtˇe a n´aslednˇe se podle n´ı posoud´ı, zda IP adresa klienta je vyhovuj´ıc´ı.
maska s´ ıtˇ e: 255.255.254.010 = 1111 1111.1111 1111.1111 1110.0000 00002 IP serveru: 147.228.187.7210 = 1001 0011.1110 0100.1011 1011.0100 10002 IP klienta: 147.228.67.10910 = 1001 0011.1110 0100.0100 0011.0110 11012 Provedeme logick´ y souˇ cin masky a IP adresy serveru a z´ ısk´ ame IP ad38
Anal´yza probl´emu
Spr´ava serveru
resu pods´ ıtˇ e:
∧
11111111.11111111.11111110.00000000 10010011.11100100.10111011.01001000 10010011.11100100.10111010.00000000 = 147.228.186.010
Druh´ y logick´ y souˇ cin provedeme s maskou a IP adresou klienta:
∧
11111111.11111111.11111110.00000000 10010011.11100100.01000011.01101101 10010011.11100100.01000010.00000000 = 147.228.66.010
Nyn´ ı porovn´ ame prvn´ ıch 23 bit˚ u (poˇ cet v´ yskyt˚ u 1 v masce zleva) (oddˇ eleny |) obou v´ ysledk˚ u, kter´ e n´ as zaj´ ımaj´ ı: 10010011.11100100.1011101|0.00000000 10010011.11100100.0100001|0.00000000 Jak je vidˇ et, IP adresy pods´ ıt´ ı se liˇ sı ´, a t´ ım p´ adem IP adresa klienta nepatˇ r´ ı do dan´ e pods´ ıtˇ e. (3.2) Pokud bude IP adresa klienta po odmaskov´an´ı patˇrit do stejn´e s´ıtˇe jako IP adresa serveru pak se klient bude moci na server pˇrihl´asit. Tuto moˇznost je lepˇs´ı nechat volitelnou, aby si uˇzivatel mohl s´am vybrat, zda se do webov´eho rozhran´ı d´a dostat pouze ze stejn´e pods´ıtˇe ˇci odkudkoliv.
Zmˇena nastaven´ ych port˚ u se projev´ı aˇz po restartov´an´ı serveru, nen´ı moˇzn´e zmˇenit porty za bˇehu. Zmˇenu hesla administrace a nastaven´ı pods´ıt´ı je moˇzn´e aplikovat okamˇzitˇe. V pˇr´ıpadˇe, ˇze uˇzivatel bude pˇristupovat napˇr. z IP adresy jako ve v´ yˇse zm´ınˇen´em pˇr´ıkladu a zak´aˇze pˇr´ıstup z jin´e pods´ıtˇe, pak se mu po uloˇzen´ı zmˇen stane, ˇze se jiˇz do webov´eho rozhran´ı nepˇrihl´as´ı.
39
Anal´yza probl´emu
3.4.3
Spr´ava serveru
Nastaven´ı streamu
Dalˇs´ı funkcionalitu, kterou m˚ uˇze webov´e rozhran´ı nab´ızet, je nastaven´ı pˇren´aˇsen´eho streamu a nastaven´ı parametr˚ u pro detekci zmˇen. Toto nastaven´ı je pro vˇsechny uˇzivatele, kteˇr´ı budou pˇrij´ımat stream, stejn´e. V pˇr´ıpadˇe nastaven´ı pˇren´aˇsen´eho streamu se uˇzivateli m˚ uˇze zpˇr´ıstupnit nastaven´ı kvality jako napˇr. rozliˇsen´ı, poˇcet zvukov´ ych kan´al˚ u (mono, stereo), kvalita videa nebo audio frekvence. Vzhledem k tomu, ˇze na tˇechto hodnot´ach z´avis´ı i u ´spˇeˇsn´e spuˇstˇen´ı pˇr´ıkazu pomoc´ı ffmpeg.exe, nebude si je moci uˇzivatel zad´avat libovolnˇe. M´ısto toho bude m´ıt na v´ ybˇer z nˇekolika pˇrednastaven´ ych hodnot, napˇr. v podobˇe v´ ybˇerov´eho pole (select box ). Dalˇs´ım d˚ usledkem, kter´ y z toho plyne je, ˇze zmˇena nastaven´ ych hodnot se zmˇen´ı aˇz po tom, co dojde k znovu spuˇstˇen´ı pˇr´ıkazu pomoc´ı ffmpeg.exe (tzn. po vypnut´ı vˇsech odeb´ıran´ ych stream˚ u).
Pos´ıl´an´ı zpr´av o zmˇen´ach hlasitosti (zmˇeny obrazu) klient˚ um se ˇr´ıd´ı na z´akladˇe zadan´ ych mez´ı. Pokud jsou tyto meze pˇrekroˇceny, je posl´ana zpr´ava o zmˇenˇe. Ve webov´em rozhran´ı je tedy moˇzn´e zpˇr´ıstupnit nastaven´ı tˇechto mez´ı. Jedna mez se t´ yk´a hlasitosti zvuku a je ud´av´ana v dB. Krajn´ı hodnoty budou nastaveny na 0dB (pr´ah slyˇsitelnosti) a 120dB (start tryskov´eho letadla [18]). V´ ychoz´ı hodnota pak bude nastavena na 40dB, coˇz odpov´ıd´a tich´e knihovnˇe [18] (Z´aleˇz´ı i na nastaven´ı citlivosti mikrofonu).
Druhou nastavitelnou mez´ı je m´ıra zmˇeny sc´eny vlivem pohybu. Tato hodnota je ud´av´ana v procentech a jej´ı hranice tak jsou od 0% (detekce pohybu pˇri zmˇenˇe 0% sc´eny) do 100% (detekce pohybu pˇri zmˇenˇe 100% sc´eny). V´ ychoz´ı hodnota, kter´a staˇc´ı pro detekov´an´ı zmˇeny, je pak nastavena na 10%.
Zmˇena meze pro hladinu zvuku je vnitˇrnˇe vyuˇz´ıv´ana pˇr´ımo ffmpeg.exe. Pro uˇzivatele to znamen´a, ˇze zmˇeny meze se projev´ı aˇz po tom, co vˇsichni pˇrihl´aˇsen´ı klienti vypnou bˇeˇz´ıc´ı streamy. Pˇri dalˇs´ım spuˇstˇen´ı streamu dojde k nov´emu zapnut´ı ffmpeg.exe s jiˇz novˇe nastavenou hodnotou. Toto vˇsak neplat´ı pro mez detekce pohybu, jelikoˇz log z ffmpeg.exe obsahuje pouze informaci o tom, jak moc se sc´ena zmˇenila (viz kap. 3.3.6). T´ım p´adem se o pos´ıl´an´ı zpr´av o zmˇenˇe sc´eny mus´ı rozhodnout aˇz vnitˇrnˇe na serveru a ten m´a k dispozici vˇzdy aktu´aln´ı hodnotu, s kterou z´ıskan´a data porovn´av´a. Uloˇzen´ı nov´e meze pro detekci pohybu se tedy projev´ı hned i bez vyp´ın´an´ı stream˚ u.
40
4 Program´atorsk´a pˇr´ıruˇcka V t´eto kapitole se budeme vˇenovat implementaci jednotliv´ ych ˇca´st´ı serveru a klienta.
4.1
Architektura aplikace
Jak pro server, tak pro klienta, bylo zvoleno objektov´e programov´an´ı pomoc´ı tˇr´ıd a programovac´ıho jazyka C++. Tˇr´ıdy, kter´e prov´adˇej´ı urˇcit´ y typ ˇcinnosti, jsou sdruˇzov´any do soubor˚ u. Aplikace mus´ı b´ yt platformnˇe nez´avisl´a1 . Za t´ımto u ´ˇcelem byl v obou ˇca´stech vytvoˇren soubor platform.h, kter´ y obsahuje mapov´an´ı funkc´ı, kter´e jsou pro oba operaˇcn´ı syst´emy rozd´ıln´e. Mimo to se v k´odu objevuj´ı i logick´e celky ohraniˇcen´e pomoc´ı direktiv (#ifdef, #endif ), kter´e jsou pro oba syst´emy odliˇsn´e. Dalˇs´ı soubor, kter´ y maj´ı obˇe ˇc´asti aplikace, je config.h, kter´ y obsahuje veˇsker´e glob´aln´ı promˇenn´e.
Jak server, tak klient, obsluhuj´ı v´ıce bˇeˇz´ıc´ıch vl´aken najednou. Za u ´ˇcelem usnadnˇen´ı a sjednocen´ı pr´ace s vl´akny pod obˇema syst´emy bylo pouˇzito rozhran´ı pro psan´ı v´ıcevl´aknov´ ych program˚ u pro syst´emy Windows - POSIX Threads for Win32 (pthreads) [22]. D´ıky tomuto rozhran´ı je moˇzn´e pracovat s vl´akny stejnˇe pod obˇema syst´emy, bez nutnosti pouˇzit´ı direktiv #ifdef, #endif atd.
4.1.1
Server
Funkcionalita serveru byla rozdˇelena do nˇekolika logick´ ych celk˚ u (client, ffmpeg, log, multicast, udp, web interface, hlavn´ı). Ten hlavn´ı obsahuje vytvoˇren´ı serveru, sledov´an´ı vstupu z kl´avesnice, konfiguraˇcn´ı soubor a soubor s funkc´ı main. Celek client obsahuje veˇskerou logiku, co se t´ yˇce pˇrihl´aˇsen´ı, komunikace a obsluhy klienta. Jsou zde i n´ıˇze popsan´e tˇr´ıdy pro pr´aci se zpr´avami. D´ale je zde uloˇzen i zaˇsifrovan´ y soubor s registrovan´ ymi uˇzivateli.
1
Aplikace mus´ı b´ yt pˇreloˇzena pod syst´emy Windows i GNU/Linux
41
Program´atorsk´a pˇr´ıruˇcka
Architektura aplikace
ffmpeg obsahuje veˇskerou logiku, co se t´ yˇce pr´ace se streamem a detekce zmˇen. log obsahuje logovac´ı tˇr´ıdu, kter´a se pouˇz´ıv´a ve vˇsech ostatn´ıch tˇr´ıd´ach a umoˇzn ˇuje jednotn´ y z´apis logu do souboru. web interface obsahuje tˇr´ıdy, kter´e pracuj´ı s webov´ ym rozhran´ım, certifik´aty a textov´e soubory s nastaven´ım (serveru, FFmpegu, zmˇen).
Detailnˇejˇs´ı prov´azanost jednotliv´ ych tˇr´ıd je moˇzn´e vidˇet v UML diagramu tˇr´ıd na obr. 4.1. Tento diagram je zjednoduˇsen´ y, tedy neobsahuje u ´pln´e popisy tˇr´ıd v podobˇe atribut˚ u a metod. D´ale je zde, kv˚ uli pˇrehlednosti, vynech´ana vazba vˇsech tˇr´ıd na tˇr´ıdu Log, kterou vyuˇz´ıvaj´ı k logov´an´ı, a v´ ypis tˇr´ıd, kter´e se pouˇz´ıvaj´ı na zpracov´an´ı zpr´av, je zkr´acen pomoc´ı znaˇcky · · · .
Obr. 4.1: UML diagram tˇr´ıd pro server.
42
Program´atorsk´a pˇr´ıruˇcka
4.1.2
Architektura aplikace
Klient
Tˇr´ıdy v programu klienta byly rozdˇeleny stejn´ ym zp˚ usobem jako na serveru, podle funkˇcn´ıch celk˚ u. Ty jsou t´emˇeˇr shodn´e, nav´ıc se zde objevuje gui, kter´e obsahuje tˇr´ıdy pro pr´aci s grafick´ ym rozhran´ım, a m´ısto ffmpeg tu je ffplay, kde je soustˇredˇeno pˇrehr´av´an´ı streamu. UML diagram je zn´azornˇen na obr. 4.2, kde doˇslo ke stejn´emu zjednoduˇsen´ı, jako u diagramu tˇr´ıd serveru.
Obr. 4.2: UML diagram tˇr´ıd pro klienta.
43
Program´atorsk´a pˇr´ıruˇcka
4.2
Zabezpeˇcen´ı
Zabezpeˇ cen´ı
Implementace registrace nov´ ych klient˚ u bude pops´ana v kap. 4.4.1.
4.2.1
Pˇ rihl´ aˇ sen´ı
Pro pˇrihl´aˇsen´ı klient˚ u na server byl zvolen protokol SRP, kter´ y je pops´an v´ yˇse (viz kap. 3.2.2), a jehoˇz implementace byla pˇrevzata z [29] a n´aslednˇe nepatrnˇe upravena podle poˇzadavk˚ u aplikace. Tento protokol mus´ı b´ yt implementov´an na obou komunikuj´ıc´ıch stran´ach, jinak by pˇrihl´aˇsen´ı nebylo moˇzn´e. D´ale si pˇribl´ıˇz´ıme proces pˇrihl´aˇsen´ı na obou stran´ach.
Klient Po vyplnˇen´ı u ´daj˚ u do pˇrihlaˇsovac´ıho okna dojde nejdˇr´ıve k jejich zkontrolovan´ı, zda nejsou nˇejak´a pole pr´azdn´a nebo zadan´e hodnoty nejsou nesmysln´e. N´aslednˇe se provede pokus o nav´az´an´ı spojen´ı se serverem podle zadan´e IP a portu. Pokud se spojen´ı nav´aˇze, spust´ı se autentizaˇcn´ı proces se zadan´ ym uˇzivatelsk´ ym jm´enem a heslem. V´ ysledkem u ´spˇeˇsn´e autentizace je relaˇcn´ı kl´ıˇc, kter´ y bude d´ale pouˇzit (viz kap. 4.2.2), a zapnut´ı okna s pˇrehr´avaˇcem. V pˇr´ıpadˇe, ˇze se spojen´ı nenav´aˇze nebo jsou zad´any ˇspatn´e u ´daje, pˇrihlaˇsovac´ı okno se otevˇre znovu a vyp´ıˇse, jak´a nastala chyba.
Server U novˇe pˇr´ıchoz´ıho klienta se nejdˇr´ıve rozhodne, zda se jedn´a o norm´aln´ıho klienta nebo o webov´eho klienta. V pˇr´ıpadˇe norm´aln´ıho klienta server vytvoˇr´ı v nov´em vl´aknu instanci tˇr´ıdy Client, ve kter´em bude klient obsluhov´an. V tomto vl´aknu je nejdˇr´ıve spuˇstˇen autentizaˇcn´ı proces. Server si po spuˇstˇen´ı naˇcte vˇsechny registrovan´e uˇzivatele s jejich u ´daji (hash, s˚ ul, jm´eno) do pamˇeti. V tˇechto u ´daj´ıch pak hled´a uˇzivatelsk´e jm´eno, kter´e obdrˇz´ı od klienta, a s˚ ul a hash pak pouˇz´ıv´a v pr˚ ubˇehu autentizaˇcn´ıho procesu. Pokud proces skonˇc´ı ne´ uspˇechem, vl´akno je ukonˇceno. V pˇr´ıpadˇe u ´spˇechu je spuˇstˇen cyklus, ve kter´em se vyˇck´av´a na zpr´avy od klienta, a d´ale je vytvoˇreno vl´akno, kter´e bude klientovi zpr´avy pos´ılat. Stejnˇe jako u klienta, i zde vznikne relaˇcn´ı kl´ıˇc.
44
Program´atorsk´a pˇr´ıruˇcka
4.2.2
Zabezpeˇcen´ı
Z´ısk´ an´ı ˇ sifrovac´ıch kl´ıˇ c˚ u
V´ ysledkem u ´spˇeˇsn´eho autentizaˇcn´ıho procesu, u klienta i serveru, jsou relaˇcn´ı kl´ıˇce, s nimiˇz je moˇzn´e ˇsifrov´an´ı komunikace. My je vˇsak nepouˇzijeme k ˇsifrov´an´ı, ale pouze k vygenerov´an´ı nov´ ych ˇsifrovac´ıch kl´ıˇc˚ u pomoc´ı knihovny OpenSSL (viz [21]). Tato knihovna obsahuje funkci, kter´a generuje ˇsifrovac´ı kl´ıˇce ze zadan´eho z´akladu. Kl´ıˇce, generovan´e ze stejn´eho z´akladu, jsou pokaˇzd´e stejn´e, a to je i d˚ uvod, proˇc n´as nemus´ı tr´apit distribuce kl´ıˇce u symetrick´e ˇsifry AES (viz kap. 3.2.3). Na obou komunikuj´ıc´ıch stran´ach m´ame d´ıky u ´spˇeˇsn´emu autentizaˇcn´ımu procesu stejn´e relaˇcn´ı kl´ıˇce, kter´e mohou b´ yt pouˇzity jako z´aklady pro vygenerov´an´ı nov´ ych kl´ıˇc˚ u (256 bit˚ u).
Knihovna poskytuje pro AES dvˇe ˇsifrovac´ı metody, CBC a ECB. Kv˚ uli v´ yˇse diskutovan´ ym d˚ uvod˚ um (viz kap. 3.2.3) byla pouˇzita metoda CBC pro veˇsker´e ˇsifrov´an´ı pˇrenosu. Je d˚ uleˇzit´e zd˚ uraznit, ˇze kaˇzd´ y klient m´a jin´e ˇsifrovac´ı kl´ıˇce pro komunikaci se serverem, a stejnˇe tak jsou kl´ıˇce jin´e pˇri kaˇzd´em nov´em pˇrihl´aˇsen´ı. Kromˇe tˇechto kl´ıˇc˚ u existuj´ı jeˇstˇe dalˇs´ı dva kl´ıˇce, kter´e ale maj´ı vˇsichni klienti spoleˇcn´e, sd´ıl´ı je. Jedn´a se o kl´ıˇce urˇcen´e k ˇsifrov´an´ı videa a audia. Tyto kl´ıˇce vznikaj´ı vˇzdy aˇz v okamˇziku, kdyˇz je zapnut odbˇer streamu. Pokud si klient vyˇz´ad´a stream, jsou mu tyto kl´ıˇce posl´any pomoc´ı ˇsifrovan´eho spojen´ı, kter´e je jiˇz nav´azan´e. ˇ Zivotnost tˇechto kl´ıˇc˚ u se v´aˇze na odbˇer streamu. Kl´ıˇce se vytv´aˇr´ı nov´e vˇzdy, kdyˇz je spuˇstˇen pˇr´ıkaz na odbˇer streamu. Prakticky to znamen´a, ˇze pokud se pˇrihl´as´ı klient k odbˇeru streamu, jsou vygenerov´any nov´e kl´ıˇce. Kaˇzd´ y dalˇs´ı klient, kter´ y se pˇrihl´as´ı, dostane t´eˇz tyto kl´ıˇce. Pokud se vˇsichni odhl´as´ı, a n´aslednˇe se jeden znovu pˇrihl´as´ı k odbˇeru streamu, pak uˇz bude m´ıt kl´ıˇce nov´e.
4.2.3
Multicast
Pro vytvoˇren´ı mDNS sluˇzeb byla, s mal´ ymi u ´pravami, pouˇzita implementace podle [32], kde bylo nutn´e dopsat pos´ıl´an´ı odpovˇed´ı zpˇet klientovi. Tento program funguje tak, ˇze se nejdˇr´ıve do z´aznamu uloˇz´ı p´ar IP adresa-n´azev stroje, a pak se uˇz jen pˇrij´ımaj´ı poˇzadavky od klient˚ u. Pokud se n´azev stroje, obsaˇzen´ y ve zpr´avˇe od klienta, shoduje s t´ım, co je uloˇzen v z´aznamech, poˇsle se klientovi odpovˇed’, kter´a obsahuje IP poˇzadovan´eho stroje, jinak se nepos´ıl´a nic.
45
Program´atorsk´a pˇr´ıruˇcka
Zabezpeˇcen´ı
Implementace je naps´ana v programovac´ım jazyce C, je pˇreloˇziteln´a pod syst´emy Windows i GNU/Linux a byla pouˇzita jako pˇreloˇzen´ y program, kter´ y je spouˇstˇen jako extern´ı proces z programu server. V tomto programu je naprogramov´ana nekoneˇcn´a smyˇcka, kter´a ˇcte vstupy z kl´avesnice, a pokud se zad´a p´ısmeno q, pak je program ukonˇcen. V pˇr´ıpadˇe, ˇze by tento zp˚ usob z nˇejak´eho d˚ uvodu nefungoval, pak je jeˇstˇe implementov´an pˇr´ıkaz kill, kter´ y tento extern´ı proces vyhled´a mezi spuˇstˇen´ ymi procesy a ukonˇc´ı ho.
mDNS funguje pouze, pokud jsou server i klient ve stejn´e pods´ıti. Jinak je nutn´e pouˇz´ıt IP adresu serveru pro pˇripojen´ı z klienta na server.
4.2.4
Komunikace
Jak uˇz bylo zm´ınˇeno v´ yˇse (viz kap. 3.2.3), pro komunikaci mezi serverem a klientem byl pouˇzit protokol TCP a pro pos´ıl´an´ı streamu pak protokol UDP. Nyn´ı se budeme vˇenovat obousmˇern´e komunikace klient-server.
Poˇzadavky, kter´e m´a klient na server (ale i opaˇcnˇe, server m˚ uˇze cht´ıt informovat klienta o zmˇenˇe) jsou ˇreˇseny pomoc´ı zas´ıl´an´ı zpr´av ve form´atu ###type#state#data, kde type je typ zpr´avy (viz tabulka 4.1), state indikuje u ´spˇeˇsnost proveden´ı poˇzadavku (0 - selh´an´ı, 1 - u ´spˇech) a data obsahuje dodateˇcn´a data, kter´a je tˇreba pˇr´ıpadnˇe poslat (pouˇz´ıv´a se pro pˇrenos ˇsifrovac´ıho kl´ıˇce streamu). Pro kaˇzd´ y typ existuje samostatn´a tˇr´ıda, kter´a dan´ yu ´kol prov´ad´ı. Vˇsechny tyto tˇr´ıdy dˇed´ı od jedn´e spoleˇcn´e a pˇrekr´ yvaj´ı funkci pro zpracov´an´ı zpr´avy.
Vˇsechny zpr´avy jsou pˇred sv´ ym odesl´an´ım ˇsifrov´any pomoc´ı AES, kde d´elka bloku je 16 byt˚ u. Moˇzn´e d´elky zpr´av po zaˇsifrov´an´ı tedy odpov´ıdaj´ı n´asobk˚ um 16. Od klienta na server se nikdy nepos´ıl´a zpr´ava delˇs´ı neˇz 16 byt˚ u. Typy zpr´av a jejich v´ yznam je pops´an v tabulce 4.1. Pokud klient poˇsle zpr´avu na server, tak ten zachov´a typ zpr´avy a mˇen´ı pouze pole state a pˇr´ıpadnˇe data.
46
Program´atorsk´a pˇr´ıruˇcka #
N´azev (typ)
0
VIDEO
1
AUDIO FRAME CHANGE SUBSCRIBE SOUND CHANGE SUBSCRIBE
2
3
Zabezpeˇcen´ı
Popis funkce Klient poˇsle v okamˇziku, kdy si chce nechat zaˇc´ıt pos´ılat video stream. V ˇca´sti pro data pos´ıl´a sv˚ uj UDP port, kde bude poslouchat. Server naopak odpov´ıd´a se sv´ ym portem, odkud bude data pos´ılat. Nyn´ı je moˇzn´e pos´ılat stream klientovi, kter´ y je uloˇzen v seznamu odbˇeratel˚ u. To sam´e jako VIDEO, ale pro audio. Klient chce dost´avat zpr´avy o zmˇen´ach obrazu. Vˇzdy, kdyˇz se zmˇen´ı obraz, bude mu posl´ana zpr´ava. Stejn´e jako FRAME CHANGE SUBSCRIBE, ale pro zmˇenu hlasitosti.
4
CANCEL VIDEO
Tato zpr´ava je posl´ana, pokud vyprˇs´ı ˇcas urˇcen´ y k doˇcasn´emu pˇrehr´an´ı videa. Pˇrenos streamu na dan´eho klienta je ukonˇcen.
5
CANCEL AUDIO
Stejn´e jako CANCEL VIDEO, ale pro audio.
6
KEY VIDEO
7
KEY AUDIO
8
FRAME CHANGE
9 10
11
SOUND CHANGE QUIT SERVER MESSAGE STOP CLIENT
Klient pos´ıl´a ˇza´dost o zasl´an´ı ˇsifrovac´ıho kl´ıˇce pro video stream. Server odpov´ıd´a stejnou zpr´avou s vloˇzen´ ym kl´ıˇcem v ˇca´sti pro data. Klient je zaˇrazen do seznamu, kter´emu je pos´ıl´an stream, ale zat´ım se mu nic nepos´ıl´a (nen´ı zn´am port, kam se m´a stream pos´ılat). Analogie ke KEY VIDEO. Tuto zpr´avu pos´ıl´a server klientovi v pˇr´ıpadˇe, ˇze nastala zmˇena obrazu. Klient na n´ı neodpov´ıd´a, pouze provede pˇr´ısluˇsn´e kroky k zobrazen´ı zpr´avy. Stejn´e jako FRAME CHANGE. V pˇr´ıpadˇe, ˇze bude server ukonˇcen, poˇsle jeˇstˇe pˇredt´ım zpr´avu, aby se klienti mohli takt´eˇz ˇra´dnˇe ukonˇcit. Zpr´ava pˇrijde od klienta, kter´ y zastavil pˇrehr´av´an´ı streamu pomoc´ı tlaˇc´ıtka Stop. Na serveru se klient odstran´ı ze vˇsech seznam˚ u, kter´e souvis´ı s pos´ıl´an´ım streamu a zpr´av o zmˇen´ach.
Tab. 4.1: Typy a v´ yznam komunikaˇcn´ıch zpr´av.
47
Program´atorsk´a pˇr´ıruˇcka
4.3
Stream
4.3.1
FFmpeg
Stream
N´astroj ffmpeg.exe byl bl´ıˇze pˇribl´ıˇzen v kap. 3.3.4. Na moˇznosti zaˇclenˇen´ı do aplikace se pod´ıv´ame nyn´ı. ffmpeg.exe je spouˇstˇen jako extern´ı program v nov´em vl´aknu, kter´ y je vˇsak moˇzn´e z programu serveru ovl´adat. Toho je u obou platforem doc´ıleno pomoc´ı pipe. D´ıky tomu je moˇzn´e ffmpeg.exe ukonˇcit leg´aln´ım zp˚ usobem, a to tak, ˇze je mu zasl´ano p´ısmeno q.
Pˇredt´ım, neˇz je moˇzn´e pˇr´ıkaz spustit, je nutn´e zn´at jeho parametry a hlavnˇe vstupn´ı zaˇr´ızen´ı, ze kter´ ych se bude odeb´ırat audio/video. V pˇr´ıpadˇe syst´emu Windows se poˇc´ıt´a s pouˇzit´ım vstupn´ıch zaˇr´ızen´ı pomoc´ı form´at˚ u DirectShow (multimedi´aln´ı framework). Tato zaˇr´ızen´ı je ale nejdˇr´ıve nutn´e naj´ıt. To se provede spuˇstˇen´ım pˇr´ıkazu 4.1, kde jeho zkr´acen´ y v´ ystup je uveden v uk´azce 4.2. Tento v´ ystup je smˇerov´an do souboru, odkud se pak zaˇr´ızen´ı z´ıskaj´ı. Tato zaˇr´ızen´ı se pak pouˇzij´ı jako vstupn´ı zdroje streamu. Pro syst´em GNU/Linux se pouˇz´ıv´a vstupn´ı form´at video4linux2 a zaˇr´ızen´ı /dev/video0 pro z´ısk´an´ı videa a form´at alsa a zaˇr´ızen´ı default pro zisk audia. Zde nen´ı tˇreba zaˇr´ızen´ı vyhled´avat.
ffmpeg.exe -list_devices true -f dshow -i dummy (4.1)
[dshow [dshow [dshow [dshow dummym:
02509800] DirectShow video devices 02509800] "1.3M HD WebCam" 02509800] DirectShow audio devices 02509800] "Mikrofon (Conexant High Definit" Immediate exit requested (4.2)
Nˇekdy se m˚ uˇze st´at, ˇze zaˇr´ızen´ı obsahuje ˇcesk´e znaky a to je probl´em. FFmpeg spuˇstˇen´ y pod Windows je m˚ uˇze ˇspatnˇe dek´odovat a t´ım p´adem zaˇr´ızen´ı nenajde a 48
Program´atorsk´a pˇr´ıruˇcka
Stream
v˚ ubec se nespust´ı. Kv˚ uli tomu je nutn´e pˇr´ıkaz pro spuˇstˇen´ı nejdˇr´ıve pˇrek´odovat z UTF-8 na Windows ANSI a aˇz pak ho je moˇzn´e spustit.
Nyn´ı je moˇzn´e pomoc´ı n´astroje ffmpeg.exe, spustit pˇr´ıkaz, kter´ y zapne z´ısk´av´an´ı videa a audia z dostupn´ ych zaˇr´ızen´ı. D´ale pak z´ıskan´ y stream k´oduje do form´atu MPEG-TS a kop´ıruje ho na dva v´ ystupy, kter´e jsou pos´ıl´any na lok´aln´ı porty serveru, kde jeden v´ ystupn´ı stream obsahuje jak video, tak audio stopu, a druh´ y pouze audio stopu. Kromˇe toho je spuˇstˇena i detekce pˇrekroˇcen´ı limitu hladiny zvuku a detekce pohybu. V´ ystupn´ı log je pˇresmˇerov´an do pipy, aby ho bylo moˇzn´e analyzovat (viz kap. 4.3.3). Cel´ y pˇr´ıkaz (pro Windows) je zn´azornˇen v uk´azce 4.3 (spolu s ˇc´ıslov´an´ım ˇra´dk˚ u) a v tabulce 4.2 jsou pak vysvˇetleny jeho jednotliv´e parametry.
1: ffmpeg.exe -loglevel debug 2: -f dshow 3: -i video="1.3M HD WebCam":audio="Mikrofon (Conexant High Definit" 4: -vcodec libx264 -pix_fmt yuv420p 5: -acodec libmp3lame 6: -b:v 282000 -ar 16000 -ac 1 -r 30 -s 800x600 -q:v 1 7: -f mpegts "udp://127.0.0.1:9002" 8: -af silencedetect=noise=-40dB -f null 9: -vf "select=’gt(scene 0.1)’"-f null 10: -vn -f mpegts "udp://127.0.0.1:9004" 11: 2>\\.\\pipe\\ffmpegOutputPipe (4.3) ˇ adek 7 pˇredstavuje audio+video Na ˇra´dc´ıch 7 - 10 jsou vidˇet paraleln´ı v´ ystupy. R´ ˇ adek 10 stream, kter´ y je ve form´atu MPEG-TS pos´ıl´an na lok´aln´ı port serveru. R´ ukazuje to sam´e, jen je pos´ıl´an pouze audio stream a na jin´ y port. Na ˇra´dc´ıch 8 a 9 jsou nastaveny filtry pro detekci hlasitosti a pohybu. Za norm´aln´ıch okolnost´ı poskytuj´ı v´ ystup (dalˇs´ı stream nebo napˇr. obr´azky pˇri kaˇzd´e detekci pohybu), ten vˇsak my k niˇcemu nepotˇrebujeme, a proto je zde m´ısto v´ ystupn´ıho form´atu pouze null -. ˇ adky 2 a 3 z´avis´ı na pouˇzit´em operaˇcn´ım syst´emu. Posledn´ı ˇra´dek je pˇresmˇerov´an´ı R´ chybov´eho v´ ystupu do pojmenovan´e pipy. D´ıky tomu je moˇzn´e analyzovat veˇsker´ y log, kter´ y je generov´an.
49
Program´atorsk´a pˇr´ıruˇcka
Stream
Parametr V´ yznam loglevel Urˇcen´ı u ´rovnˇe logov´an´ı. debug je nejpodrobnˇejˇs´ı v´ ypis. Vynucen´ı urˇcit´eho v(´ y)stupn´ıho form´atu. dshow znaˇc´ı pouˇzit´ı f zaˇr´ızen´ı DirectShow. mpegts je form´at v´ ystupn´ıho streamu. Form´at vstupu. Zde je uveden bud’ vstupn´ı soubor, s´ıt’ov´a i adresa nebo zaˇr´ızen´ı, jako v´ yˇse v uk´azce 4.3. Kodek pro video. libx264 je knihovna a znaˇc´ı pouˇzit´ı komprese vcodec H.264. pix fmt Form´at r´amc˚ u. Konkr´etnˇe pouˇzit´ y je yuv420p (viz obr. 3.10). Kodek pro audio. libmp3lame je knihovna a znaˇc´ı pouˇzit´ı acodec komprese MP3. Video bit rate. Jedn´a se o poˇcet pˇrepraven´ ych bit˚ u za jednotku b:v ˇcasu. Vzorkovac´ı frekvence audia. Nejpouˇz´ıvanˇejˇs´ı hodnoty jsou ar 44 100 Hz a 22 050 Hz. ac Poˇcet audio kan´al˚ u (mono = 1, stereo = 2). r Poˇcet r´amc˚ u za sekundu. s Rozliˇsen´ı videa. Urˇcuje m´ıru komprese - kvalitu videa. Rozpˇet´ı m´a od 1 do 31, q:v kde 1 je nejkvalitnˇejˇs´ı. Audio filtr. silencedetect=noise=-40dB ud´av´a sledov´an´ı hlaaf diny zvuku s toleranc´ı 40 dB. Video filtr. select=’gt(scene 0.1)’ porovn´av´a dvˇe po sobˇe vf jdouc´ı sc´eny a zaznamen´a, o kolik procent se liˇs´ı. Tab. 4.2: Popis parametr˚ u FFmpegu [12]. Spuˇstˇen´ı ffmpeg.exe se prov´ad´ı stejnˇe jako u spuˇstˇen´ı mDNS programu, pomoc´ı pipe. Pˇr´ıkaz pro z´ısk´av´an´ı a anal´ yzu streamu nebˇeˇz´ı celou dobu, co je spuˇstˇen server. Kv˚ uli ˇsetˇren´ı operaˇcn´ı pamˇeti je tento pˇr´ıkaz spuˇstˇen jen tehdy, kdyˇz si nˇejak´ y klient vyˇza´d´a stream (po stisku tlaˇc´ıtka Play na pˇrehr´avaˇci). Po odpojen´ı je vykon´av´an´ı pˇr´ıkazu pˇreruˇseno a s novˇe pˇr´ıchoz´ım klientem se znovu spouˇst´ı.
4.3.2
Pˇ renos streamu
ffmpeg.exe pos´ıl´a na server 2 streamy pomoc´ı protokolu UDP na dva r˚ uzn´e porty (oba streamy jsou pos´ıl´any pokaˇzd´e, bez ohledu na to, zda si klient vyˇz´adal pouze audio nebo audio+video). Na tˇechto portech server poslouch´a. Respektive na nich 50
Program´atorsk´a pˇr´ıruˇcka
Stream
poslouchaj´ı instance tˇr´ıdy Udp server, kter´e bˇeˇz´ı v samostatn´ ych vl´aknech. Tyto instance maj´ı za u ´kol pˇrij´ımat stream, ˇsifrovat ho a pos´ılat na vˇsechny klienty, kteˇr´ı jsou uloˇzeni v pˇr´ısluˇsn´ ych seznamech (zaˇza´dali si o stream). V tˇechto seznamech se uchov´avaj´ı IP adresy a porty klient˚ u, kde poslouch´a jejich UDP server. Pokud jsou seznamy pr´azdn´e, pak nen´ı spuˇstˇen ani ffmpeg.exe ani vl´akna UDP server˚ u.
Na stranˇe klienta je vˇzdy pouze jedna instance UDP serveru, jelikoˇz klient m˚ uˇze pˇrij´ımat vˇzdy maxim´alnˇe jeden stream. Zde m´a UDP server opaˇcnou roli neˇz na serveru. Pˇrij´ıman´ y stream deˇsifruje a pos´ıl´a ho na lok´aln´ı port klienta, kde poslouch´a pˇrehr´avaˇc ffplay.exe, kter´ y pˇrijat´ y stream zobrazuje.
4.3.3
Pˇ resmˇ erov´ an´ı logu
Aby bylo moˇzn´e d´ale pracovat s detekovan´ ymi zmˇenami hlasitosti a obrazu, kter´e jsou logov´any, je nutn´e z´ıskat k tomuto logu pˇr´ıstup. Toho bylo dosaˇzeno pomoc´ı pipe, kde pro syst´em Windows byly pouˇzity pojmenovan´e pipy (viz 12. ˇr´adek v uk´azce 4.3) a pro syst´em GNU/Linux obyˇcejn´e. D´ıky pip´am je moˇzn´e log pˇresmˇerovat z v´ ystupu na konzoli ke zpracov´an´ı na server. Na serveru je pak pomoc´ı instance tˇr´ıdy Analysis, kter´a bˇeˇz´ı v samostatn´em vl´aknu, nepˇretrˇzitˇe ˇcten a analyzov´an v´ ystup pipe (veˇsker´ y log, kter´ y ffmpeg.exe produkuje).
4.3.4
Detekce zmˇ en
Veˇsker´a detekce zmˇen prob´ıh´a na z´akladˇe anal´ yzy pˇresmˇerovan´eho logu. Pro detekci zmˇeny hlasitosti jsou kl´ıˇcov´e ty ˇra´dky logu, kde se vyskytuje spojen´ı silence end, a pro detekci pohybu pak ˇr´adky se slovem scene (viz kap. 3.3.6). V pˇr´ıpadˇe, ˇze je nalezen ˇra´dek se zmˇenou, jsou pomoc´ı sign´al˚ u uvˇedomˇeni vˇsichni klienti (vl´akna na serveru spravuj´ıc´ı pˇripojen´e klienty). Pokud m´a dan´e vl´akno, obsluhuj´ıc´ı klienta, zaznamen´ano, ˇze klient (druh´a ˇca´st aplikace) chce odeb´ırat zpr´avy o zmˇen´ach, pak mu poˇsle zpr´avu (viz kap. 4.2.4), jinak ozn´amen´ı ignoruje. Pro zas´ıl´an´ı sign´al˚ u informuj´ıc´ıch o detekci zvuku byl pouˇzit n´avrhov´ y vzor Observer.
Detekovan´e zmˇeny pomoc´ı ffmpeg.exe jsou bez dalˇs´ıch zkoum´an´ı pouˇzity jen v pˇr´ıpadˇe hlasitosti. Co se t´ yˇce detekce pohybu, z logu jsou vyextrahov´any informace 51
Program´atorsk´a pˇr´ıruˇcka
Stream
o procentu´aln´ı zmˇenˇe sc´eny. Aˇz na serveru se pak urˇcuje, zda je tato zmˇena menˇs´ı (vˇetˇs´ı) neˇz zadan´a mez. D´ıky tomu je tak´e moˇzn´e mˇenit tuto mez pˇres webov´e rozhran´ı a zmˇena se hned projev´ı. To neplat´ı o zmˇenˇe meze pro hlasitost. Tu detekuje pˇr´ımo ffmpeg.exe, a proto je po jej´ı zmˇenˇe ve webov´em rozhran´ı nutn´e n´astroj ffmpeg.exe vypnout a znovu zapnout.
4.3.5
Pˇ rehr´ av´ an´ı streamu
Pro pˇrehr´av´an´ı streamu na stranˇe klienta byl zvolen n´astroj ffplay.exe. Tento program se pod Windows spouˇst´ı v konzoli pomoc´ı ShellExecute, kde se nastaven´ım pˇr´ısluˇsn´eho parametru zamez´ı zobrazen´ı konzolov´eho okna. Pod syst´emy GNU/Linux se provede vytvoˇren´ı nov´eho procesu (pomoc´ı fork ), a v tom je spuˇstˇen pˇrehr´avaˇc (exec). Pˇrehr´avaˇc pˇrij´ım´a jiˇz deˇsifrovan´ y stream z lok´aln´ıho portu klienta, kam je tento deˇsifrovan´ y stream pos´ıl´an.
Pˇrehr´av´an´ı streamu nezaˇcne hned po zapnut´ı pˇrehr´avaˇce. Je zde urˇcit´a prodleva (cca 10 sekund), protoˇze pˇrehr´avaˇci chv´ıli trv´a, neˇz v pˇr´ıchoz´ım streamu nalezne potˇrebn´e informace pro pˇrehr´av´an´ı. V pˇr´ıpadˇe velk´eho vyt´ıˇzen´ı procesoru se ztr´ac´ı i v´ıce UDP paket˚ u, a pak je nalezen´ı informac´ı o to obt´ıˇznˇejˇs´ı. Pokud do urˇcit´e doby informaci nenajde, pˇrehr´avaˇc se ukonˇc´ı. Tato funkcionalita je zabudov´ana pˇr´ımo v pˇrehr´avaˇci. Stejnˇe tak se m˚ uˇze st´at, ˇze je vypnut kv˚ uli nˇejak´e chybˇe, kter´a pˇri anal´ yze streamu nastala.
Pˇrehr´avaˇc otev´ır´a okno se streamem vˇzdy, i v pˇr´ıpadˇe, ˇze pˇrehr´avan´ y stream je pouze audio. V tomto oknˇe se pak zobrazuje pr˚ ubˇeh zvukov´ ych vln. Existuje zde parametr nodisp, kter´ y zamez´ı otevˇren´ı okna, a doruˇcen´ y audio stream je pak moˇzn´e pouze poslouchat.
ffplay.exe obsahuje nˇekolik vnitˇrn´ıch pˇr´ıkaz˚ u pro ovl´ad´an´ı streamu, kter´e jsou nez´avisl´e na naˇs´ı aplikaci. Z tˇech, kter´e funguj´ı, to jsou kl´avesy: • q, ESC - vypnut´ı pˇrehr´avaˇce • f - pˇrepnut´ı na celou obrazovku • p, mezern´ık - pauza 52
Program´atorsk´a pˇr´ıruˇcka
Spr´ava serveru
• s - proch´azen´ı videa r´amec po r´amci, pˇredt´ım se mus´ı zm´aˇcknout pauza • ˇsipka doprava - posunut´ı na aktu´aln´ı pozici v live streamu • w - pˇrepnut´ı na zobrazen´ı zvukov´ ych vln Pokud se ffplay.exe vypne pouˇzit´ım v´ yˇse uveden´ ych kl´aves, pˇrehr´avaˇc se to nedozv´ı, a je nutn´e ho zastavit jeˇstˇe pˇr´ısluˇsn´ ym tlaˇc´ıtkem Stop. Pokud se pˇrehr´avaˇc vyp´ın´a pˇres tlaˇc´ıtko Stop, pak je proces ffplay.exe ukonˇcen pomoc´ı pˇr´ıkazu kill.
4.3.6
Ukl´ ad´ an´ı streamu
Jako rozˇs´ıˇren´ı aplikace bylo naprogramov´ano ukl´ad´an´ı pˇrehr´avan´eho streamu do souboru na stranˇe klienta. Stream bylo moˇzn´e ukl´adat tak, jak pˇrich´azel na UDP server. Tato moˇznost se ale projevila jako nevyhovuj´ıc´ı, jelikoˇz soubor pak nebylo moˇzn´e pˇrehr´at. Byla tedy zvolena jin´a moˇznost a to pouˇzit´ı n´astroje ffmpeg.exe . V pˇr´ıpadˇe, ˇze uˇzivatel zaˇskrtl ukl´ad´an´ı streamu do souboru, pak je deˇsifrovan´ y stream z UDP serveru pos´ıl´an jednak do ffplay.exe a jednak i na port, kde poslouch´a ffmy ffmpeg.exe. (viz obr. 3.1) peg save file.exe, coˇz je pˇrejmenovan´
ffmpeg.exe pˇrevede stream z MPEG-TS na MPEG a uloˇz´ı ho do souboru s jedineˇcn´ ym jm´enem ve tvaru streamFile YYYY-mm-dd HH-MM-SS.mpg (napˇr. streamFile 2014-04-24 10-52-59.mpg). ffmpeg.exe je vypnut po stisku tlaˇc´ıtka Stop. Stream je moˇzn´e ukl´adat jen v pˇr´ıpadˇe, ˇze je zapnut´e souvisl´e pˇrehr´av´an´ı, ne pˇri zmˇen´ach.
4.4
Spr´ ava serveru
Spr´ava serveru prob´ıh´a pˇres webov´e rozhran´ı, kter´e je pˇr´ıstupn´e pˇres IP adresu serveru a port 9443. Na tomto portu poslouch´a instance tˇr´ıdy Web interface, kter´a m´a za u ´kol pˇrij´ımat nov´e klienty pomoc´ı protokolu HTTPS, k jehoˇz implementaci pouˇz´ıv´a knihovnu OpenSSL (viz [21]). Tato instance um´ı t´eˇz filtrovat pˇr´ıchoz´ı klienty podle toho, zda patˇr´ı do stejn´e pods´ıtˇe, jako server. Toto se dˇeje na z´akladˇe odmaskov´an´ı klientovi IP adresy a porovn´an´ı v´ ysledku s IP pods´ıtˇe serveru (viz pˇr´ıklad 3.2) [6].
53
Program´atorsk´a pˇr´ıruˇcka
Spr´ava serveru
Kaˇzd´ y pˇr´ıchoz´ı klient dost´av´a pˇridˇeleno vl´akno, ve kter´em se obslouˇz´ı jeho jeden poˇzadavek a vl´akno pot´e zanik´a. Vzhledem k tomu, ˇze klienti se do webov´eho rozhran´ı mus´ı pˇrihl´asit, je d˚ uleˇzit´e si nˇejak´ ym zp˚ usobem zaznamen´avat, kteˇr´ı jiˇz maj´ı schv´alen´ y pˇr´ıstup a kteˇr´ı nikoliv. Toho bylo dosaˇzeno pomoc´ı coockie. Pˇri prvn´ım poˇzadavku klienta (webov´eho prohl´ıˇzeˇce) na str´anku rozhran´ı se vygeneruje jedineˇcn´e identifikaˇcn´ı ˇc´ıslo, kter´e je vloˇzeno do HTTPS hlaviˇcky, kter´a se spolu s HTML k´odem str´anky pos´ıl´a zpˇet klientovi. Klient si toto ˇc´ıslo uloˇz´ı a pˇri kaˇzd´em dalˇs´ım poˇzadavku se prokazuje t´ımto ˇc´ıslem.
Pokud se klient u ´spˇeˇsnˇe pˇrihl´as´ı do rozhran´ı (pro pˇr´ıstup je jen jedno spoleˇcn´e heslo), pak je jeho ˇc´ıslo zaˇrazeno do seznamu pˇrihl´aˇsen´ ych (ovˇeˇren´ ych). Pˇri kaˇzd´em dalˇs´ım poˇzadavku na str´anku se mus´ı kontrolovat, zda je uˇzivatel jiˇz pˇrihl´aˇsen a m´a tedy pr´avo na zobrazen´ı dan´e str´anky. Po odhl´aˇsen´ı se identifik´ator smaˇze ze seznamu pˇrihl´aˇsen´ ych.
HTML k´od, kter´ y se pˇren´aˇs´ı na klienta, je pˇredpˇripraven a uloˇzen v promˇenn´ ych v redukovan´e podobˇe. T´ım je dosaˇzeno zmenˇsen´ı objemu pˇren´aˇsen´ ych dat na u ´kor pˇrehlednosti k´odu. HTML k´od totiˇz d´ıky kompresi neobsahuje ˇz´adn´e pˇrebyteˇcn´e mezery nebo odˇr´adkov´an´ı.
4.4.1
Registrace
Pokud se klient u ´spˇeˇsnˇe pˇrihl´as´ı do webov´eho rozhran´ı, m´a moˇznost pˇridat nov´eho uˇzivatele. Za t´ımto u ´ˇcelem existuje na str´ance https://
:9443/user.html formul´aˇr. Tento formul´aˇr obsahuje dvˇe textov´a pole, jedno pro uˇzivatelsk´e jm´eno a druh´e pro heslo. Obˇe dvˇe pole maj´ı omezen´ y poˇcet znak˚ u na 6-50 vˇcetnˇe a omezenou mnoˇzinu pouˇziteln´ ych symbol˚ u (a-z A-Z 0-9 * .-).
Vyplnˇen´e u ´daje jsou posl´any na server, kde se kontroluje, zda uˇz takov´e uˇzivatelsk´e jm´eno existuje, pokud ano, uˇzivatel se nepˇrid´a. Pokud se jedn´a o nov´eho uˇzivatele, pak je uloˇzen jednak do seznamu registrovan´ ych uˇzivatel˚ u, kter´ y je pˇr´ıstupn´ y po celou dobu bˇehu serveru, a je tedy moˇzn´e novˇe registrovan´e u ´daje hned pouˇz´ıt k pˇrihl´aˇsen´ı, a jednak do souboru, kde jsou uloˇzeni vˇsichni registrovan´ı uˇzivatel´e.
54
Program´atorsk´a pˇr´ıruˇcka
Spr´ava serveru
Soubor s registrovan´ ymi uˇzivateli obsahuje trojice jm´eno-s˚ ul-verifier. Po pˇrid´an´ı nov´eho uˇzivatele se obsah souboru smaˇze. N´aslednˇe se vytvoˇr´ı z registrovan´ ych uˇzivatel˚ u, uloˇzen´ ych v seznamu, zaˇsifrovan´ y obsah, kter´ y je pak uloˇzen do souboru. Obsah souboru je vˇzdy pˇri startu serveru naˇcten do pamˇeti (do seznamu), aby byl umoˇznˇen rychl´ y pˇr´ıstup v pˇr´ıpadˇe pˇrihlaˇsov´an´ı klienta k odbˇeru streamu.
Na str´ance, kde je formul´aˇr pro pˇrid´an´ı klient˚ u, je i tlaˇc´ıtko na jejich smaz´an´ı. Soubor s klienty pak po stisknut´ı tlaˇc´ıtka bude pr´azdn´ y. D´ale je zde pro vˇetˇs´ı pˇrehlednost uveden i seznam registrovan´ ych klient˚ u (pouze jm´ena).
Certifik´ at Aby bylo moˇzn´e pouˇz´ıvat HTTPS protokol, mus´ı m´ıt server vlastn´ı certifik´at. Pro naˇse u ´ˇcely byl zvolen pouze self-signed certifik´at (viz kap. 3.2.1). Tento certifik´at je moˇzn´e vygenerovat pomoc´ı knihovny OpenSSL podle uk´azky 4.4. V uk´azce byl certifik´at vytvoˇren pod syst´emem Windows, ale stejn´ y postup by se aplikoval i pod syst´emy GNU/Linux.
1: genrsa -out private.pem 2048 2: req -config C:\path-to\openssl.cnf -x509 -days 3650 -new -key private.pem -out public.pem 3: pkcs12 -export -in public.pem -inkey private.pem -out mycert.pfx (4.4) Na prvn´ım ˇra´dku je vygenerov´an RSA priv´atn´ı kl´ıˇc o d´elce 2048 bit˚ u. Na druh´em ˇra´dku je vytvoˇren certifik´at public.pem ve form´atu x509 s expiraˇcn´ı dobou 10 let od data vytvoˇren´ı. Tento certifik´at se bude webov´ ym prohl´ıˇzeˇc˚ um jevit jako ned˚ uvˇeryhodn´ y. Tomu se lze vyhnout instalac´ı certifik´atu do syst´emu nebo prohl´ıˇzeˇc˚ u. Instalaˇcn´ı certifik´at se v pˇr´ısluˇsn´em form´atu vytvoˇr´ı pomoc´ı tˇret´ıho ˇr´adku. Server pak pouˇz´ıv´a soubory public.pem a private.pem.
55
Program´atorsk´a pˇr´ıruˇcka
4.4.2
Grafick´e rozhran´ı
Ukl´ ad´ an´ı hodnot
Ve webov´em rozhran´ı je i kromˇe pˇrid´av´an´ı klient˚ u moˇzn´e mˇenit i nastaven´ı serveru, parametr˚ u streamu a parametr˚ u pro detekci zmˇen. Vˇsechny tyto hodnoty jsou uchov´av´any v souborech (avoption, avset, server ). Tyto soubory nejsou nijak ˇsifrov´any. Kromˇe tˇechto soubor˚ u jsou na serveru jeˇstˇe ty sam´e soubory s pˇr´ıponou o, kter´e uchov´avaj´ı origin´aln´ı nastaven´ı vˇsech nastaviteln´ ych hodnot. Tyto hodnoty je moˇzn´e opˇet nastavit pomoc´ı tlaˇc´ıtka Original settings u pˇr´ısluˇsn´ ych formul´aˇr˚ u pro zmˇenu hodnot parametr˚ u. Po stisku se hodnoty z origin´aln´ıho souboru pˇrekop´ıruj´ı do pˇr´ısluˇsn´eho souboru s nastaven´ım.
Na str´ance pro zmˇenu parametr˚ u streamu je textov´e pole, do kter´eho je moˇzn´e zadat cel´ y pˇr´ıkaz pro FFmpeg, kter´ y se pak beze zmˇen spust´ı pˇri dalˇs´ım vyˇza´d´an´ı streamu. Tato funkcionalita byla vytvoˇrena pro zkuˇsen´e uˇzivatele, kteˇr´ı vˇed´ı, co dˇelaj´ı. Uloˇzen´ y pˇr´ıkaz se bude zap´ınat do t´e doby, neˇz dojde k restartov´an´ı serveru. Pokud se uloˇz´ı pr´azdn´e pole m´ısto pˇr´ıkazu, bude se pro z´ısk´av´an´ı streamu opˇet pouˇz´ıvat ten napevno zadan´ y.
Zmˇena nastaven´ı port˚ u serveru je dostupn´a aˇz po restartu serveru. Stejnˇe tak zmˇeny parametr˚ u streamu jsou aplikov´any aˇz na dalˇs´ı spuˇstˇen´ı n´astroje ffmpeg.exe, jak bylo jiˇz nˇekolikr´at zmiˇ nov´ano.
4.5
Grafick´ e rozhran´ı
Kv˚ uli jednoduˇsˇs´ımu ovl´ad´an´ı pro uˇzivatele bylo na stranˇe klienta vytvoˇreno grafick´e rozhran´ı. Pro grafick´ y vzhled pˇrehr´avaˇce byly pouˇzity Qt knihovny (v´ıce [24]). Uˇzivateli se nejdˇr´ıve zobraz´ı pˇrihlaˇsovac´ı okno (viz kap. 4.2.1 a obr. P 1), a pak okno pˇrehr´avaˇce (viz obr. P 2) obsluhovan´e tˇr´ıdou Main window. Jednotliv´a tlaˇc´ıtka pˇrehr´avaˇce jsou mezi sebou sv´az´ana pomoc´ı sign´al˚ u, kter´e poskytuje Qt. D´ıky tomu je moˇzn´e znepˇr´ıstupnit uˇzivateli nˇekter´e nesmysln´e kombinace, kter´e by mohl zadat (napˇr. nechat si pos´ılat stream jen pˇri zmˇen´ach, ale uˇz se nepˇrihl´asit k ˇza´dn´emu odbˇeru zmˇen). Stejnˇe tak je po stisku zablokov´ano tlaˇc´ıtko Play a odblokov´ano je aˇz po tom, co se stiskne Stop. Tato funkcionalita zabraˇ nuje uˇzivateli vyˇza´d´an´ı dalˇs´ıho streamu, dokud ten pˇredchoz´ı neukonˇc´ı.
56
Program´atorsk´a pˇr´ıruˇcka
Konzolov´e rozhran´ı
Podle toho, co uˇzivatel zaˇskrt´a na panelu pˇrehr´avaˇce, se pak spust´ı stream. Pokud se m´a stream zaˇc´ıt pˇrehr´avat hned, na server se poˇsle jak zpr´ava s ˇz´adost´ı o ˇsifrovac´ı kl´ıˇc, tak zpr´ava se zaˇrazen´ım klienta do seznamu, kter´emu je stream pos´ıl´an. V pˇr´ıpadˇe zap´ın´an´ı streamu aˇz pˇri zmˇenˇe, se poˇsle pouze zpr´ava s ˇz´adost´ı o kl´ıˇc a zpr´ava s portem, kde poslouch´a klientsk´ y UDP server, se poˇsle aˇz kdyˇz klient obdrˇz´ı zpr´avu o zmˇenˇe obrazu/hlasitosti. V pˇr´ıpadˇe zap´ın´an´ı pˇrehr´av´an´ı streamu aˇz pˇri zmˇenˇe je spuˇstˇen odpoˇcet (v samostatn´em vl´aknˇe) a pokud nepˇrijde dalˇs´ı zpr´ava indikuj´ıc´ı zmˇenu, neˇz odpoˇcet skonˇc´ı, okno se streamem se zavˇre. Jinak se odpoˇcet nastaven´ı opˇet na v´ ychoz´ı hodnotu a zaˇc´ın´a se odpoˇc´ıt´avat znovu.
Pˇrehr´avaˇc umoˇzn ˇuje zobrazov´an´ı zpr´av o zmˇen´ach v oznamovac´ı oblasti (system tray) u sv´e ikony (viz obr. P 4). Aby se tˇr´ıda Main window dozvˇedˇela, ˇze byla pˇrijata zpr´ava indikuj´ıc´ı zmˇenu, mus´ı b´ yt zaregistrov´ana k odbˇeru ozn´amen´ı pomoc´ı sign´al˚ u. Sign´aly jsou generov´any tˇr´ıdou Communication, kter´a spravuje pˇr´ıjem zpr´av od serveru. Stejnˇe jako na serveru, i zde byl pouˇzit n´avrhov´ y vzor Observer.
Kromˇe sign´al˚ u o zmˇen´ach se zde pos´ılaj´ı i sign´aly indikuj´ıc´ı ukonˇcen´ı serveru (nebo chybu pˇrenosu). Pokud je server ukonˇcen, je potˇreba vypnout pˇrehr´avaˇc, aby klient zbyteˇcnˇe neˇcekal na nˇeco, co nenastane. V pˇr´ıpadˇe selh´an´ı funkce, kter´a pˇrij´ım´a zpr´avy od serveru, nebo obdrˇzen´ı ukonˇcovac´ı zpr´avy serveru, se nejdˇr´ıve provede ukonˇcen´ı vˇsech bˇeˇz´ıc´ıch vl´aken, a nakonec se zobraz´ı dialogov´e okno, kter´e informuje o ukonˇcen´ı serveru a ukonˇcen´ı aplikace. Po objeven´ı tohoto okna jiˇz nen´ı moˇzn´e cokoliv na pˇrehr´avaˇci zadat a je moˇzn´e ho pouze ukonˇcit.
4.6
Konzolov´ e rozhran´ı
Server byl vytvoˇren jako konzolov´a aplikace. Nastaven´ı serveru je moˇzn´e spravovat pˇres webov´e rozhran´ı, a pˇres konzoli je moˇzn´e ho, zad´an´ım pˇr´ıkazu quit, leg´alnˇe ukonˇcit. Toto ukonˇcen´ı bylo implementov´ano proto, aby vˇsechna bˇeˇz´ıc´ı vl´akna mohla b´ yt regul´ernˇe ukonˇcena. Kv˚ uli pouˇzit´ ym timeout˚ um na funkc´ıch select(), nen´ı ukonˇcen´ı serveru okamˇzit´e, ale trv´a p´ar sekund. Kromˇe vl´aken obsluhuj´ıc´ıch klienty a UDP servery se mus´ı ukonˇcit i extern´ı programy ffmpeg.exe a mdns server.exe.
Do konzole, kde bˇeˇz´ı server, je vypisov´an log. Tento log je urˇcen sp´ıˇse program´ator˚ um neˇz bˇeˇzn´ ym uˇzivatel˚ um aplikace. Log se kromˇe konzole ukl´ad´a i do souboru
57
Program´atorsk´a pˇr´ıruˇcka
Konzolov´e rozhran´ı
LOG SERVER, kam je st´ale pˇrid´av´an. Logov´an´ı je moˇzn´e programovˇe vypnout ve tˇr´ıdˇe Log, kde staˇc´ı zmˇenit direktivu #define na #undef u definovan´ ych maker LOG FILE a LOG TERMINAL.
Stejn´ y princip logov´an´ı je vytvoˇren i v programu klienta s t´ım rozd´ılem, ˇze log se zapisuje pouze do souboru.
58
5 Namˇeˇren´e hodnoty V t´eto kapitole budou uvedeny hodnoty, kter´e byly zmˇeˇreny bˇehem testov´an´ı aplikace. Webov´e rozhran´ı bylo otestov´ano v prohl´ıˇzeˇc´ıch Opera 12.16, Mozilla Firefox 28.0, Internet Explorer 11 a Google Chrome 33.0.1750.154 m.
5.1
Vyuˇ zit´ı ˇ s´ıˇ rky p´ asma
D˚ uleˇzit´ ym faktorem je vyuˇzit´ı ˇs´ıˇrky p´asma. Aplikace byla spuˇstˇena nˇekolika zp˚ usoby, a vˇzdy byly zaznamen´any hodnoty odes´ılan´ ych a pˇrij´ıman´ ych dat v B/s u jednotliv´ ych ˇc´ast´ı aplikace. V´ ysledky jsou uvedeny v tabulce 5.1. Pro nastaven´ı streamu byly pouˇzity v´ ychoz´ı hodnoty (rozliˇsen´ı = 800x600, bit rate = 282 000 b/s, mono, audio frekvence = 16 000Hz, poˇcet r´amc˚ u/s = 25, kvalita = 9) a nebylo vyˇz´ad´ano pos´ıl´an´ı zpr´av pˇri zmˇenˇe. DP-server.exe je program serveru a DP-client.exe je program klienta.
Z namˇeˇren´ ych hodnot je vidˇet, ˇze typ pˇren´aˇsen´eho streamu nem´a ˇz´adn´ y vliv na mnoˇzstv´ı pˇrenesen´ ych dat z ffmpeg.exe, jelikoˇz se spouˇst´ı st´ale stejn´ y pˇr´ıkaz, ve kter´em jsou 2 v´ ystupn´ı streamy. D´ale je vidˇet pokles mnoˇzstv´ı pˇren´aˇsen´ ych dat, pokud se m´ısto audia+videa pˇren´aˇs´ı pouze audio. Zaj´ımav´e srovn´an´ı poskytuj´ı ˇr´adky 5 a 6, kde na ˇra´dku 5 byl puˇstˇen stream s nejvyˇsˇs´ı kvalitou a na ˇra´dku 6 naopak s nejniˇzˇs´ı. Objem odeslan´ ych dat je u vˇsech program˚ u o v´ıce neˇz polovinu menˇs´ı. Kromˇe ffmpeg.exe, zde doˇslo pouze k cca tˇretinov´emu sn´ıˇzen´ı.
5.2
Vyuˇ zit´ı pamˇ eti
Dalˇs´ım faktorem, kter´ y je mˇeˇriteln´ y, je vyuˇzit´ı operaˇcn´ı pamˇeti jednotliv´ ymi ˇc´astmi aplikace (viz tabulka 5.2). Tato mˇeˇren´ı prob´ıhala ve stejnou dobu jako v´ yˇse zm´ınˇe mˇeˇren´ı pˇren´aˇsen´ ych dat. Z namˇeˇren´ ych hodnot jsou vidˇet vˇetˇs´ı poˇzadavky na pamˇet’ v pˇr´ıpadˇe pˇrehr´av´an´ı audia+videa pomoc´ı ffplay.exe. Na ˇr´adc´ıch 5 a 6 jsou obrovsk´e rozd´ıly, co se t´ yˇce vyuˇzit´ı pamˇeti n´astrojem ffmpeg.exe, kter´ y pˇri nastaven´ı nejvyˇsˇs´ı kvality videa spotˇrebov´av´a 6x v´ıce pamˇeti neˇz pˇri nejniˇzˇs´ı kvalitˇe. Stejnˇe tak program ffplay.exe potˇrebuje pro kvalitnˇejˇs´ı stream mnohem v´ıce pamˇeti.
59
Namˇeˇren´e hodnoty
5.3
Pˇrehr´av´an´ı streamu
Pˇ rehr´ av´ an´ı streamu
Stream, kter´ y je na stranˇe klienta zobrazov´an, je asi o 3 vteˇriny pozadu oproti realitˇe. Menˇs´ı prodlevy se podaˇrilo dos´ahnout pouˇzit´ım parametru -tune zerolatency u z´ısk´av´an´ı streamu, ale pak doch´azelo k neˇza´douc´ımu ruˇsen´ı obrazu v podobˇe barevn´ ych prouˇzk˚ u v doln´ı ˇca´sti obrazovky (viz obr. 5.1) nebo k u ´pln´emu rozhozen´ı obrazu, ˇze pak nebylo v˚ ubec poznat, co se sn´ım´a. Na stranˇe klienta se pˇr´ıchoz´ı data nebufferuj´ı, coˇz sn´ıˇzilo prodlevu oproti realitˇe o asi 10 sekund.
Pˇresto, ˇze doch´az´ı k obˇcasn´emu mal´emu ruˇsen´ı v doln´ı ˇca´sti obrazu, je jeho kvalita dobr´a. Ruˇsen´ı zmiz´ı, pokud se pˇred kamerou m´avne (dojde t´ım k velk´e zmˇenˇe a FFmpeg poˇsle cel´ y nov´ y I-r´amec). Bylo zjiˇstˇeno, ˇze ruˇsen´ı obrazu je menˇs´ı pˇri pouˇzit´ı 30 sn´ımk˚ u/s m´ısto 25, kter´e jsou nastaveny jako v´ ychoz´ı hodnota. Zvuk s obrazem je synchronizov´an.
Pˇri testov´an´ı aplikace doˇslo k tomu, ˇze nˇekter´a zaˇr´ızen´ı (Windows 7 Professional, 64 b) nepropustila pˇres sv˚ uj Firewall data streamu. Nepomohlo ani zapnut´ı pˇrenosu pouze audio streamu. Po vypnut´ı Firewallu aplikace norm´alnˇe fungovala. Firewall byl pouze syst´emov´ y.
Obr. 5.1: Neˇz´adouc´ı ruˇsen´ı obrazu. 60
Namˇeˇren´e hodnoty
Pˇrehr´av´an´ı streamu
Spuˇstˇen´ı
1
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio).
2
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (audio).
3
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) a ukl´ad´an´ı streamu do souboru.
4
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (audio) a ukl´ad´an´ı streamu do souboru.
5
6
Pˇr´ıjem [B/s] DP-server.exe 51 196 DP-client.exe 36 771 ffmpeg.exe 0 ffplay.exe 48 316 mdns server.exe 5 DP-server.exe 59 164 DP-client.exe 17 681 ffmpeg.exe 0 ffplay.exe 18 749 mdns server.exe 5 DP-server.exe 60 260 DP-client.exe 42 911 ffmpeg.exe 0 ffplay.exe 44 795 mdns server.exe 5 ffmpeg save file.exe 44 778 DP-server.exe 48 577 DP-client.exe 14 785 ffmpeg.exe 0 ffplay.exe 19 273 mdns server.exe 5 ffmpeg save file.exe 19 273 DP-server.exe 30 809 DP-client.exe 38 319 ffmpeg.exe 0 ffplay.exe 50 047 DP-server.exe 10 890 DP-client.exe 16 204 ffmpeg.exe 0 ffplay.exe 23 939 Program
#
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) v nejvyˇsˇs´ı kvalitˇe. Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) v nejniˇzˇs´ı kvalitˇe.
Tab. 5.1: Vyuˇzit´ı ˇs´ıˇrky p´asma programy.
61
Odesl´an´ı [B/s] 36 771 36 237 66 777 0 5 17 681 17 460 64 125 0 5 42 911 84 703 62 533 0 5 0 14 785 29 211 63 762 0 5 0 22 449 37 187 68 390 0 6 219 15 978 41 837 0
Namˇeˇren´e hodnoty
Pˇrehr´av´an´ı streamu
Spuˇstˇen´ı
1
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio).
2
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (audio).
3
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) a ukl´ad´an´ı streamu do souboru.
4
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (audio) a ukl´ad´an´ı streamu do souboru.
5
6
Vyuˇzit´ı pamˇeti [kB ] DP-server.exe 2 132 DP-client.exe 8 100 ffmpeg.exe 147 516 ffplay.exe 35 616 mdns server.exe 1 412 DP-server.exe 7 832 DP-client.exe 2 196 ffmpeg.exe 146 489 ffplay.exe 8 196 mdns server.exe 1 352 DP-server.exe 2 200 DP-client.exe 7 680 ffmpeg.exe 145 500 ffplay.exe 31 576 mdns server.exe 1 352 ffmpeg save file.exe 38 064 DP-server.exe 2 172 DP-client.exe 7 668 ffmpeg.exe 141 952 ffplay.exe 7 188 mdns server.exe 1 448 ffmpeg save file.exe 3 620 DP-server.exe 2 376 DP-client.exe 7 620 ffmpeg.exe 440 384 ffplay.exe 122 568 DP-server.exe 2 544 DP-client.exe 7 684 ffmpeg.exe 70 328 ffplay.exe 17 164 Program
#
Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) v nejvyˇsˇs´ı kvalitˇe. Klient si vyˇz´adal souvisl´e pˇrehr´av´an´ı streamu (video + audio) v nejniˇzˇs´ı kvalitˇe.
Tab. 5.2: Vyuˇzit´ı pamˇeti program˚ u.
62
6 Z´avˇer Pˇrestoˇze je v dneˇsn´ı dobˇe na trhu dostupn´e nepˇrebern´e mnoˇzstv´ı dˇetsk´ ych ch˚ uviˇcek, ne vˇsechny jsou pouˇziteln´e, at’ uˇz proto, ˇze se ruˇs´ı s WiFi s´ıt´ı nebo proto, ˇze neposkytuj´ı ˇsifrovan´ y pˇrenos dat, kter´ y je d˚ uleˇzit´ y pro bezpeˇcnost a ochranu soukrom´ı jejich uˇzivatel˚ u. Tato pr´ace se tedy zab´ yv´a anal´ yzou souˇcasn´ ych ˇreˇsen´ı ch˚ uviˇcek, jejich nedostatk˚ u i pˇrednost´ı. Na z´akladˇe t´eto anal´ yze jsou pak stanoveny poˇzadavky na novou ch˚ uviˇcku, kter´a m´a za u ´kol odstranit 2 hlavn´ı nedostatky, a to ruˇsen´ı s WiFi s´ıt´ı a ˇsifrov´an´ı pˇrenosu (audia, videa).
Byly tak vytvoˇreny dva programy, kter´e ke sv´e vz´ajemn´e komunikaci vyuˇz´ıvaj´ı jiˇz zaveden´e internetov´e spojen´ı. Jedn´ım z tˇechto program˚ u je server, kter´ y mus´ı bˇeˇzet na zaˇr´ızen´ı, kter´e obsahuje kameru a mikrofon, a je tedy urˇcen ke sledov´an´ı d´ıtˇete. Naopak druh´ y program - klient mus´ı b´ yt spuˇstˇen na zaˇr´ızen´ı s monitorem a reproduktory a slouˇz´ı jako druh´a ˇca´st ch˚ uviˇcky, kterou u sebe maj´ı rodiˇce.
Na klientovi je tedy moˇzn´e sledovat bud’ audio nebo audio+video stream, kter´ y je odchyt´av´an v pokoji d´ıtˇete. Kromˇe toho je moˇzn´e zapnout i detekci pohybu a hlasitosti. Kdyˇz zaˇcne d´ıtˇe breˇcet nebo se probud´ı a zaˇcne se snaˇzit dostat z post´ ylky, rodiˇc o tom dostane zpr´avu, kter´a se po urˇcitou dobu zobrazuje v oznamovac´ı oblasti. Pokud se stane, ˇze se po dobu zobrazen´ı zpr´avy rodiˇc zrovna nesledoval monitor, pak je moˇzn´e si nechat posledn´ı ud´alost zobrazit kliknut´ım na ikonu klienta. Pˇrehr´avan´ y stream je moˇzn´e ukl´adat do souboru.
Oba programy (klient, server) spolu komunikuj´ı pomoc´ı ˇsifrovan´eho spojen´ı, a t´eˇz stream, kter´ y je pos´ıl´an ze serveru klientovi, je zaˇsifrovan´ y. Pro snadnˇejˇs´ı nastaven´ı serveru bylo implementov´ano webov´e rozhran´ı, kde je moˇzn´e nastavit jak parametry serveru (porty), tak i parametry pˇren´aˇsen´eho streamu (rozliˇsen´ı, kvalita videa atd.). Toto nastaven´ı je spoleˇcn´e pro vˇsechny klienty, kteˇr´ı se na server pˇripoj´ı a odeb´ıraj´ı stream. Kaˇzd´ y klient zvl´aˇst’ si ale m˚ uˇze vybrat, zda chce sledovat audio, audio+video, o jak´ ych zmˇen´ach bude informov´an, a zda se bude stream pˇrehr´avat hned od zaˇca´tku nebo jen po urˇcitou dobu pˇri kaˇzd´e detekci zmˇeny.
Pr´ace splˇ nuje vˇsechny body zad´an´ı, kter´e byly stanoveny. Kromˇe jiˇz implementovan´ ych souˇc´ast´ı by bylo moˇzn´e pr´aci rozˇs´ıˇrit o dalˇs´ı funkcionality, kter´e by server/klient nab´ızel (napˇr. zobrazov´an´ı streamu z v´ıce kamer najednou). 63
Literatura [1] A forum dedicated to FFmpeg on Windows. In: Zeranoe FFmpeg [online]. 2013 [cit. 2014-04-26]. Dostupn´e z : . [2] An MPEG frame sequence with two possible references: a P-frame referring to a I-frame and a B-frame referring to two P-frames. Video Compression [online]. MITROVIC, Djordje.. 2006 [cit. 2014-04-15]. Dostupn´e z : . [3] ANDERS, J¨org. MPEG video compression technique [online]. 2007 [cit. 2014-04-18]. Dostupn´e z : . [4] Announcing the ADVANCED ENCRYPTION STANDARD. In: Federal Information Processing Standards Publication 197 [online]. 2001 [cit. 201404-15]. Dostupn´e z : . [5] ARORA, Mohit. How secure is AES against brute force attacks?. In: Design How-To [online]. 2012 [cit. 2014-04-17]. Dostupn´e z : . [6] C++ - Check an IP Address is in a IP/Mask range. In: Random Stuff from a software developer [online]. 2012 [cit. 2014-04-21]. Dostupn´e z : . [7] Demonstration of visual cryptanalysis of the Data Encryption Standard’s ECB mode. Security data visualization. CONTI, Greg. San Francisco: Starch Press, Inc. 2007. ISBN-13: 978-1-59327-143-5.
64
Literatura [8] Depending on the subsampling, 2 or 4 pixel values of the chrominance channel can be grouped together. Video Compression [online]. MITROVIC, Djordje.. 2006 [cit. 2014-04-15]. Dostupn´e z : . ´ ´ Velk´y pr˚ [9] DOSTALEK, Libor a Alena KABELOVA. uvodce protokoly TCP/IP a syst´emem DNS Praha: Computer Press, 2000. ISBN 80-7226-323-4. [10] DWORKIN, Morris. Recommendation for Block Cipher Modes of Operation. In: NIST Special Publication 800-38A [online]. 2001 [cit. 2014-04-15]. Dostupn´e z : . [11] FAIRHURST, Gorz. MPEG-2 Transmission. In: MPEG-2 Digital Video [online]. 2001 [cit. 2014-04-17]. Dostupn´e z : . [12] FFmpeg [online]. 2014 [cit. 2014-04-17]. Dostupn´e z : . [13] FORRET, Peter. Video bitrate calculator. In: Web.forret.com [online]. 2014 [cit. 2014-04-18]. Dostupn´e z : . [14] FREIER, A. a P. KARLTON. The Secure Sockets Layer (SSL) Protocol Version 3.0. In: IETF Documents [online]. 2011 [cit. 2014-04-13]. ISSN 20701721. Dostupn´e z : . [15] CHANDRA, Pravir, Matt MESSIER a John VIEGA. Network Security with OpenSSL. O’Reilly, 2002. ISBN 0-596-00270-X. [16] CHESHIRE, S. KROCHMAL, M. Multicast DNS. In: Internet Engineering Task Force (IETF) [online]. 2013 [cit. 2014-04-15]. Dostupn´e z : . [17] KERN, Christoph, Anita KESAVAN a Neil DASWANI. Foundations of Security: What Every Programmer Needs to Know. New York: SpringerVerlag New York, 2007. ISBN 978-1590597842. [18] Levels of Noise In decibels (dB). In: American Academy of Audiology [online]. 2009 [cit. 2014-04-15]. Dostupn´e z : .
65
Literatura [19] MITROVIC, Djordje. Video Compression [online]. 2006 [cit. 2014-04-15]. Dostupn´e z : . [20] MP3 (MPEG Layer III Audio Encoding). Sustainability of Digital Formats [online]. 2012 [cit. 2014-04-18]. Dostupn´e z : . [21] OpenSSL: The Open Source toolkit for SSL/TLS [online]. 2014 [cit. 201404-18]. Dostupn´e z : . [22] POSIX Threads for Win32. In: Pthreads w32 [online]. 2012 [cit. 2014-04-15]. Dostupn´e z : . [23] Pseudo Code for Key Expansion. In: Announcing the ADVANCED ENCRYPTION STANDARD [online]. Federal Information Processing Standards Publications . 2001 [cit. 2014-04-15]. Dostupn´e z : . [24] Qt Project [online]. 2014 [cit. 2014-04-24]. Dostupn´e z : project.org/>.
[25] RESCORLA, E. HTTP Over TLS. IETF Documents [online]. 2000 [cit. 2014-04-13]. Dostupn´e z : . [26] ShiftRows() cyclically shifts the last three rows in the State. In: Announcing the ADVANCED ENCRYPTION STANDARD [online]. Federal Information Processing Standards Publications . 2001 [cit. 2014-04-15]. Dostupn´e z : . [27] STEVENS, Marc. Single-block collision attack on MD5. In: Cryptology Group, CWI [online]. 2011 [cit. 2014-04-15]. Dostupn´e z : . [28] SubBytes() applies the S-box to each byte of the State. In: Announcing the ADVANCED ENCRYPTION STANDARD [online]. Federal Information Processing Standards Publications . 2001 [cit. 2014-04-15]. Dostupn´e z : . ˇ [29] SLECHTA, Pavel. C++ library implementing The Stanford Secure Remote Password Protocol - SRP (SRP6a) [online]. 2012 [cit. 2014-04-21]. Dostupn´e z : .
66
Literatura [30] The CBC Mode. In: NIST Special Publication 800-38A [online]. DWORKIN, Morris. 2001 [cit. 2014-04-15]. Dostupn´e z : . [31] The CFB Mode. In: NIST Special Publication 800-38A [online]. DWORKIN, Morris. 2001 [cit. 2014-04-15]. Dostupn´e z : . [32] TAN, Darell. Publishing Services over mDNS in C In: Adventures of an electronics & software guy [online]. 1997 [cit. 2014-04-15]. Dostupn´e z : . [33] TANENBAUM, ANDREW S. a DAVID J. WETHERALL. Computer Networks. 5. vyd. New Jersey: Prentice Hall, 2010. ISBN 978-0132126953. [34] WANG, Xiaoyun. YU, Hongbo. How to break MD5 and other hash functions. Advances in Cryptology [online]. 2005 [cit. 2014-04-15]. Dostupn´e z : . [35] wiki: Creating multiple outputs. In: FFmpeg [online]. 2014 [cit. 2014-04-19]. Dostupn´e z : . [36] WU, Thomas. SRP-6: Improvements and Refinements to the Secure Remote Password Protocol. In: Submission to the IEEE P1363 Working Group [online]. 2002 [cit. 2014-04-15]. Dostupn´e z : . [37] WU, Thomas. The secure remote password protocol. In: Internet Society Network and Distributed System Security Symposium [online]. 1997 [cit. 201404-15]. Dostupn´e z : .
67
Pˇ r´ılohy
68
Uˇ zivatelsk´ a pˇ r´ıruˇ cka Aplikace se skl´ad´a ze dvou ˇca´st´ı, serveru a klienta. Server mus´ı b´ yt spuˇstˇen na zaˇr´ızen´ı, na kter´em je kamera a mikrofon (u d´ıtˇete), a klient na zaˇr´ızen´ı s monitorem a reproduktory (u rodiˇc˚ u). Aplikace byla prim´arnˇe vytvoˇrena pod syst´emem Windows 7, ale je ji moˇzn´e pˇreloˇzit i pod syst´emem Debian (pokud je na nˇem nainstalov´ano Qt a OpenSSL). Pod Windows je nutn´e m´ıt nainstalov´an DirectShow (pro pˇreklad aplikace i Qt a OpenSSL).
Instalace Pod syst´emy Windows je moˇzn´e pouˇz´ıt instalaˇcn´ı bal´ıˇcek, kter´ y provede nainstalov´an´ı programu. Pˇri instalaci jsou pˇrekop´ırov´any vˇsechny potˇrebn´e soubory do sloˇzky, kterou si uˇzivatel vybere. Po nainstalov´an´ı je jeˇstˇe moˇzn´e vytvoˇrit z´astupce, a toho um´ıstit napˇr. na plochu. Pro server a klienta je tento postup trochu odliˇsn´ y. Instalaˇcn´ı soubory se nach´az´ı ve sloˇzk´ach install pro server i klienta. Pokud se nedodrˇz´ı pokyny n´ıˇze, programy sice p˚ ujdou spustit, ale nebudou fungovat vˇsechny jejich souˇc´asti.
Server Postup pro nainstalov´an´ı serveru je n´asleduj´ıc´ı: 1. Spustit soubor server/install/server setup.exe. 2. Postupovat podle pokyn˚ u na obrazovce. 69
Pˇr´ılohy 3. Po dokonˇcen´ı instalace je moˇzn´e vytvoˇrit z´astupce na ploˇse. 4. Pˇrem´ıstˇete se do sloˇzky, kam se program nainstaloval, a prav´ ym tlaˇc´ıtkem kliknˇete na soubor DP-server.exe a zvolte Odeslat → Plocha(vytvoˇrit z´astupce). 5. Pokud byl program nainstalov´an do Program Files, pak je nutn´e spouˇstˇet tohoto z´astupce vˇzdy jako administr´ator. 6. Pokud byl program nainstalov´an jinam, je moˇzn´e ho spouˇstˇet norm´alnˇe.
Klient Postup pro nainstalov´an´ı klienta je n´asleduj´ıc´ı: 1. Spustit soubor klient/install/client setup.exe. 2. Postupovat podle pokyn˚ u na obrazovce. 3. Po dokonˇcen´ı instalace je moˇzn´e vytvoˇrit z´astupce na ploˇse. 4. Pˇrem´ıstˇete se do sloˇzky, kam se program nainstaloval, a prav´ ym tlaˇc´ıtkem kliknˇete na soubor DP-server.exe a zvolte Odeslat → Plocha(vytvoˇrit z´astupce). 5. Nen´ı nutn´e spouˇstˇet tento program jako administr´ator.
Spuˇ stˇ en´ı Programy lze spustit bud’ pˇr´ımo ze sloˇzky, kde jsou nainstalovan´e DP-server.exe a DP-client.exe, nebo pomoc´ı z´astupce, kter´ y byl vytvoˇren podle n´avodu v pˇredeˇsl´e kapitole. Po spuˇstˇen´ı (serveru nebo klienta) budete vyzv´ani k povolen´ı vyuˇz´ıv´an´ı s´ıt’ov´eho pˇripojen´ı. S´ıt’ov´e pˇripojen´ı je pro chod obou program˚ u nezbytn´e.
Server Po kliknut´ı na ikonu serveru se otevˇre konzole, a v n´ı by se mˇel objevit v´ ypis podobn´ y uk´azce 6.1. To, co se bude liˇsit, je 2. a 3. ˇr´adek, protoˇze zde se vypisuj´ı
70
Pˇr´ılohy dostupn´a zaˇr´ızen´ı pro sn´ım´an´ı obrazu (1.3M HD WebCam) a zvuku (Mikrofon (Conexant High Definit).
16:04:35-25.04.2014 16:04:36-25.04.2014 16:04:36-25.04.2014 High Definit" 16:04:36-25.04.2014 16:04:36-25.04.2014 16:04:36-25.04.2014 16:04:36-25.04.2014
Multicast server has started on port 9999 FFmpeg: Found video device: "1.3M HD WebCam" FFmpeg: Found audio device: "Mikrofon (Conexant HTTPS Server has started on port 9443 File src/client/files/clients was decrypted. Users have been loaded from file. Server has started on port 9001
(6.1) To, co se bude d´ale v konzoli zobrazovat, nen´ı d˚ uleˇzit´e, jedn´a se o logovac´ı v´ ypis ud´alost´ı na serveru. Server je moˇzn´e ukonˇcit zavˇren´ım konzole. Mnohem lepˇs´ı je ale do konzole napsat slovo quit. T´ımto dojde k bezpeˇcn´emu ukonˇcen´ı serveru. Server se ukonˇc´ı v okamˇziku, kdy se konzole zavˇre. Pokud je st´ale otevˇren´a, mohlo se st´at, ˇze se jednu souˇc´ast serveru nepodaˇrilo vypnout, jedn´a se o program mdns server.exe a je nutn´e ho ukonˇcit ruˇcnˇe pˇres Spr´avce u ´loh syst´emu Windows.
Klient Klient se spouˇst´ı aˇz po tom, co server bˇeˇz´ı. Po spuˇstˇen´ı se objev´ı pˇrihlaˇsovac´ı okno (viz obr. P 1). V tomto oknˇe se vyplˇ nuje IP adresa serveru nebo n´azev serveru, kter´ y je nastaven na ip.baby.monitor. Druh´e pole obsahuje port, na kter´em server bˇeˇz´ı, a pokud se nemˇenilo nastaven´ı, mˇel by odpov´ıdat ˇc´ıslu 9001. Posledn´ı dvˇe pole jsou uˇzivatelsk´e jm´eno a heslo. Tyto u ´daje je nejdˇr´ıve nutn´e registrovat pomoc´ı webov´eho rozhran´ı (viz kap. 6).
Po stisku tlaˇc´ıtka Login se spust´ı pˇrihlaˇsovac´ı proces, kter´ y m˚ uˇze skonˇcit hned nˇekolika chybami:
71
Pˇr´ılohy
Obr. P 1: Pˇrihlaˇsovac´ı okno do aplikace klienta. • Connection to server failed. - Spojen´ı se serverem nebylo nav´az´ano. Bud’ je ˇspatnˇe IP adresa, port nebo server v˚ ubec nen´ı zapnut´ y. • Authentication failed. Username or password is incorrect. - Pokud je zad´ano ˇspatn´e uˇzivatelsk´e jm´eno nebo heslo. • Username can not be empty. - Pokud se nezad´a uˇzivatelsk´e jm´eno. • Password can not be empty. - Pokud se nezad´a heslo. ˇ ıslo portu neodpov´ıd´a povo• Server port is not valid (9000-65535). - C´ len´emu rozsahu. Pokud vˇse probˇehne tak, jak m´a, otevˇre se okno pˇrehr´avaˇce (viz obr. P 2) a v oznamovac´ı oblasti se vytvoˇr´ı ikona (mal´a web kamera) pro tento pˇrehr´avaˇc (viz obr. P 3 (a)). Po u ´spˇeˇsn´em spojen´ı se serverem se IP adresa uloˇz´ı do souboru. Po stisku ikony prav´ ym tlaˇc´ıtkem myˇsi se objev´ı menu (viz P 3 (b)), kter´e umoˇzn ˇuje zvˇetˇsen´ı/zmenˇsen´ı a ukonˇcen´ı pˇrehr´avaˇce. Okno pˇrehr´avaˇce je rozdˇeleno mezerou na dvˇe ˇca´sti, kde lev´a slouˇz´ı pro nastaven´ı streamu a prav´a pro jeho spuˇstˇen´ı/ukonˇcen´ı/ukl´ad´an´ı. Pokud chce uˇzivatel sledovat video+audio nebo jen audio, vˇzdy mus´ı stisknout tlaˇc´ıtko Play. Pokud chce zmˇenit nastaven´ı a sledovat napˇr. m´ısto videa jen audio, pak je vˇzdy nutn´e pˇrehr´av´an´ı nejdˇr´ıve ukonˇcit pomoc´ı Stop, zmˇenit nastaven´ı a znovu zapnout.
Lev´a ˇc´ast je rozdˇelena do menˇs´ıch sekc´ı. Prvn´ı s n´azvem Stream umoˇzn ˇuje vybrat, zda se bude pˇrehr´avat video+audio nebo jen audio. Pokud se zaˇskrtne samotn´e audio, pak je moˇzn´e zruˇsit zobrazov´an´ı okno (Display window ), ve kter´em se, za jin´ ych okolnost´ı, zobrazuje video. V pˇr´ıpadˇe audia v tomto oknˇe bˇeˇz´ı zvukov´a vlna. 72
Pˇr´ılohy
Obr. P 2: Klientsk´ y program - pˇrehr´avaˇc.
(a) Ikona
(b) Menu
Obr. P 3: Ikona pˇrehr´avaˇce. Vypnut´ı zobrazovac´ıho okna m´a vliv pouze na audio stream, u video streamu vypnout nelze.
Druh´a sekce s n´azvem Change monitoring d´av´a vybrat, zda chce b´ yt uˇzivatel upozornˇen, pokud nastane zv´ yˇsen´ı hlasitosti (Audio change) nebo pohyb pˇred kamerou (Video change). Pokud je nˇeco zaˇskrtnuto, pak pokaˇzd´e, kdyˇz pˇr´ısluˇsn´a zmˇena nastane, obdrˇz´ı uˇzivatel varov´an´ı v podobˇe zobrazen´ı zpr´avy v oznamovac´ı oblasti (viz obr. P 4). Kromˇe toho se zmˇen´ı i ikona pˇrehr´avaˇce, pˇribude u n´ı mal´ y ˇzlut´ y vykˇriˇcn´ık. Pokud se na ikonu pˇrehr´avaˇce klikne, kdyˇz je u n´ı tento vykˇriˇcn´ık, pak se zobraz´ı posledn´ı zmˇena, kter´a nastala (viz obr. P 5).
Obr. P 4: Zobrazen´ı zpr´avy u klienta pˇri zmˇenˇe.
73
Pˇr´ılohy
Obr. P 5: Zobrazen´ı posledn´ı obdrˇzen´e zpr´avy o zmˇenˇe v oznamovac´ı oblasti po stisku ikony pˇrehr´avaˇce. Posledn´ı sekce m´a n´azev Turn on a d´av´a uˇzivateli na v´ ybˇer, zda chce zapnout pˇrehr´av´an´ı hned nebo aˇz pˇri zmˇenˇe. Pokud se vybere pˇrehr´av´an´ı streamu hned (Play now ), pak je po stisku tlaˇc´ıtka Play, asi po 10 sekund´ach, spuˇstˇeno okno, ve kter´em bˇeˇz´ı stream odchyt´avan´ y kamerou na serveru. Pˇri v´ ybˇeru Play on change se zobrazovac´ı okno zapne aˇz v okamˇziku(opˇet po 10 sekund´ach), kdy se objev´ı v oznamovac´ı oblasti zpr´ava o zmˇenˇe. Okno pak z˚ ustane otevˇren´e 15 sekund, a pak se zavˇre. Doba, jak dlouho m´a b´ yt okno otevˇren´e, se d´a nastavit v konfiguraˇcn´ım souboru (viz 6).
Pokud je zaˇskrtnut´e pˇrehr´av´an´ı hned (Play now ), pak je moˇzn´e ukl´adat pˇrehr´avan´ y stream do souboru. Pˇri pˇrehr´av´an´ı pˇri zmˇenˇe to moˇzn´e nen´ı. Pro ukl´ad´an´ı do souboru mus´ı b´ yt zaˇskrtnut´e pol´ıˇcko s n´apisem (Save to file). Pomoc´ı tlaˇc´ıtka (Browse) je moˇzn´e si vybrat, kam se soubor uloˇz´ı. N´azev souboru je d´an napevno a obsahuje datum a ˇcas, kdy se soubor zaˇcal ukl´adat.
Pokud na obou zaˇr´ızen´ıch bˇeˇz´ı programy ffmpeg.exe i ffplay.exe a pˇresto se ˇza´dn´ y stream nepˇrehr´av´a, m˚ uˇze to b´ yt zp˚ usobeno t´ım, ˇze pˇr´ıchoz´ı data streamu blokuje firewall.
Webov´ e rozhran´ı Nastaven´ı serveru je pˇr´ıstupn´e pˇres webov´e rozhran´ı. Toto rozhran´ı se d´a otevˇr´ıt v bˇeˇzn´em webov´em prohl´ıˇzeˇci na adrese https://:9443/. IP adresa serveru je stejn´a, jako se vyplˇ nuje pro pˇrihl´aˇsen´ı do klientsk´e aplikace. Na t´eto adrese se nach´az´ı pˇrihlaˇsovac´ı formul´aˇr do rozhran´ı. Uˇzivatelsk´e jm´eno je nastaveno na admin a heslo na 111111. Heslo se doporuˇcuje zmˇenit. Veˇsker´e hodnoty, kter´e se ve webov´em rozhran´ı nastavuj´ı, se t´ ykaj´ı vˇsech klient˚ u. 74
Pˇr´ılohy
Po u ´spˇeˇsn´em pˇrihl´aˇsen´ı se zobraz´ı str´anka s menu, kde jsou poloˇzky: • Add user - Pˇrid´av´an´ı nov´ ych uˇzivatel˚ u, kteˇr´ı se pak pod tˇemito u ´daji mohou pˇrihl´asit do klientsk´e aplikace. • Audio/Video options - Nastaven´ı mez´ı pro detekci zmˇen hlasitosti a pohybu. • FFmpeg options - Nastaven´ı parametr˚ u streamu. • Server settings - Nastaven´ı serveru. Na kaˇzd´e str´ance se opakuj´ı dva odkazy, jeden je Back to menu, kter´ y vrac´ı str´anku s hlavn´ım menu, a Log out, kter´ y provede odhl´aˇsen´ı z webov´eho rozhran´ı.
Pˇ rid´ an´ı nov´ ych uˇ zivatel˚ u Str´anka obsahuje formul´aˇr, kde se vypln´ı uˇzivatelsk´e jm´eno a heslo. Jm´eno i heslo maj´ı stejn´a pravidla. Oboje m˚ uˇze b´ yt maxim´alnˇe 50 a minim´alnˇe 6 znak˚ u dlouh´e a sm´ı obsahovat pouze znaky: velk´a a mal´a p´ısmena bez diakritiky, ˇc´ıslice, teˇcku, hvˇezdiˇcku, podtrˇz´ıtko a pomlˇcku. Pokud bude jm´eno nebo heslo obsahovat nepovolen´e znaky nebo bude m´ıt ˇspatnou d´elku, neuloˇz´ı se. Uˇzivatel je o u ´spˇechu uloˇzen´ı informov´an vˇetou, kter´a se objev´ı nad formul´aˇrem po vloˇzen´ı u ´daj˚ u. Pokud se u ´daje uloˇz´ı, pod formul´aˇrem bude vyps´ano jm´eno novˇe pˇridan´eho uˇzivatele (viz obr. P 7).
Obr. P 6: Str´anka pro pˇrid´an´ı nov´ ych klient˚ u.
75
Pˇr´ılohy
Obr. P 7: Seznam registrovan´ ych uˇzivatel˚ u. Kromˇe pˇrid´an´ı nov´ ych klient˚ u je zde i tlaˇc´ıtko Delete all users, kter´e provede smaz´an´ı vˇsech uˇzivatel˚ u v zobrazen´em seznamu. Po t´eto akci se jiˇz nen´ı moˇzn´e pod p˚ uvodnˇe zadan´ ymi u ´daji pˇrihl´asit.
Nastaven´ı detekce zmˇ en Na t´eto str´ance je moˇzn´e nastavit tolerance pro detekci zmˇen. Prvn´ı pole je pro hlasitost a ud´av´a hladinu zvuku v decibelech. Pokud je tato hladina pˇrekroˇcena, je posl´ana zpr´ava klientovi, kter´a se zobraz´ı v oznamovac´ı oblasti (viz obr. P 5). V´ ychoz´ı hodnota je 40dB, coˇz odpov´ıd´a tich´e knihovnˇe. Minim´aln´ı hodnotu lze nastavit na 0dB a maxim´aln´ı na 120dB (start tryskov´eho letadla). Druh´e pole je pro detekci pohybu a hodnoty zobrazuje v procentech. Ud´av´a, o kolik procent se mus´ı zmˇenit jeden sn´ımek oproti pˇredchoz´ımu. V´ ychoz´ı hodnota je 10%.
Obr. P 8: Str´anka pro nastaven´ı mez´ı pro detekce zmˇen. D´ale je na t´eto str´ance k dispozici tlaˇc´ıtko Original settings, kter´e zp˚ usob´ı nastaven´ı v´ yˇse zm´ınˇen´ ych parametr˚ u do v´ ychoz´ıch hodnot (40dB a 10% ). Zmˇena parametru pro detekci pohybu se projev´ı ihned i pˇri jiˇz zapnut´em sledov´an´ı streamu. Aby se projevila zmˇena tolerance hlasitosti, je nejdˇr´ıve nutn´e ukonˇcit pˇrehr´av´an´ı streamu na vˇsech pˇripojen´ ych klientech (nen´ı nutn´e program klienta vypnout u ´plnˇe). Pˇri dalˇs´ım zapnut´ı se jiˇz pouˇzije novˇe nastaven´a hodnota.
76
Pˇr´ılohy Nastaven´ı streamu Na t´eto str´ance je moˇzn´e upravovat vlastnosti pˇrehr´avan´eho streamu (viz obr. P 9). Veˇsker´e zmˇeny se, stejnˇe jako u zmˇeny hlasitosti, projev´ı aˇz po tom, co vˇsichni klienti ukonˇc´ı pˇrehr´av´an´ı streamu. Uˇzivatel zde m´a na v´ ybˇer vˇzdy z nˇekolika hodnot. Parametry, kter´e je moˇzn´e nastavovat, jsou: rozliˇsen´ı obrazu, bit rate, poˇcet audio kan´al˚ u, audio frekvence, poˇcet sn´ımk˚ u za sekundu, kvalita videa. ˇ ım vyˇsˇs´ı hodnoty Kvalita videa je od 1 do 11, kde 1 je nejlepˇs´ı a 11 nejhorˇs´ı. C´ se nastav´ı (kromˇe kvality), t´ım bude stream lepˇs´ı, ale z´aroveˇ n se mus´ı pˇren´aˇset vˇetˇs´ı objem dat a pomalejˇs´ı pˇripojen´ı by to nemusela zvl´adat. V´ ychoz´ı hodnoty jsou uvedeny na obr´azku P 9. I zde je moˇzn´e vr´atit zmˇenˇen´e hodnoty do p˚ uvodn´ıho nastaven´ı tlaˇc´ıtkem Original settings.
Obr. P 9: Str´anka pro nastaven´ı parametr˚ u streamu.
77
Pˇr´ılohy Pole FFmpeg command umoˇzn ˇuji zkuˇsen´ ym uˇzivatel˚ um, zadat si sv˚ uj vlastn´ı pˇr´ıkaz k z´ısk´an´ı streamu ze zaˇr´ızen´ı. Takto uloˇzen´ y pˇr´ıkaz je spouˇstˇen do t´e doby, neˇz dojde k restartu serveru. Nastaven´ı p˚ uvodn´ıho pˇr´ıkazu je moˇzn´e po uloˇzen´ı pr´azdn´eho pole FFmpeg command .
Nastaven´ı serveru Na posledn´ı str´ance je moˇzn´e zmˇenit nastaven´ı serveru (viz obr P 10). Toto nastaven´ı se doporuˇcuje nemˇenit, pokud to nen´ı opravdu nutn´e, tj. porty pouˇz´ıvan´e serverem uˇz pouˇz´ıv´a jin´a aplikace. Zmˇena port˚ u se samozˇrejmˇe projev´ı aˇz po restartu serveru. Kromˇe port˚ u je jeˇstˇe moˇzn´e mˇenit heslo do administr´atorsk´e ˇca´sti. Pro u ´spˇeˇsnou zmˇenu je nejdˇr´ıve nutn´e zadat star´e heslo. Nov´e heslo se ˇr´ıd´ı stejn´ ymi pravidly jako hesla pˇri registraci uˇzivatel˚ u (tj. mus´ı b´ yt v rozmez´ı 6-50 znak˚ u a m´a omezenou mnoˇzinu pouˇziteln´ ych symbol˚ u). Pokud nechcete mˇenit heslo, nech´ate obˇe pole pr´azdn´a.
Obr. P 10: Str´anka pro nastaven´ı serveru. Posledn´ım nastaviteln´ ym parametrem je Private addsesses. Pokud je tento parametr zaˇskrtnut´ y, znamen´a to, ˇze do webov´eho rozhran´ı se dostanou pouze webov´ı klienti, kteˇr´ı jsou na stejn´e pods´ıti jako server. Pokud tomu tak nebude, zobraz´ı se varovn´a hl´aˇska (Connection Error!!! You can not connect to the server from different subnet than server is located.) a klient se nem˚ uˇze do rozhran´ı pˇrihl´asit.
78
Pˇr´ılohy I zde je moˇzn´e vr´atit p˚ uvodn´ı nastaven´ı. To se vˇsak nevztahuje na vr´acen´ı p˚ uvodn´ıho hesla.
Probl´ emy Pˇri spouˇstˇen´ı aplikace se m˚ uˇze vyskytnou probl´em administr´atorsk´ ymi pr´avy. Proto je nunt´e postupovat pˇresnˇe podle n´avodu pro instalaci. Kromˇe to je moˇzn´e, ˇze syst´emov´ y firewall nepropust´ı pˇr´ıchoz´ı stream. To se d´a odstranit tak, ˇze se spust´ı Start, nap´ıˇse se firewall a vybere se odkza Br´ana Windows Firewall. Stejn´eho efektu se d´a dos´ahnout spuˇstˇen´ım odkazu Ovl´adac´ı panely\Syst´em a zabezpeˇcen´ı\Br´ana Windows Firewall v pr˚ uzkumn´ıku. V otevˇren´em oknˇe se v lev´em panelu klikne na Upˇresnit nastaven´ı. Otevˇre se nov´e okno (viz obr. P 11) a zde v lev´em panelu vybere z´aloˇzka Pˇr´ıchoz´ı pravidla. Zobraz´ı se seznam aplikac´ı a v nˇem najdˇete DPclient, kliknˇete na n´ı prav´ ym tlaˇc´ıtkem a vyberte vlastnosti. V otevˇren´em oknˇe, v z´aloˇzce Obecn´e, pˇrekliknˇete z Blokovat pˇripojen´ı na Povolit pˇripojen´ı (viz obr. P 12).
Obr. P 11: Nastaven´ı povolen´ı aplikace ve firewallu syst´emu.
79
Pˇr´ılohy
Obr. P 12: Povolen´ı pˇr´ıchoz´ıho spojen´ı na klienta.
Konfiguraˇ cn´ı soubory ˇ adky zaˇc´ınaj´ıc´ı Oba programy maj´ı konfiguraˇcn´ı soubory, kter´e je moˇzn´e mˇenit. R´ # jsou koment´aˇre a programy je pˇri naˇc´ıt´an´ı souboru ignoruj´ı.
Server Server m´a veˇsker´e nastaven´ı pˇr´ıstupn´e pˇres webov´e rozhran´ı. Pokud by se do nˇej z nˇejak´eho d˚ uvodu nedalo dostat, je jeˇstˇe moˇzn´e hodnoty upravit pˇr´ımo v konfiguraˇcn´ıch souborech. Tyto soubory se nach´az´ı ve sloˇzce IP baby monitor\server\src\server\web interface\setting. Upravovat se smˇej´ı pouze soubory bez pˇr´ıpony o, tedy avoption, avset, server. Soubory s touto pˇr´ıponou obsahuj´ı v´ ychoz´ı nastaven´ı a nesm´ı se ani upravovat ani mazat. 80
Pˇr´ılohy
• avoption - Obsahuje nastaven´ı limit˚ u pro detekce zmˇen (viz uk´azka 6.2). noise je hladina zvuku a frame je zmˇena obrazu. • avset - Obsahuje nastaven´ı parametr˚ u streamu (viz uk´azka 6.3). resol je rozliˇsen´ı obrazu, bitra je bit rate, chann je poˇcet audio kan´al˚ u, frekv je frekvence audia, frame je poˇcet r´amc˚ u za sekundu a quali je kvalita videa. • server - Obsahuje nastaven´ı serveru (viz uk´azka 6.4). mport je port, kde server pˇrij´ım´a klienty (pˇrehr´avaˇc), sport je port pro pˇr´ıjem klient˚ u pˇres HTTPS, avport je port udp serveru, kam je pos´ıl´an audio+video stream, aport je to sam´e jako avport, ale jen pro audio, private false znamen´a, ˇze se do webov´eho rozhran´ı mohou pˇrihl´asit i klienti z jin´e pods´ıtˇe a name je jm´eno serveru, pod kter´ ym ho lze na pods´ıti naj´ıt.
noise=40 frame=10 (6.2)
resol=800x600 bitra=282000 chann=1 frekv=16000 frame=30 quali=9 (6.3)
mport=9001 sport=9443 avport=9002 81
Pˇr´ılohy aport=9004 private=false name=ip.baby.monitor (6.4)
Klient Klient m´a k dispozici jeden konfiguraˇcn´ı soubor, kter´ y se ned´a nastavit jinak, neˇz otevˇren´ım v nˇejak´em pozn´amkov´em bloku. Jeho obsah je zobrazen v uk´azce 6.5. SERVER NAME je n´azev serveru, DEFAULT SERVER IP je IP adresa serveru, SERVER UDP AV SEND PORT je port, na kter´em server vys´ıl´a audio+video stream, STREAM SAVE PORT je port, kam klient pˇrepos´ıl´a stream, pokud se m´a ukl´adat do souboru, MESSAGE SHOW DURATION ke poˇcet sekund, jak dlouho se bude zobrazovat zpr´ava v oznamovac´ı oblasti, WINDOW SHOW DURATION je poˇcet sekund, jak dlouho se bude zobrazovat okno se streamem, pokud se objevuje jen pˇri zmˇen´ach1 .
# Server name. SERVER_NAME=ip.baby.monitor # Server default IP address. DEFAULT_SERVER_IP=127.0.0.1 # Udp port where audio/video stream is sent. SERVER_UDP_AV_SEND_PORT=9002 # Udp port where audio stream is sent. SERVER_UDP_AUDIO_SEND_PORT=9004 # Udp port where stream is sent and save to file. STREAM_SAVE_PORT=9006 # How long the tray message will bo shown [s]. MESSAGE_SHOW_DURATION=10 # How long the stream player will play. [s]. WINDOW_SHOW_DURATION=25 (6.5) 1
Tato doba je vˇcetnˇe 10 sekund, po kter´e trv´a, neˇz se okno otevˇre. Pokud se tedy nastav´ı doba na m´enˇe neˇz 11 sekund, okno se pravdˇepodobnˇe v˚ ubec nestihne otevˇr´ıt.
82
Pˇr´ılohy
Certifik´ at Certifik´at, kter´ y server pouˇz´ıv´a pro vytv´aˇren´ı spojen´ı pomoc´ı HTTPS, nen´ı ovˇeˇren ˇz´adnou certifikaˇcn´ı autoritou, a tak se pˇri kaˇzd´em pˇrihl´aˇsen´ı, bude webov´ y prohl´ıˇzeˇc pt´at, jestli m´a pokraˇcovat i pˇres ned˚ uvˇeryhodnost certifik´atu. Toto se d´a odstranit t´ım, ˇze se dan´ y certifik´at, kter´ y je ve sloˇzce IP baby monitor\certifikat\ip baby monitor cert.pfx, nainstaluje do poˇc´ıtaˇce mezi D˚ uvˇeryhodn´e koˇrenov´e certifikaˇcn´ı autority, a tak´e se pˇrid´a do prohl´ıˇzeˇce, se kter´ ym se bude do rozhran´ı pˇristupovat. Pˇri instalaci bude vyˇzadov´ano heslo, kter´e je nastaveno na 1a8G.h6. Pro prohl´ıˇzeˇc Opera je moˇzn´e certifik´at pˇridat takto: N´astroje − > Nastaven´ı... − > Pokroˇcil´e volby − > Zabezpeˇcen´ı − > Spr´avce certifik´at˚ u − > Importovat. Pro prohl´ıˇzeˇc Mozilla Firefox je moˇzn´e certifik´at pˇridat takto: N´astroje − > Moˇznosti − > Rozˇs´ıˇren´ı − > Certifik´aty − > Certifik´aty − > Osobn´ı − > Importovat. Pro prohl´ıˇzeˇc Chrome je moˇzn´e certifik´at pˇridat takto: N´astroje − > Rozˇs´ıˇren´ı − > Nastaven´ı − > Spravovat certifik´aty − > Importovat... . Pro prohl´ıˇzeˇc Internet Explorer je moˇzn´e certifik´at pˇridat takto: Nastaven´ı − > Moˇznosti internetu − > Obsah − > Certifik´aty − > Importovat... .
Zobrazovac´ı okno pro stream Spuˇstˇen´ y stream je pˇrehr´av´an v samostatn´em oknˇe, kter´e je nez´avisl´e na pˇrehr´avaˇci, kter´ y je na obr. P 4. To znamen´a, ˇze pokud se toto okno vypne, pˇrehr´avaˇc se to nedozv´ı, a je nutn´e ho samostatnˇe ukonˇcit tlaˇc´ıtkem Stop. Pˇrehr´avaˇc i se spuˇstˇen´ ym oknem pro stream je na obr. P 13. Pokud se ale ukonˇc´ı pˇrehr´avaˇc, pak by se mˇelo ukonˇcit i toto okno. Jelikoˇz se jedn´a o samostatn´ y program, m´a v sobˇe implementov´ano vlastn´ı ovl´ad´an´ı. Na toto okno je tedy moˇzn´e uplatnit n´asleduj´ıc´ı kl´avesy: • q, ESC - vypnut´ı okna • f - pˇrepnut´ı na celou obrazovku
83
Pˇr´ılohy • p, mezern´ık - pauza • s - proch´azen´ı videa r´amec po r´amci, pˇredt´ım se mus´ı zm´aˇcknout pauza • ˇsipka doprava - posunut´ı na aktu´aln´ı pozici v live streamu • w - pˇrepnut´ı n´ahledu na zvukov´e vlny
Obr. P 13: N´ahled na spuˇstˇen´ y pˇrehr´avaˇc i s oknem se streamem.
84
Obsah CD Na pˇriloˇzen´em CD jsou ve sloˇzce IP baby monitor adres´aˇre: • certifikat - Obsahuje instalaˇcn´ı certifik´at ip baby monitor cert.pfx. • dokumentace - Obsahuje text k diplomov´e pr´aci ve form´atu pdf. • klient - Obsahuje veˇsker´e souˇc´asti klientsk´eho programu jako pˇreloˇzen´e soubory, instalaˇcn´ı soubor, zdrojov´e soubory a adres´aˇr se spustiteln´ ym programem. • opswi - Obsahuje oborov´ y projekt, kter´ y se nad r´amec zad´an´ı diplomov´e pr´ace zab´ yv´a implementac´ı serveru na zaˇr´ızen´ı BeagleBone Black s procesorem ARM a pˇrehr´av´an´ım streamu v XBMC. • scripty pro instalaci - Obsahuje scripty (Inno Setup), kter´e generuj´ı instalaˇcn´ı .exe soubory. • server - Obsahuje veˇsker´e souˇca´sti programu serveru jako pˇreloˇzen´e soubory, instalaˇcn´ı soubor, zdrojov´e soubory a adres´aˇr se spustiteln´ ym programem. Server i klient obsahuj´ı stejn´e podadres´aˇre: • bin - Obsahuje pˇreloˇzen´e soubory vˇsech souˇca´st´ı dan´eho programu (pod Windows). • install - Obsahuje instalaˇcn´ı program. • run - Obsahuje spustitelnou verzi programu. (To sam´e je pak ve sloˇzce, kam se program nainstaluje.) • src - Obsahuje zdrojov´e k´ody vˇsech souˇca´st´ı spolu s MAKEFILE a knihovnami. 85
Pˇr´ılohy Aby bylo moˇzn´e pˇreloˇzit jak server, tak klienta, mus´ı b´ yt na syst´emu Windows nainstalov´ana knihovna pro pr´aci s Posix vl´akny (viz [22]). D´ale je pro oba syst´emy nutn´a instalce knihovny OpenSSL a pro klienta pak jeˇstˇe Qt. Zdrojov´e k´ody ve sloˇzce server/src/server se pˇrekl´ad´aj´ı pomoc´ı MAKEFILE pro dan´ y operaˇcn´ı syst´em (Makefile.Linux nebo Makefile.Windows). Zdrojov´ y k´od klienta um´ıstˇen´ yv klient/src/klient se pˇrekl´ad´a pomoc´ı Windows run.bat a nebo Makefile.Linux.
FFmpeg Na CD jsou k dispozici i zdrojov´e soubory pro n´astroje ffmpeg.exe a ffplay.exe. Jejich pˇreloˇzen´ı pod syst´emem Windows je realizovateln´e a je popsan´e na f´oru, kter´e FFmpeg spravuje [1].
86