Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset Tekninen määrittely
Sisällysluettelo 1. Johdanto...5 1.1. Tarkoitus ja kattavuus...5 1.2. Tuote ja ympäristö...5 1.3. Määritelmät, termit ja lyhenteet...6 1.4. Viitteet...7 1.5. Yleiskatsaus dokumenttiin...8 2. Järjestelmän yleiskuvaus...9 2.1. Sovellusalueen kuvaus...9 Järjestelmän liittyminen ympäristöönsä...10 2.2.1. Editori...10 2.2.2. Ohjelma-ajan välityskomponentti...10 2.2.3. Koordinaattien välityskomponentti...10 2.2.4. Xlet-esimerkkisovellus...11 2.3. Laitteistoympäristö...11 2.3.1. Editori...11 2.3.2. Ohjelma-ajan välityskomponentti...11 2.3.3. Koordinaattien välityskomponentti...11 2.3.4. Xlet-esimerkkisovellus...11 2.4. Ohjelmistoympäristö...12 2.4.1. Editori...12 2.4.2. Ohjelma-ajan välityskomponentti...12 2.4.3. Koordinaattien välityskomponentti...12 2.4.4. Xlet-esimerkkisovellus...13 2.5. Toteutuksen keskeiset reunaehdot...13 2.6. Sopimukset ja standardit...13 3. Arkkitehtuurin kuvaus...14 3.1. Ratkaisun suunnitteluperiaatteet...14 3.1.1. Editori...14 3.1.2. Ohjelma-ajanvälitys komponentin erityispiirteet...14 3.1.3. Koordinaattien välityskomponentin erityispiirteet...14 3.2. Tietokanta-arkkitehtuuri...15 3.3. Ohjelmistoarkkitehtuuri, moduulit ja prosessit...16 3.3.1. Editori...16 3.3.2. Ohjelma-ajan välityskomponentti...16 3.3.3. Koordinaattien välityskomponentti...18 3.4. Moduulien kommunikointi...19 3.4.1. Editori...19 3.4.2. Ohjelma-ajanvälitys komponentti...19 3.4.3. Koordinaattien välityskomponentti...19 4. Luokkakuvaukset: Editori...20 4.1. Com.digita.digitv...21 Tekninen määrittely 2
4.1.1. MPEGContainer...21 4.1.2. CoordinateObject...21 4.1.3. RectangleCoordinateObject...21 4.1.4. OvalCoordinateObject...21 4.2. Com.digita.digitveditor...21 4.2.1. EditorFrame...21 4.2.2. ObjectList...22 4.2.3. ObjectListItem...22 4.2.4. ProjectSettingsDialog...22 4.2.5. OpenProjectDialog...22 4.2.6. EditorFileFilter...22 4.2.7. PlaybackSettingsDialog...22 4.2.8. CustomFocusManager...22 4.2.9. RecentFiles...23 4.2.10. ObjectPropertiesDialog...23 4.2.11. LoadingWindow...23 4.2.12. Project...23 5. Luokkakuvaukset: Ohjelma-ajanvälityskomponentti...24 5.1. Receiver-paketti...24 5.2. Sender-paketti...25 5.3. Testui-paketti...26 5.4. Rinnakkaisuuden hallinta...26 6. Luokkakuvaukset: Koordinaattien välityskomponentti...28 6.1. converter paketti...28 6.2. sender paketti...29 6.3. receiver paketti...29 6.4. common paketti...29 7. Luokkakuvaukset: Xlet-esimerkkisovellus...30 7.1. MyXlet...30 7.2. XletCanvas...31 8. Erityiset tekniset ratkaisut...32 8.1. Editorin MPEG-2-videon käsittely...32 8.2. Ohjelma-ajan välityskomponentti...32 8.3. Koordinaattien välityskomponentti...32 9. Virheenkäsittely...33 9.1. Editorin virheenkäsittely...33 9.2. Ohjelma-ajan välityskomponentin virheenkäsittely...33 9.3. Koordinaattien välityskomponentin virheenkäsittely...34 10. Hylätyt ratkaisuvaihtoehdot...35 10.1. Editorin MPEG-2 videon käsittely...35 10.1.1. GPL-lisenssin alainen dekooderi...35 10.1.2. Videon purku DirectShown avulla...35 10.2. Hahmontunnistus...35 10.3. OAVK...37 Tekninen määrittely 3
10.3.1. Hot update tiedostot...37 10.3.2. Tyhjä MPEG-2 kuvavuo...37 10.3.3. Tekstitys...37 11. Jatkokehitysajatuksia...38 11.1. Ohjelma-ajan välityskomponentti...38 11.2. Koordinaattien välityskomponentti...38 Versio- ja muutoshistoria Versio Päiväys Tekijä Kuvaus 0.1 30.1.02 Pekka Koskinen Ensimmäinen luonnos 0.2 05.02.02 Pekka Koskinen Lisätty Editorin luokat 0.3 06.02.02 Pekka Koskinen Lisätty KVK:n osuus 0.4 08.02.02 Pekka Koskinen Muokkausta ryhmän kommenttien pohjalta 0.5 11.02.02 Pekka Koskinen Lisätty OAVK:n osuus 0.6 13.03.02 Ville Vaittinen Muutettu siirtotiedoston määrittelyä 0.7 25.03.02 Pekka Koskinen Yleispäivitys 0.8 03.04.02 Pekka Koskinen Direct-X => JMF 0.9 08.04.02 Pekka Koskinen Luokkakaavion päivitys 1.0 21.04.02 Pekka Koskinen Viimeistelyä 1.1 22.04.02 Pekka Koskinen Xlet-osuuden lisäys Tallennettu: 22.04.02 17:42 Tulostettu: 22.04.02 18:09 Tekninen määrittely 4
1. Johdanto 1.1. Tarkoitus ja kattavuus Teknisen määrittelyn tarkoituksena on suunnitella ja dokumentoida järjestelmän tekninen ratkaisu toteuttamista varten. Tämä dokumentti pitää sisällään koko järjestelmän arkkitehtuurin ja se on tehty erillisten editorin, ohjelma-ajan välityskomponentin, koordinaattien välityskomponentin teknisten määrittelyjen sekä Xlet-esimerkkisovelluksen toiminnallisen määrittelyn pohjalta [1,2, 3, 4]. Dokumentissa esitetty ohjelmistojen rakenne kattaa koko järjestelmän ja se on tarkoitettu avustamaan komponentin ohjelmointia ja lisäksi dokumentoimaan tehdyt tekniset ratkaisut. Dokumentti on suunnattu siis lähinnä järjestelmän toteuttajille, mutta myös niille jotka mahdollisesti ovat mukana jatkokehittämässä järjestelmää myöhemmin. Tässä dokumentissa kuvataan järjestelmän tekniset ongelmat ratkaisuineen ja eri komponentit toteuttavien ohjelmistojen rakenne. 1.2. Tuote ja ympäristö Tässä ohjelmatyössä toteutetaan sovellusalusta, jolla voidaan lisätä Digi-TV ohjelmien interaktiivisuutta. Ohjelmiin lisätään aktiivisia alueita, joita klikkaamalla kasoja laukaisee toiminnon ja saa esimerkiksi lisätietoa alueen alla olevasta henkilöstä tai objektista. Järjestelmä jakautuu neljään osaan: Editoriin, ohjelma-ajan välityskomponenttiin, koordinaattien välityskomponenttiin sekä vastaanottimessa pyörivään XLet-esimerkkisovellukseen. Järjestelmä sijoittuu kokonaisuudessaan Digi-TV ympäristöön ja sen tehtävänä on mahdollistaa tv-ohjelman kanssa synkronoitujen lisäpalveluiden tuottaminen ja toteuttaminen. Järjestelmä on kuvattu tarkemmin projektisuunnitelmassa [5]. Editori on editointityökalu, jonka avulla voidaan muodostaa tv-kuvasta parametri-informaatiota koordinaattimerkinnöiksi sekä synkronoida tämä tieto tiettyyn tv-kuvan hetkeen. Editori on esitetty yleisellä tasolla projektisuunnitelmassa, vaatimusmäärittelyssä sekä toiminnallisessa määrittelyssä [5, 6, 7]. Editointityökalua käyttää palveluntarjoaja. Käyttäjät ovat yksittäisiä eri palveluntarjoajien sisällöntuottajia. Työkalua käytetään studiossa, jossa lisäarvopalveluita tuotetaan. Editorin toiminta on kuvattu tarkemmin toiminnallisessa määrittelyssä [6]. Tekninen määrittely 5
Ohjelma-ajan välityskomponentin (OAVK) tehtävänä on tarjota vastaanottimen sovellukselle tarkka ohjelma-aika siten, että sovellus voi määrätyssä kohtaa ohjelmaa tarjota halutun ohjelmaan liittyvän lisäominaisuuden. Komponentin käyttäjiä ovat asiakaspäässä Java-sovellus ja lähetyspäässä ohjelman lähetyksestä vastaava henkilö tai lähetysjärjestelmä. Ohjelma-ajan välityskomponentin toiminta on kuvattu vaatimusmäärittelyssä [8]. Koordinaattien välityskomponentin (KVK) tehtävänä on välittää objektitietoa eli tietoa ruudun aktiivisista alueista. Tieto välitetään sovellukselle, joka määrittelee alueeseen liittyvän toiminnon eli sisällön. XLet-esimerkkisovelluksen tehtävänä on esitellä projektissa tuotetun synkronointijärjestelmän ominaisuuksia, jotka ovat ohjelma-ajan välitys ja aktiivisten alueiden muuttuminen tv-ohjelman mukaan. Xlet:tejä ladataan ohjelman lähettäjän toimesta katsojan päätelaitteisiin ja niiden avulla katsojalle voidaan tarjota vuorovaikutteisuutta lisääviä toimintoja. Xletesimerkkisovelluksen toiminta on määritelty toiminnallisessa määrittelyssä [4] Koska järjestelmä on tässä vaiheessa tutkimusluonteinen, ei siihen kuuluvilla tuotteilla ei vielä tässä vaiheessa kaupallisia nimiä, vaan niitä kutsutaan tässä vaiheessa editoriksi, ohjelma-ajan välityskomponentiksi, koordinaattien välityskomponentiksi sekä Xlet-esimerkkisovellukseksi. 1.3. Määritelmät, termit ja lyhenteet Koko projektiin liittyvät määritelmät, termit ja lyhenteet on esitetty erillisessä dokumentissa[9]. Niistä tärkeimmät ja tähän dokumenttiin liittyvät on esitetty oheisessa taulukossa. DVB Koordinaattiobjekti KVK MPEG-2 Digital Video Broadcasting: organisaatio, joka on kehittänyt digitaalisten TV-lähetysten standardeja Euroopassa. DVB:ssä on yli 200 jäsentä yli 25 maassa. Videokuvaan lisätty objekti, jolla voi olla erilaisia ominaisuuksia. Liittyy tiettyyn ajanhetkeen. Alkuvaiheessa suorakulmio tai ellipsi. Koordinaattien välityskomponentti MPEG-2 on häviöllinen liikkuvan kuvan ja äänen pakkausmenetelmä. MPEG-2 kooderille voidaan antaa erilaisia pakkausprofiileja sen mukaan millaista kuvanlaatua halutaan. Yhden MPEG-2 pakatun TV kanavan siirtoon tarvitaan 1.2 1.5 Mbps siirtokapasiteetti. MPEG-2 menetelmää käytetään sekä DVB:n että ATSC:n standardeissa. Tekninen määrittely 6
MHP NPT OAVK Objektitieto OC Ohjelma-aika MUX STB Projekti Stream Event UML Xlet Digital Video Broadcasting Multimedia Home Platform on avoin standardi, joka määrittelee katsojien päätelaiteissa olevan tekniikan. DVB-MHP mahdollistaa esimerkiksi Java sovelmien suorittamisen katsojien päätelaiteissa. Now Playing Time on suhteellinen aika liittyen lähetettävään ohjelmaan. Digi-TV järjestelmä ei välitä NPT:tä tarpeeksi tarkasti, jotta sitä voitaisiin käyttää sovellusten ja TVohjelmien synkronoinnissa. Katso myös Ohjelma-aika. Ohjelma-ajan välityskomponentti Tieto ruudulla esiintyvästä aktiivisesta alueesta. Object Carousel; Objektikaruselli, jossa tiedostot palveluntarjoajan palvelimelta digiboksiin. Pyörii ympäri vanhan kunnon teksti-tv :n tyyliin. Aika joka on kulunut ohjelman alkamisesta pois lukien mainoskatkot. Multiplekseri Set-Top-Box eli digi-tv vastaanotin, digiboksi Videokuvan ja siihen liittyvien aikaan sidottujen koordinaattitietojen ja geometristen objektien yhdistelmä Tapahtuma jonka objektikaruselli lähettää ja jonka jokin asiakkaan päätelaitteessa oleva sovellus huomaa. Unified Modelling Language on olio-ohjelmien ja tietokantojen suunnitteluun kehitetty mallinnus menetelmä. Xlet on Digi-TV:n tarpeisiin muokattu versio Java sovelmista (applet). Xlet:ien avulla voidaan toteuttaa monimutkaisia sovelluksia MHP laiteisiin. 1.4. Viitteet Tekninen määrittely perustuu seuraaviin muihin projektiryhmän tuottamiin dokumentteihin: [1] Tekninen määrittely: Editori 0.1, 11.12.2001 [2] Tekninen määrittely: Ohjelma-ajanvälitys 0.3, 11.12.2001 [3] Tekninen määrittely: Koordinaattilukija 0.1, 26.01.2002 [4] Toiminnallinen määrittely: Xlet-esimerkkisovellus 0.1, 7.12.2001 [5] Projektisuunnitelma 1.11, 11.2.2002 [6] Toiminnallinen määrittely: Editori 1.0, 11.12.2001 [7] Vaatimusmäärittely 1.0, 30.10.2001 [8] Vaatimusmäärittely: Ohjelma-ajanvälitys komponentti 0.3, 11.12.2001 [9] Määritelmät ja termit [10] Selvitys GPL-lisenssoinnin tuomat ongelmat 0.1, 01.02.2002 [11] Tekninen määrittely 0.7, 25.3.2002 Tekninen määrittely 7
Lisäksi dokumentissa viitataan seuraaviin standardeihin: [12] MHP 1.0.1, ETSI TS 101 812 v1.1.2 http://webapp.etsi.org/action/pu/20011016/ts_101812v010102p.pdf [13] JAE 1.1.8. API Java 1.1 API Specification 1.5. Yleiskatsaus dokumenttiin Dokumentti jakautuu kahteentoista eri lukuun. Ensimmäinen luku on johdanto ja se kuvaa dokumentin tarkoitusta ja laajuutta sekä esittelee tuotteen pääpiirteittäin. Lisäksi se esittelee dokumentissa käytettävät määritelmät, termit ja lyhenteet. Toinen luku pitää sisällään yleiskuvauksen toteutettavasta järjestelmästä sekä kuvaa asiakkaan ympäristön ja sovellusalueen. Kolmannessa luvussa käsitellään järjestelmän arkkitehtuuria. Arkkitehtuuri kuvataan yleisellä tasolla: ylimmän käsitetason moduulit ja niiden väliset liittymät. Myös kaikki fyysiset tiedostot ovat näkyvillä tässä luvussa. Luku jakautuu suunnitteluperiaatteisiin, tietokanta-arkkitehtuuriin, ohjelmistoarkkitehtuuriin (luokkakaavio) sekä luokkien väliseen kommunikointiin. Neljännessä, viidennessä, kuudennessa ja seitsemännessä luvuissa käydään läpi yksityiskohtaisesti luokkakuvaukset. Luokkakuvaukset on jaettu eri lukuihin siten, että kunkin järjestelmän osan kuvaukset on esitetty omassa luvussaan. Kustakin luokasta esitetään sen yleiskuvaus, rajapinnat ja liittymät, rakenne ja toteutus sekä virhekäsittely. Kahdeksas luku kuvaa erityiset tekniset ratkaisut. Ne voivat liittyä esimerkiksi suojauksiin, turvallisuuteen, varmistuksiin, toipumisiin, ylläpidettävyyteen, joustavuuteen, siirrettävyyteen tai kannettavuuteen Yhdeksäs luku kuvaa virheenkäsittelyn. Kymmenenteen lukuun on dokumentoitu hylätyt ratkaisuvaihtoehdot perusteluineen. Yhdennessätoista luvussa esitetään järjestelmän jatkokehitysajatuksia. Tekninen määrittely 8
2. Järjestelmän yleiskuvaus Tässä kappaleessa kuvataan järjestelmän toimintaympäristöä kokonaisuuden, laitteiden ja ohjelmistojen osalta. 2.1. Sovellusalueen kuvaus Järjestelmän tehtävänä on tukea vuorovaikutteisten tv-ohjelmien tuottamista ja toteutusta digi-tv ympäristössä. Sen tehtävänä on tarjota tv-katsojalle lisäpalveluita lähetettävän ohjelman sisällöstä riippuen. Sovellukselle välitetään tietoa ruudulla olevista alueista, joita klikkaamalla katsoja saa esimerkiksi lisätietoa valitsemastaan henkilöstä. Itse digi-tv ympäristö on kuvattu tarkemmin projektisuunnitelmassa sekä koko projektin vaatimusmäärittelyssä [5, 7]. Järjestelmään kuuluvan editorin avulla tuotetaan kuvaan liittyvää lisäinformaatiota. Sen tuottama data tallennetaan tiedostoon, josta se lähetetään siirtoverkon yli TV-katsojan digiboksissa käynnissä olevalle sovellukselle. Projektin yhteydessä tuotetaan editorin lisäksi siirtomenetelmä tiedostojen ja synkronointi-informaation siirtämiseksi sekä yksinkertainen sovellus vastaanottimeen demonstroimaan siirrettävää informaatiota ja sen synkronointia tv-kuvaan. Ohjelma-ajan välityskomponentti välittää ohjelma-ajan lähetyspäästä asiakkaan päässä olevalle sovellukselle. Lähetyspäässä komponentti saa tiedon joko testaukseen tarkoitetulta käyttöliittymältä tai automaattiselta lähetysjärjestelmältä. Komponentin käyttöympäristö on DVB:n määrittelemä Digi-TV järjestelmä, jossa asiakkaan päätelaitteet ovat DVB-MHP yhteensopivia. Koordinaattien välityskomponentti välittää sovelluksesta riippumatonta objektitietoa eli tietoa ruudulla sijaitsevista aktiivialueista. Lähetyspään toimintaympäristö on Windows tai Linux-käyttöjärjestelmällä varustettu PC, jossa toimii objektikaruselli. Liitäntä karuselliin on valmistajakohtainen. Vastaanottopäässä ympäristö on MHP-standardin mukainen päätelaite. Xlet-esimerkkisovelluksen tehtävänä on demota järjestelmän toimivuutta. Sovellus toimii MHP-standardin mukaisessa päätelaitteessa. Tekninen määrittely 9
2.2. Järjestelmän liittyminen ympäristöönsä Järjestelmän arkkitehtuuri on esitetty kuvassa 2.1. Kuva 2.1. Järjestelmän arkkitehtuuri. 2.2.1. Editori Editori toimii täysin itsenäisenä sovelluksena. Sen tuottama siirtotiedosto siirretään objektikarusellin avulla tv-vastaanottimen sovelluksen käyttöön. 2.2.2. Ohjelma-ajan välityskomponentti Ohjelma-ajan välityskomponentti (OAVK) liittyy digitv-verkon lähetyspäässä objektikaruselliin ja vastaanottopäässä vastaanottimen javavirtuaalikoneeseen. Editointityökalun tuottama koordinaattimerkinnät sisältävä tiedosto voidaan siirtää digi-tv:n tarjoamaan tiedostojen siirtojärjestelmän objektikarusellin avulla vastaanottimen sovellukselle. OAVK koostuu kahdesta osasta lähetyspäässä olevasta lähetysosasta (OAVK Server) ja asiakkaan päätelaiteessa olevasta vastaanotto-osasta (OAVK Client). 2.2.3. Koordinaattien välityskomponentti Koordinaattien välityskomponentti (KVK) on osa sovellusten synkronointijärjestelmää. KVK koostuu kahdesta osasta lähetyspäässä olevasta lähetysosasta (KVK Server) ja asiakkaan päätelaiteessa olevasta vastaanotto-osasta, koordinaattilukijasta (KVK Client). Tekninen määrittely 10
2.2.4. Xlet-esimerkkisovellus Esimerkkisovellus toimii täysin itsenäisenä sovelluksena vastaanottimessa. 2.3. Laitteistoympäristö 2.3.1. Editori Editori toimii työasemassa, jolla on seuraavat vaatimukset: - Mikä tahansa Java virtuaalikoneen mahdollistama prosessori - Näytön vähimmäiskoko 17, suositeltu koko 19 - Näytön tulee pystyä 1280 * 1024 resoluutioon Näytön osalta vaatimukset ovat suosituksia. Editoria voi käyttää myös tietokoneissa, joissa on pienempi ja heikomman resoluution omaava näyttö. 2.3.2. Ohjelma-ajan välityskomponentti Asiakaspään laitteiston edellytykset: - MHP 1.0.1 yhteensopiva Tarkempaa kuvaa itse päätelaitteesta ei voida anaa, koska valmistajilla on vapaus toteuttaa päätelaitteensa omalla tavallaan. Erityisesti tulee huomata, että projektissa toteutettava järjestelmä ei tule mitenkään riippumaan laitteistototeutuksista, vaan käyttää MHP 1.0.1 mukaisia palveluita ja rajapintoja. Erityisesti on huomioitava, että tällä hetkellä markkinoilla ei ole saatavilla yhtään MHP:tä tukevaa päätelaitetta. Lähetyspään laitteistoympäristön edellytykset: - Intel x86 PC tietokone 2.3.3. Koordinaattien välityskomponentti Vastaanottopään laiteympäristö on määritelty MHP 1.0.1 standardin mukaiseksi, ottamatta tarkemmin kantaa itse laitteistoon. Erityisesti tulee huomata että koko projektissa toteutettava järjestelmä, ei tule mitenkään riippumaan laitteistototeutuksista, vaan käyttää MHP 1.0.1 mukaisia palveluita ja rajapintoja. Lähetyspään laiteympäristö on Windows tai Linux käyttöjärjestelmällä toimiva PC. Tämä riippuu mahdollisesti objektikarusellin toimittajasta. 2.3.4. Xlet-esimerkkisovellus - MHP 1.0.1 yhteensopiva päätelaite Tekninen määrittely 11
2.4. Ohjelmistoympäristö 2.4.1. Editori Editori toimii työasemassa, jossa on seuraavat ohjelmistot: - Mikä tahansa Java virtuaalikoneen mahdollistama käyttöjärjestelmä - JRE 1.3.1 tai JDK 1.3.1 - JMF 2.1.1 JRE on satavilla osoitteesta: http://java.sun.com/j2se/1.4/download.html JMF on satavilla osoitteesta: http://java.sun.com/products/java-media/jmf/2.1.1/download.html 2.4.2. Ohjelma-ajan välityskomponentti Asiakaspään laitteiston ohjemistoedellytykset: - MHP 1.0.1 ohjelmistoympäristö Erityisesti on huomioitava se, että koska MHP päätelaitteita ei toistaiseksi ole saatavissa, ei testausta voida suorittaa kohdeympäristössä. Komponentti testataan kehitysvaiheessa tavallisessa Java ympäristössä niiltä osin kuin se on mahdollista. MHP:stä on julkaistu myös versio 1.1 johon on tehty erityisesti paluukanavaan liittyviä muutoksia. Näiden muutosten ei oleteta vaikuttavan projektissa toteutettavaan järjestelmään olennaisesti. Järjestelmä ei välttämättä toimi suoraan MHP 1.1 ympäristössä, mutta asiakas sitoutuu tähän ja on epätodennäköistä että projektin toteuttamaan järjestelmään joudutaan tekemään merkittäviä muutoksia MHP 1.1 yhteensopivuuden saavuttamiseksi. Lähetyspään ohjelmistoympäristön edellytykset: - Windows tai Linux käyttöjärjestelmä - Objektikaruselli 2.4.3. Koordinaattien välityskomponentti Asiakkaan päätelaitteessa on tarkasti määritelty MHP 1.0.1 ohjelmistoympäristö. Se on Digi-TV päätelaitteille mukautettu versio Java 1.1 ympäristöstä. Oleellisia muutoksia Java 1.1 ympäristöön on tehty lähinnä tiedonsiirron ja käyttöliittymäkomponenttien osalta. Digi-TV katsojilla ei ole käytössä tietokoneista tuttua näppäimistöä ja hiirtä vaan oletusarvoisesti Tekninen määrittely 12
pelkkä kaukosäädin. Tiedonsiirtoon liittyvät muutokset johtuvat lähinnä siitä että tiedonsiirto on oletusarvoisesti yksisuuntaista. Yksisuuntainen tiedonsiirto toteutetaan objektikarusellin avulla. Lähetyspäässä ohjelmistoympäristö on Windows tai Linux käyttöjärjestelmä, sekä objektikaruselli sovellus johon lähetysosa liitetään. Rajapinta objektikaruselliin riippuu objektikarusellin toteutuksesta ja rajapintaa ei ole standardoitu. Tästä syystä asiakas on lupautunut avustamaan KVK:n integroinnissa objektikaruselliin ja tämä integrointi voidaan yksityiskohdiltaan jättää pois tästä dokumentista. 2.4.4. Xlet-esimerkkisovellus Sovelluksen ohjelmistoympäristön edellytyksenä on MHP 1.0.1 ympäristö. 2.5. Toteutuksen keskeiset reunaehdot Järjestelmälle asetetut keskeiset reunaehdot on kuvattu eri osien vaatimusmäärittelyissä [7, 8]. Tärkeimpänä esiin tulee synkronoinnin tarkkuus. Reunaehtojen osalta on kuitenkin huomattava että kyseessä on prototyyppi synkronoiduista sovelluksista, eikä voida varmasti tietää mitkä kaikki ominaisuudet ovat oikeasti toteutettavissa. Lisäksi on huomioitava, että vastaanotto-osat, jotka tulevat asiakaan päätelaiteeseen, on tarkoitus suunnitella mahdollisimman yksinkertaiseksi. Syynä tähän on rajattu muisti- ja prosessorikapasiteetti päätelaiteessa. 2.6. Sopimukset ja standardit Järjestelmään toteutettavien ohjelmistojen rakenne kuvataan UML kuvauskielellä. Ohjelmisto on kokonaisuudessaan melko suppea ja UML kaaviot riittävät sen kuvaamiseen. OAVK:n ja KVK:n tietoliikenne kuvataan sannallisesti ja esimerkein. Mitään erityistä menetelmää ei käytetä. Ohjelmointikielen osalta tv-katsojan päätelaite asettaa ohjelmointikielivaatimukseksi Javan version 1.1. Päätelaite tukee MHP 1.0.1 ympäristöä, joka on Digi-TV päätelaitteille muunneltu versio Java 1.1 ympäristöstä. [12, 13] Järjestelmän omistusoikeudet ja dokumentaation luottamuksellisuus on määritelty koko projektin osalta projektisuunnitelmassa [5]. Tekninen määrittely 13
3. Arkkitehtuurin kuvaus Edellisessä luvussa kuvattiin järjestelmä kokonaisuutena. Tässä luvussa keskitytään sen eri komponenttien tarkempaan kuvaamiseen ohjelmistojen rakenteen ja tiedonsiirron kannalta. 3.1. Ratkaisun suunnitteluperiaatteet Suunnittelu perustuu oliosuunnitteluun, koska järjestelmän ohjelmointikielenä on Java. Lähtökohtana suunnittelussa on hyödyntää Javan valmiita kirjastoja mahdollisimman tehokkaasti. Modulaarisuus on toinen suunnittelun perusta. Selkeiden rajapintojen käyttö toteutuksessa helpottaa eri osien itsenäistä toteuttamista ja yhteen liittämistä. 3.1.1. Editori Editori rakentuu arkkitehtuurisesti käyttöliittymään sekä videokuvan ja objektien piirrot toteuttavaan osaan. 3.1.2. Ohjelma-ajanvälitys komponentin erityispiirteet OAVK on melko yksinkertainen komponentti ja sen arkkitehtuuri noudattaa perinteistä asiakas-palvelin mallia, ottaen kuitenkin huomioon että käytössä on vain yksisuuntainen tietoliikenne palvelimen ja asiakaan välillä. OAVK suunnitellaan yleiskäyttöiseksi siten, että sitä voivat hyödyntää kaikki ohjelma-aikaa tarvitsevat sovellukset. OAVK:n erityispiirteitä on käsitelty tarkemmin sen omassa teknisessä määrittelyssä [2]. OAVK:n suunnitteluun liityy myös signalointi lähetys- ja asiakaspään välillä. Signaloinnin tavoitteena on välittää tieto ohjelma-ajasta ja ohjelman tilasta ja myös se on kuvattu tarkemmin OAVK:n teknisessä määrittelyssä [2]. 3.1.3. Koordinaattien välityskomponentin erityispiirteet Koordinaattien välityskomponentin arkkitehtuuri jakautuu ylemmällä tasolla kahteen osaan: lähetys- ja vastaanottopäähän. Lähetyspään tehtävinä on objektitiedon lukeminen yhdestä ASCII tiedostosta, tiedon tallentaminen binäärimuotoon useampaan pienempään tiedostoon ja binääritiedostojen lähettäminen yksitellen objektikarusellin avulla päätelaiteessa olevalle vastaanotto-osalle. Vastaanottopään tehtävänä on lukea objektikarusellin tiedostojärjestelmästä yksi binääritiedosto kerrallaan ja luetun objektitiedon perusteella ilmoittaa sovellukselle ruudulla esiintyvistä objekteista. Olennaisin piirre ratkaisussa on että KVK:n kaksi eri osaa kommunikoivat keskenään yksisuuntaisesti tiedostojärjestelmän avulla. Tiedostot soveltuvat kommunikointiin hyvin seuraavista syistä: Tekninen määrittely 14
Objektitiedon välityksen ei tarvitse olla reaaliaikaista, Objektitietoa on todennäköisesti paljon ja Kaikkien objektikarusellien voidaan olettaa tukevan tiedostojen välitystä 3.2. Tietokanta-arkkitehtuuri Editori tallentaa projektin omaan tiedostoonsa (ASCII-tiedosto), joka tämän jälkeen konvertoidaan siirtotiedostoksi (binääritiedosto). Yleisesti voidaan todeta että ASCII tiedostossa on kaikki koko ohjelman aikana ruudulla esiintyvät objektit ja tiedoston koko voi olla tästä syystä suuri. Objektikarusellissa halutaan välittää pienempiä kokonaisuuksia ja tästä syystä tieto koodataan binääriseen muotoon ja lähetetään rajatun kokoisissa paloissa. Yhdessä binääritiedostossa on objektidata 1250 framen ajalle. Järjestelmä toteutetaan siten että tätä kokoa voidaan helposti vaihtaa. ASCII muotoinen objektitietorakenne sisältää tiedon seuraavista objektiin liittyvistä parametreista. time = [0..2^32] id = [0..65535] state = [show, hide, done] x = [0..1024] y = [0..1024] dx = [0..1024] dy = [0..1024] shape = [circle, triangle, rect, point] time : sisältää eventin ajanhetken millisekunteina ohjelman alkamisesta id : objektin uniikki id state: objektin tila x : objektin keskipisteen x-koordinaatti y : objektin keskipisteen x-koordinaatti dx : objektin leveys (arvo merkityksetön objektimuodolle point) dy : objektin korkeus (arvo merkityksetön objektimuodolle point) shape : objektin muoto Tiedostossa eri objektit on eritelty toisistaan tyhjällä rivillä. Esimerkki: time = 72123 // 0h 1 min 12 sek 123 msec id = 12456 state = 1 x = 200 y = 300 w = 150 h = 150 Tekninen määrittely 15
shape = rect Binääritiedostossa objektitietorakenne koostuu 128:stä bitistä, mitkä jakautuvat seuraavasti eri kenttien välillä. Bitit data kentän koko/bittiä Arvot 0..31 time 32 0..4294967295 32..47 id 16 0..65535 48..55 state 8 0..255 56..71 x 16 0..65535 72..87 y 16 0..65535 88..103 dx 16 0..65535 104..119 dy 16 0..65535 120..127 shape 8 0..255 Eri tilojen numeroarvot vastaavat seuraavia tiloja: 0 = show, 1 = hide ja 2 = done. Vastaavasti eri muotojen numeroarvot: 0 = circle, 1 = triangle, 2 = rect ja 3 = point. Binääritiedostossa objekteja ei erotella toisistaan, koska objektit ovat määrämittaisia. Binääritiedosto alkaa 16 bittisellä tiedoston numerolla, joka on juokseva numero alkaen nollasta jokaisen ohjelman alussa. ASCII tiedoston jäsennys sekä binääritiedoston tuottaminen ja jäsennys ovat toteutettu KVK:ssa. Konversio ASCII tiedostosta binääritiedostoiksi on melko suoraviivainen. Ainoa muutos joka tehdään on tiedon paloittelu useaan binääritiedostoon. 3.3. Ohjelmistoarkkitehtuuri, moduulit ja prosessit 3.3.1. Editori Editori koostuu käyttöliittymästä sekä videokuvan ja objektien piirrot toteuttavasta osasta. Editori käyttöliittymineen on toteutettu Javalla. 3.3.2. Ohjelma-ajan välityskomponentti OAVK:n arkkitehtuuri on kuvattu erikseen lähetys- ja asiakaspään osalta. Tekninen määrittely 16
Asiakaspään toteutukseen kuuluu seuraavat osat: 1. Liityntä objektikaruselliin 2. Ydin, joka pitää yllä aika- ja tilatietoa Kummatkin osat voidaan toteuttaa yhdellä Java luokalla. Liityntä objektikaruselliin tehdään tilaamalla aika- ja tilatietoa välittävä tapahtuma. Asiakaspäässä komponentti ei tarvitse omaa prosessia tai säiettä. Objektikarusellista tulevat tapahtumat päivittävät ytimessä olevaa aika- ja tilatietoa. Tämä osa toteutetaan org.digitv-synkro.programtime.receiver pakettiin. Lähetyspään toteutukseen kuuluu seuraavat osat: 1. Liityntä objektikaruselliin 2. Ydin, joka pitää yllä aika- ja tilatietoa 3. Testikäyttöliittymä jolla aikatieto syötetään Näistä jokainen tulee toteuttaa omana osanaan siten että toteutus voidaan vaihtaa rajapintaa ja muita osia muuttamatta. Tämä koskee erityisesti liityntää objektikaruselliin. Lähetyspäässä ydin ohjaa liityntää objektikaruselliin. Ydintä ajetaan omassa säikeessä. Käyttöliittymää ajetaan myös omassa säikeessä ja käyttöliittymällä päivitetään ytimessä olevia tietoja. Ydin ja liityntä objektikaruselliin toteutetaan org.digitv-synkro.programtime.sender pakettiin. Käyttöliittymä toteutetaan org.digitv-synkro.programtime.testui pakettiin. Tekninen määrittely 17
3.3.3. Koordinaattien välityskomponentti Koordinaattien välityskomponentin toiminnalliset osat on esitetty kuvassa 3.1. Kuva 3.1. Koordinaattien välityskomponentin toiminnalliset osat. Kuvan 3.1 vasemmassa reunassa on KVK:n lähetyspää ja oikeassa reunassa vastaanottopää. Keskellä kuvaa on tiedostoja välittävä objektikaruselli OC. Koordinaattitieto luetaan ensin ASCII tiedostosta ja siitä luodaan ObjectEvent objekteja jotka voidaan muuntaa binääri muotoon. Binääritiedostoja syntyy mahdollisesti useampia, riippuen objektitiedon määrästä. Muunto binääritiedostoiksi tehdään ennen ohjelman alkamista. Lähettäjä, eli Sender lähettää binääritiedostot yksi kerrallaan objektikaruselliin. Tämä tehdään ohjelman lähetyksen yhteydessä, hyvissä ajoin ennen kuin tiedostossa määritellyt objektit pitää esittää ruudulla. Vastaanottopäässä binäärinen objektitieto jäsennetään ja siitä luodaan ObjectEvent objekteja. Objekteille on määritelty ohjelma-aika, jonka koittaessa sovellus saa tiedon ruudulla esiintyvästä objektista. Tieto välitetään Java objektina, jonka muoto määritellään tässä dokumentissa myöhemmin. Tekninen määrittely 18
3.4. Moduulien kommunikointi 3.4.1. Editori Editorin eri moduulien kommunikointi on kuvattu luokkakuvauksien yhteydessä. 3.4.2. Ohjelma-ajanvälitys komponentti Objektikarusellin avulla toteutettavaa signalointia lukuunottamatta komponentin osat kommunikoivat keskenään Java-rajapintojen yli. Seuraavassa kaaviossa on kuvattu osien välinen kommunikaatio yleisellä tasolla. Kuva 3.2. Tiedonkulku ohjelma-ajan välityskomponentissa 3.4.3. Koordinaattien välityskomponentti Moduulien kommunikointi on kuvattu luokkakuvauksien yhteydessä. Tekninen määrittely 19
4. Luokkakuvaukset: Editori Tässä kappaleessa kuvataan Editorin ohjelmiston rakenne yksityiskohtaisella tasolla. Kuvauksessa käytetään UML-luokkakaavioita. Editori jaetaan kahteen pakettiin: org.digitv-synkro.digitveditor, org.digitv-synkro.digitv. Toteutettavan koodin kieli on englanti, mukaan lukien kommentit koodissa. Koodi dokumentoidaan Javadockommentein, josta voidaan helposti generoida html-muotoinen dokumentaatio. Kukin paketti kuvataan erikseen siihen kuuluvien luokkien osalta. Kaikkien luokkien osalta käydään läpi luokkien yleiskuvaus, rajapinnat ja liitännät, rakenne ja toteutus sekä mahdollinen virheenkäsittely. Kuva 4.1 Editorin luokkakaavio. Tekninen määrittely 20
4.1. Com.digita.digitv 4.1.1. MPEGContainer MPEGContainer on editorin keskeisin luokka. Se toteuttaa Editorin työskentelyalueen piirtämällä valitun videokuvan ja sen sisältämät koordinaattimerkinnät. MPEGContainer laajentaa java.awt.container luokan ja toteuttaa rajapinnat: java.awt.event.actionlistener, java.awt.mouselistener ja java.awt.event.mousemotionlistener. Koordinaattimerkinnät liitetään MPEGCanvas-luokkaan CoordinateObject-rajapinnan kautta. MPEGCanvas perii java.awt.container-luokan. Container-olio voi sisältää useita java.awt-olioita ja tätä ominaisuutta MPEGContainer käyttää hyväksi. MPEGContainer lukee java.awt.image-tyyppisen kuvan, joka piirretään ruudulle. Kuvaan liittyvät koordinaattimerkinnät luetaan editoritiedostosta taulukkoon ja ne piirretään ruudulle. 4.1.2. CoordinateObject CoordinateObject on rajapinta erilaisille koordinaattimerkinnöille. Rajapinta määrittelee toteutettaviksi metodeiksi koordinaattimerkinnän piirtämisen ja tarkistuksen syötetyn koordinaatin kuulumisesta koordinaattimerkinnän alueeseen. 4.1.3. RectangleCoordinateObject RectCoordinateObject on suorakulmion muotoinen koordinaattimerkintä. RectCoordinateObject toteuttaa CoordinateObject-rajapinnan. 4.1.4. OvalCoordinateObject Ellipsin muotoinen koordinaattimerkintä. OvalCoordinateObject toteuttaa CoordinateObject-rajapinnan. 4.2. Com.digita.digitveditor 4.2.1. EditorFrame EditorFrame-luokka on editorin käyttöliittymän keskeisin luokka. EditorFrame laajentaa javax.swing.jframe-luokan. Editorin graafinen ilme on toteutettu javax.swing komponenteilla, jolloin voidaan toteuttaa alustariippumaton, monipuolinen ja näyttävä käyttöliittymä. Javan Tekninen määrittely 21
peruskomponenttipaketti (AWT) ei ole alustariippumaton, vaan se perustuu kullekin käyttöjärjestelmälle kirjoitettuihin natiivikomponentteihin. 4.2.2. ObjectList Objektiluettelon toteuttava luokka. ObjectList laajentaa javax.swing.panelluokan ja toteuttaa rajapinnan ContainerListener. Kyseisen kuuntelijarajapinnan kautta luettelo saa tiedon uusista ja poistetuista komponenteista. ObjectList-luokkaan liitetään ObjectListItem-luokan esittämät koordinaattimerkinnät. 4.2.3. ObjectListItem Objektiluettelon koordinaattimerkinnät toteuttava luokka. ObjectList laajentaa javax.swing.panel-luokan ja toteuttaa rajapinnan ComponentListener. Kuuntelijarajapinnan avulla ObjectListItem saa tiedon koordinaattiobjektien näkyvyyden (visibility) muuttumisesta MPEGContainerilla. ObjectListItem kuvaa aina yksikäsitteisesti yhtä MPEContainerilla esitettyä java.awt.component-oliota. 4.2.4. ProjectSettingsDialog Luokka toteuttaa ikkunan, jolla valitaan videotiedosto ja koordinaattitiedosto. ProjectSettingsDialog laajentaa javax.swing.jdialog-luokan ja liittyy EditorFrame- ja EditorFileFilter-luokkiin. Toteutettavat metodit ovat videokuvan sekä koordinaattitiedoston tiedostopolkujen hakeminen. 4.2.5. OpenProjectDialog Luokka toteuttaa ikkunan, jolla avataan projekti. OpenProjectDialog laajentaa javax.swing.jdialog-luokan ja liittyy EditorFrame- ja EditorFileFilter-luokkiin. Toteutettava metodi on projektitiedoston tiedostopolun hakeminen. 4.2.6. EditorFileFilter Luokka on filefilter-olio, jolla filedialogeihin saadaan näkyviin vain halutun tiedostopäätteen omaavat tiedostot esim. *.edi koordinaattitiedostoja valittaessa. ProjectSettingsDialog laajentaa javax.swing.filechooser.filefilter-luokan ja liittyy ProjectSettingsDialog- ja OpenProjectDialog-luokkiin. 4.2.7. PlaybackSettingsDialog Luokka toteuttaa ikkunan, jonka avulla voi muokata videokuvan esitysasetuksia, kuten esitysnopeutta ja suuntaa. PlaybackSettingsDialog laajentaa java.swing.jdialog-luokan ja liittyy EditorFrame luokkaan. 4.2.8. CustomFocusManager CustomFocusManager korvaa EditorFramen oletusarvoisen Swing focusmanagerin, jolloin välilyöntiä ja nuolinäppäimiä on mahdollista Tekninen määrittely 22
käyttää videokuvan esittämisen näppäinkomentoina. 4.2.9. RecentFiles Luokka toteuttaa toiminnon, jonka avulla viimeksi editoidut tiedostot näkyvät pikavalintoina sekä File-valikossa että Open Project ikkunassa. 4.2.10. ObjectPropertiesDialog Luokka toteuttaa ikkunan, jonka avulla käyttäjä voi tarkastella ja muokata koordinaattiobjektien arvoja. ObjectPropertiesDialog laajentaa java.swing.jdialog-luokan ja liittyy ObjectListItem-luokkaan. Ikkuna voidaan käynnistää MPEGCanvas:lta tai ObjectList:ltä kaksoisnapauttamalla koordinaattiobjektia. 4.2.11. LoadingWindow Luokka toteuttaa latausvaiheessa logo-ikkunan. LoadingWindow laajentaa java.awt.window-luokan ja liittyy EditorFrame-luokkaan. 4.2.12. Project Luokka yhdistää videotiedoston ja koordinaattitiedoston projektiolioksi. Tekninen määrittely 23
5. Luokkakuvaukset: Ohjelma-ajanvälityskomponentti Tässä kappaleessa kuvataan OAVK:n ohjelmiston rakenne yksityiskohtaisella tasolla. Kuvauksessa käytetään UML-luokkakaavioita. OAVK jaetaan kolmeen pakettiin: receiver, sender ja testui. Jokainen paketti on esitetty oman kaavionsa ja sanallisen kuvauksen avulla. Toteutettavan koodin kieli on englanti, mukaan lukien kommentit koodissa. Koodi dokumentoidaan Javadoc-kommentein, josta voidaan helposti generoida html-muotoinen dokumentaatio. 5.1. Receiver-paketti Kuvassa 3 näkyy receiver paketin ainoa luokka ja sen toteuttamat org.dvb.dsmcc.streameventlistener ja ProgramTime rajapinnat. Ohjelman tila ilmaistaan kokonaisluvulla joka on jokin sender paketin ProgramStates rajapinnassa määritellyistä kentistä. Kuva 5.1. Receiver-paketin luokat ja rajapinnat Aika- ja tilatiedon välitykseen tarvittavat metodit on määritelty ProgramTime rajapinnassa jotta toteutusluokka voidaan helposti vaihtaa tarpeen tullen. Tekninen määrittely 24
5.2. Sender-paketti Kuvassa 4 näkyy sender paketti johon kuuluvat SenderCore ja StreamEventSender luokat sekä ObjectCarouselInterface ja ProgramStates rajapinnat. SenderCore luokka pitää yllä tietoa sen hetkisestä ajasta ja lähettää aika- ja tilatietoa kymmenen sekunnin välein käyttäen ObjectCarouselInterface rajapintaa. StreamEventSender luokka toteuttaa ObjectCarouselInterface rajapinnan. Rajapinnassa ProgramStates on määritelty kokonaisluku vakiot jotka vastaavat ohjelmien eri tiloja. Kuva 5.2. Sender-paketin luokat ja rajapinnat Tekninen määrittely 25
5.3. Testui-paketti Kuvassa 5.3 on testui paketin luokat kuvattu yleisellä tasolla. Käyttöliittymää rakennettaessa saatetaan tarvita muitakin käyttöliittymäelementtejä, mutta alkuun tämä rakenne on riittävä. Kuva 5.3. Testui-paketin luokat Luokka UICore on käyttöliittymän ydin ja se välittää tiedot sender paketin SenderCore luokalle. UICore toteuttaa java.lang.thread rajapinnan jotta käyttöliittymä voi itsenäisesti päivittää ruutua. UICore toteuttaa myös java.awt.event.actionlistener rajapinnan. Tämä siksi että käyttäjän toimiin voidaan reagoida. 5.4. Rinnakkaisuuden hallinta Javassa rinnakkaisuutta hallitaan synkronoimalla objekteja. Tämä synkronointi ei liity mitenkään sovelluksen ja TV-ohjelman synkronointiin. Tässä kappaleessa synkronoinnilla viitataan Java-objektien synkronointiin. Asiakaspäässä rinnakkaisuus voi tuottaa ongelmia jos OAVK:ta käyttävä sovellus käyttää sekä objektikarusellia että OAVK:ta samaan aikaan. Tämän estämiseksi vaaditaan että OAVK:ia käyttävä sovellus ei synkronoidu samaan aikaan objektikaruselliin ja OAVK:in. Lähetyspäässä komponentti pitää sisällään kaksi säiettä, ytimen ja käyttöliittymän. Näiden kahden säikeen toiminta pitää synkronoida siten että käyttöliittymä synkronoituu SenderCore luokkaan aina kun se päivittää tietoja. Tekninen määrittely 26
Jos käyttöliittymään lisätään myöhemmin toimintoja jotka ovat ytimen laukaisemia tulee synkronointi jonkin yhteisen objektin kautta. Tekninen määrittely 27
6. Luokkakuvaukset: Koordinaattien välityskomponentti Tässä luvussa perehdytään tarkemmin KVK:n toteutukseen ja käydään toimintaa läpi Java-luokkien tasolla. Kuvassa 6.1 on esitetty KVK:n paketit ja niihin kuuluvat luokat. Kuva 6.1 KVK:n luokkakaavio Luokkien välisiä suhteita ja vuorovaikutuksia ei ole kuvattu UML kaavioon vaan ne kuvataan sanallisesti tässä luvussa. 6.1. converter paketti KVK:n toiminta alkaa tiedostojen käsittelystä (converter paketti). BinaryFileProducer luokka lukee ASCII tiedostoa ASCIIParser luokan avulla. ASCIIParser luokka käyttää common paketin ObjectEventFactory luokkaa ObjectEvent olioden luomiseen. BinaryFileProducer muuntaa ObjectEvent luokan oliot takaisin biteiksi käyttäen myös ObjectEventFactory luokkaa. Bitit se tallettaa binääritiedostoihin, siten ettei binääritiedoston maksimikoko ylity. Tekninen määrittely 28
6.2. sender paketti sender paketin Sender luokka huolehtii valmiiden binääritiedostojen lähettämisestä objektikaruselliin ohjelman lähetyksen aikana. Digita on toimittanut karuselliliitännän rajapinnan toteutuksen. Tämän yksityiskohdat kuuluvat luottamuksellisiin tietoihin eikä niitä ole kuvattu tässä. Digitan toimittamaa toteutusta käytetään paketin OCConnection-rajapinnan läpi. Lähetyspäässä sender-paketti käyttää Binfileparser-luokkaa. 6.3. receiver paketti receiver paketin koodia suoritetaan asiakkaan päätelaiteessa. Päätelaitteessa on käytössä hyvin määritellyt Java rajapinnat objektikaruselliin joten täällä objektikarusellia ei tarvitse piilottaa rajapinnan taakse. BinaryFileParser luokka lukee karusellista tiedoston ja jäsentää siinä olevan datan käyttäen common paketin ObjectEventFactory luokkaa. EventLauncher luokka taas käyttää BinaryFileParser luokkaa, saaden siltä karusellista luettuja ObjectEvent olioita. Lisäksi EventLauncher käyttää ohjelma-ajanvälitys komponenttia saadakseen tiedon sen hetkisestä ohjelma-ajasta. Ohjelma-ajan ja ObjectEvent olioiden perusteella EventLauncher jakaa event:ejä kuunteleville luokille. Eventtien kuuntelua varten on receiver paketissa SynchronizedEventListener rajapinta ja SychronizedEvent luokka. Objektitietoa haluavien sovellusten tulee toteuttaa SynchronizedEventListener rajapinta ja rekisteröityä kuuntelemaan eventtejä EventLauncher luokan addeventlistener metodilla. Oliotieto toimitetaan ohjelmille SychronizedEvent olion muodossa, joka sisältää kaiken ObjectEvent oliossa välitetyn objektitiedon. 6.4. common paketti common paketissa on ObjectEvent luokka joka on käytännössä pelkkä tietorakenne, eikä sisällä mitään toiminnallisuutta. Paketissa on myös ObjectEventFactory luokka jossa on metodit ObjectEvent olioiden luomiseen ASCII tekstistä tai biteistä. ObjectEventFactory:ssä on myös päinvastaiset metodit joilla ObjectEvent oliot voidaan muuntaa ASCII tekstiksi tai biteiksi. common paketissa on lisäksi koko järjestelmän käyttämät vakiot sisältävä rajapinta Constraints. Järjestelmän parametrejä voidaan näin muuttaa yhdestä paikasta. Tekninen määrittely 29
7. Luokkakuvaukset: Xlet-esimerkkisovellus Xlet-esimerkkisovelluksessa on kaksi luokkaa, MyXlet ja XletCanvas. Luokat on kuvattu oheisessa kuvassa. Kuva. 7.1. Esimerkkisovelluksen luokkakaavio 7.1. MyXlet MyXlet on luokka, joka toteuttaa Xlet-rajapinnan (javax.tv.xlet.xlet) neljän metodin avulla. initxlet on metodi, jossa Xlet alustetaan. Tämä tapahtuu luomalla EventLauncher, joka lukee objektikarusellista eventtejä. Lisäksi asetetaan MyXlet kuuntelemaan eventtejä sekä alustetaan TVContainer (awt.containerin aliluokka) esittämään grafiikkaa ruudulla. Lisäksi luokkaan kuuluvat seuraavat Xlet-rajapinnan metodit, jotka eivät tässä esimerkkisovelluksessa tee mitään: - startxlet metodi ajetaan kun Xlet varsinaisesti suoritetaan - pausexlet on metodi, joka ajetaan kun Xlet asetetaan paused-tilaan - destroyxlet on metodi, joka joka ajetaan kun Xlet tuhotaan Lisäksi luokka toteuttaa SynchronizedEventListener-rajapinnan (fi.digita.digitvsynkro.transcoord.receiver.synchronizedeventlistener) oheisen metodin avulla: - receivesynchronizedevent(synchronizedevent se), joka ajetaan aina kun MyXletille tulee uusi eventti. Metodi tulkitsee onko kyseessä uusi koordinaattiobjekti vai olemassa olevan objektin aktiivisuuden lopetus eventti ja lisää/poistaa XletCanvasille/lta kyseisen objektin. Tekninen määrittely 30
7.2. XletCanvas XletCanvas-luokka laajentaa java.awt.canvas-luokan ja se on TVContainerissa oleva awt-komponentti, johon koordinaattiobjektit piirretään. XletCanvas sisältää seuraavat metodit: - paint(graphics g), jossa käydään läpi aktiiviset koordinaattiobjektit ja piirretään niitä vastaavat kuviot ruudulle (tunnistaa nelikulmion ja ellipsin). - public SynchronizedEvent getactivearea(integer id) palauttaa id:n mukaisen koordinaattiobjektin - public void removeactivearea(synchronizedevent oldevent) poistaa koordinaattiobjektin aktiivisten objektien listalta - public void putactivearea(integer id, SynchronizedEvent se) lisää koordinaattiobjektin aktiivisten objektien listalle. Tekninen määrittely 31
8. Erityiset tekniset ratkaisut 8.1. Editorin MPEG-2-videon käsittely Editorin MPEG-2 videon käsittely on toteutettu JMF:n avulla. 8.2. Ohjelma-ajan välityskomponentti OAVK:n suunnittelussa käytetyt ratkaisut on dokumentoitu edellä. Erityistä on OC-liitäntä, jonka Digita on toimittanut. Komponentin toipumisesta esim. sähkökatkoista ja muista vastaa pitkälti päätelaite ja objektikaruselli. Päätelaite on suunniteltu siten että käyttäjän ei tarvitse tehdä mitään sovellusten käynnistämiseksi vaan niiden käynnistämistä ohjaa objektikaruselli. Lähetyspäässä sähkökatkon tai vastaavan sattuminen on katastrofaalista koko lähetysjärjestelmälle ja siinä tapauksessa kaikki sovellukset, mukaan lukien OAVK, pitää käynnistää manuaalisesti uudelleen. Projektin puitteissa oletetaan, että TVlähetysjärjestelmä on niin hyvin suojattu, että tällaista ei pääse tapahtumaan. 8.3. Koordinaattien välityskomponentti Koordinaattilukijan kannalta olennainen erityiskysymys on toipuminen, jolla tarkoitetaan vastaanottopään synkronoituminen kesken lähetettävän ohjelman. Tämä voi johtua esimerkiksi kanavan vaihtamisesta tai vastaanottimen avaamisesta. Suurimmilta osin tästä huolehtii tietysti itse päätelaite ja objektikaruselli, mutta KVK:n pitää myös pystyä synkronoitumaan lähetettävään objektitietoon. EventLauncher objektin tulee vain hylätä vanhat tiedot ja aloittaa eventtien laukominen niistä objekteista joiden pitäisi esiintyä ruudulla parhaillaan. Tekninen määrittely 32
9. Virheenkäsittely 9.1. Editorin virheenkäsittely Editorin virheet jakautuvat karkeasti kahteen luokkaan: 1) Tiedostovirheet 2) Videon käsittelyn virheet Tiedostovirheet tapahtuvat kun videotiedostoa, projektitiedostoa tai jotakin muuta tiedostoa ei kyetä avaamaan tai tallentamaan. Tällöin käyttäjälle esitetään dialogi, jonka tietojen perusteella hän kykenee korjaamaan tilanteen (esimerkiksi vapauttamaan tilaa kovalevyltä). Videon käsittelyn virheet tapahtuvat, kun JMF ei kykene käsittelemään käyttäjän anatamaan videotiedostoa. Tämä saattaa johtua tietokoneen puutteellisista koodekeista tai JMF:lle tuntemattomasta videoformaatista. JMF:n antamat virheilmoitukst suodatetaan ja esitetään käyttäjälle dialogina. Kummassakaan luokassa virhe ei aiheuta sovelluksen keskeytymistä, vaan editointia voidaan jatkaa tilanteesta, jossa oltiin ennen ko. virheen aiheuttanutta toimintaa. 9.2. Ohjelma-ajan välityskomponentin virheenkäsittely Asiakaspäässä voidaan kohdata seuraavia virhetilanteita: 1. Ei saada signalointitapahtumia, eikä pystytä tarjoamaan aika tietoa. Menettely: Heitetään poikkeus palvelua käyttävälle sovellukselle. 2. Saadaan tapahtuma jonka tiedot ovat virheellisiä, eli niitä ei voida tulkita kappaleessa 3 mainittujen sääntöjen perusteella. Menettely: Hylätään viallinen tapahtuma. Lähetyspäässä voidaan kohdata seuraavia virhetilanteita: 1. Ei saada yhteyttä objektikaruselliin. Menettely: Heitetään poikkeus karuselliin liittyvässä objektissa ja ilmoitetaan käyttöliittymälle sekä tulostetaan ytimestä komentoriville. Tekninen määrittely 33
2. Käyttäjän antama syöte on virheellinen. Menettely: annetaan käyttäjälle virheilmoitus. 9.3. Koordinaattien välityskomponentin virheenkäsittely Perussääntö virhetilanteissa on että virheelliset eventit hylätään. Jos virheistä ei kuitenkaan pystytä toipumaan täytyy toiminta keskeyttää. KVK ei vaadi juuri lainkaan syötettä käyttäjältä, kaikki olennainen syöte on tietokoneella tuotettua joten testauksen jälkeen suurimmasta osasta virhetilanteita pitäisi välttyä. Tiedostoja muunnettaessa todennäköisimpiä virhetilanteita ja niistä toipumisia ovat: VIRHE: Käyttäjän antamaa ASCII tiedostoa ei löydy. TOIPUMINEN: Ilmoitetaan käyttäjälle ja lopetetaan. VIRHE: Käyttäjän antamassa binääritiedostojen hakemistoa ei löydy. TOIPUMINEN: Luodaan hakemisto, jos se on mahdollista. VIRHE: ASCII tiedosto on korruptoitunut TOIPUMINEN: Yritetään hypätä korruptoituneiden osien yli ja jos se ei auta lopetetaan. Lähetysvaiheessa todennäköisimpiä virhetilanteita ja niistä toipumisia ovat: VIRHE: Karuselliin ei saada yhteyttä. TOIPUMINEN: Ilmoitetaan käyttäjälle ja lopetetaan. VIRHE: Käyttäjän antamassa binääritiedostojen hakemistoa ei löydy. TOIPUMINEN: Ilmoitetaan käyttäjälle ja lopetetaan.. Vastaanottopäässä todennäköisimpiä virhetilanteita ja niistä toipumisia ovat: VIRHE: Binääritiedostoa ei löydy sovelluksen antamasta hakemistosta. TOIPUMINEN: Ilmoitetaan sovellukselle ettei palvelu ole käytössä ja lopetetaan. VIRHE: Binääritiedosto on korruptoitunut. TOIPUMINEN: Yritetään hypätä korruptoituneiden osien yli ja jos se ei auta lopetetaan. Tekninen määrittely 34
10. Hylätyt ratkaisuvaihtoehdot 10.1. Editorin MPEG-2 videon käsittely 10.1.1. GPL-lisenssin alainen dekooderi Aikaisemmin editorin MPEG-2-tiedosto luettiin ja purettiin C-kielisessä erillisessä dekooderi-ohjelmassa, jota käytettiin Java Native Interfacen yli. Java-luokka MPEGDecoder toteutti MPEGFile-rajapinnan käyttäen JNImetodeja, jotka olivat toteutettu C-kielellä dekooderi-ohjelmaan. Tämä ratkaisu kuitenkin hylättiin koska sen alkuperäinen lähdekoodi perustui GPL-lisenssiin. GPL-lisensseitä on selvitetty tarkemmin erillisessä dokumentissa (Selvitys GPL-lisensoinnin tuomat ongelmat) [10]. 10.1.2. Videon purku DirectShown avulla Aikaisemmin kokeiltiin myös editorin MPEG-2 videon tiedoston lukemista ja purkamista C++-kielisen erillisen dekooderi-ohjelman avulla (DSVideo.dll). Tätä käytettiin Java Native Interfacen yli erillisen DirectShowMPEGFileluokan kautta. DSVideo.dll käytti DirectShown Filter Graph Manager oliota videon purkuun. Tämä toteutus on kuvattu kokonaisuudessaan tarkemmin teknisen määrittelyn edellisessä versiossa [11]. 10.2. Hahmontunnistus Automaattisen hahmontunnistuksen käyttömahdollisuuksia on tutkittu, ja todettu että nykytekniikalla sen käyttäminen on mahdotonta, eikä huomattavia parannuksia tekniikkaan ole tiedossa. Selvitys hahmontunnistuksesta löytyy omasta dokumentista: Automaattinen hahmontunnistus. Erityinen ongelma tämän sovelluksen osalta on liikkuva kuva (ohjelmistojen tehokkuus). Toinen ongelma on riittävän kehittyneen tekniikan puuttuminen, ohjelmistot (tai oikeammin algoritmit) eivät ole luotettavia, vaan kadottavat seurattavan pisteen nopeasti. Kaupallisia tuotteita ei ole olemassa, kaikki valmis mitä tälle sovellusalueelle on tehty on erilaisien algoritmien muodossa. Automaattisen hahmontunnistuksen käyttäminen projektissa vaatisi myös suuria Tekninen määrittely 35
kehityspanostuksia sekä itse hahmontunnistusmenetelmässä että hahmontunnistuksen liittämisessä projektissa tuotettaviin ohjelmistoihin. Tekninen määrittely 36
10.3. OAVK Tätä dokumenttia kirjoitettaessa ei voida olla varmoja voidaanko OAVK:n signalointi toteuttaa tapahtumien avulla. Seuraavassa käsitellään muita vaihtoehtoisia tapoja ratkaista ongelma. Nämä vaihtoehdot tulivat esille Digitan kanssa pidetyssä kokouksessa. 10.3.1. Hot update tiedostot Objektikarusellissa voidaan välittää tiedostoja myös välittömästi. Tavallisestihan tiedostot lähtevät pyörimään karuselliin ja ne lähetetään epämääräisen ajan kuluttua. Hot update tiedostot menevät lähetykseen välittömästi. Tiedostoon voitaisiin laittaa OAVK:n tarvitsema signalointitieto samassa muodossa kuin se laitetaan tapahtumaan. 10.3.2. Tyhjä MPEG-2 kuvavuo Objektikarusellissa voidaan siirtää myös vuo muotoista tietoa esimerkiksi kuvaa. Objektikarusellin läpi siirretyille kuvavirroille voidaan asettaa ohjelma-aika. Jos OAVK:n lähetyspää lähettää tyhjää kuvavirtaa objektikarusellinkautta voi vastaanottopää lukea siitä ohjelma-ajan. Tämän vuon voi mahdollisesti myös pysäyttää ja sulkea joten ohjelman tilakin voidaan välittää. Lisäksi tyhjä musta ruutu pakkautuu erittäin hyvin eikä vie kapasiteettiä objektikarusellissä. 10.3.3. Tekstitys Ohjelmien tekstitys synkronoidaan kuvaan, vaikkakin lähetetään erikseen. Digi-TV järjestelmässä voidaan myös tarjota tekstitys usealla eri kielellä. Jos OAVK:lle varattaisiin oma kieli, esimerkiksi OAVK_signalointi, voitaisiin sitä käyttää signalointiin. Tämä vaihtoehto ei kuitenkaan toimi, koska tekstitystä ei voi MHP-speksin mukaan lukea MHP-sovelmasta käsin. Tekninen määrittely 37