Tekninen määrittely Ohjelma-ajanvälitys komponentti Versio Päiväys Tekijä Kuvaus 0.1 7.12.2001 Oskari Pirttikoski Ensimmäinen versio 0.2 10.12.2001 Oskari Pirttikoski Lisätty keskeneräiset asiat ja testaus. 0.3 11.12.2001 Oskari Pirttikoski Lisätty sisällysluettelo. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 1/19
SISÄLLYSLUETTELO 1 JOHDANTO...3 1.1 Tarkoitus ja kattavuus...3 1.2 Tuote ja ympäristö...4 1.3 Määritelmät, merkintätavat ja lyhenteet...4 1.4 Viitteet...5 1.5 Yleiskatsaus dokumenttiin...6 2 JÄRJESTELMÄN YLEISKUVAUS...6 2.1 Sovellusalueen kuvaus...6 2.2 Järjestelmän liittyminen ympäristöönsä...7 2.3 Laitteistoympäristö...8 2.4 Ohjelmistoympäristö...8 2.5 Toteutuksen keskeiset reunaehdot...9 2.6 Sopimukset ja standardit...10 3 ARKKITEHTUURIN KUVAUS...10 3.1 Suunnitteluperiaatteet...10 3.2 Signalointi...11 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit...13 3.4 Moduulien kommunikointi...14 4 UML LUOKKAKAAVIOT...14 4.1 Receiver paketti...15 4.2 Sender paketti...15 4.3 Testui paketti...16 Tekninen määrittely, Ohjelma-ajanvälitys komponentti 2/19
4.4 Rinnakkaisuuden hallinta...17 4.5 Komponentin testaus...18 5 ERITYISET TEKNISET RATKAISUT...18 6 VIRHEENKÄSITTELY...18 7 HYLÄTYT RATKAISUVAIHTOEHDOT...19 7.1 Hot update tiedostot...19 7.2 Tyhjä MPEG-2 kuvavuo...19 7.3 Tekstitys...19 8 JATKOKEHITYSAJATUKSIA...19 9 KESKENERÄISET ASIAT...19 1 JOHDANTO Ohjelma-ajanvälitys komponentti (OAVK) on osa Ohjelmatyökurssilla toteutettavaa järjestelmää. Järjestelmä kokonaisuudessaan tarjoaa Digi-TV ohjelman kanssa synkronoituja lisäpalveluita. OAVK on olennaisin osa palveluiden ja ohjelmien synkronoinnissa. Järjestelmä on tarkemmin kuvattu projektisuunnitelmassa [projektisuunnitelma]. Ohjelmatyön asiakas on Digita Oy. OAVK:n tavoitteet on määritelty vaatimusmäärittelyssä [vaatimusmäärittely]. Komponentti on suhteellisen pieni ja sen suunnittelussa riittää UML kuvauskielen käyttö, sekä teknisten ratkaisuiden analysointi ja dokumentointi. Periaatteena OAVK:n suunnittelussa on että komponentti on yleiskäyttöinen, eli sitä voidaan käyttää kaikkien sovellusten synkronoinnissa. 1.1 Tarkoitus ja kattavuus Tämä dokumentti on tarkoitettu avustamaan komponentin ohjelmointia ja lisäksi dokumentoimaan tehdyt tekniset ratkaisut. Dokumentti on suunnattu siis lähinnä komponentin toteuttajalle, mutta myös niille jotka aikovat jatkokehittää koko järjestelmää myöhemmin. Jatkokehittäjät voivat olla projektissa jo mukana olevia henkilöitä tai asiakkaan työntekijöitä. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 3/19
Tässä dokumentissa kuvataan ohjelma-ajan välitykseen liittyvät tekniset ongelmat ratkaisuineen ja komponentin toteuttavan ohjelmiston rakenne. Dokumentissa esitetty ohjelmiston rakenne kattaa OAVK:n kokonaisuudessaan, pois lukien lähetyspäässä tehtävät integroinnit jotka käydään läpi tässä dokumentissa myöhemmin. 1.2 Tuote ja ympäristö Synkronoituja palveluita tarjoavalla ohjelmistollamme ei ole vielä nimeä. Ohjelmistosta ei myöskään välttämättä tehdä varsinaista tuotetta missään vaiheessa. Tässä dokumentissa käsiteltävästä Ohjelma-ajanvälitys komponentista käytetään joko nimeä Ohjelma-ajanvälitys komponentti tai lyhennettä OAVK. Komponentin koodissa käytetään englannin kielistä nimeä Program time. Tuotteen toimintaympäristö on tarkkaan rajattu. Menemättä vielä tässä vaiheessa syvemmin yksityiskohtiin voidaan sanoa että OAVK:ssa on kaksi osaa. Toinen on TV-ohjelman lähetyspäässä ja toinen vastaanottopäässä. Vastaanottopäässä on katsojan Digi-TV päätelaite joka on MHP 1.0.1 yhteensopiva. MHP on Digi-TV päätelaitteita varten määritelty Java alusta. Lähetyspäässä komponentti toimii Windows tai Linux käyttöjärjestelmässä. Tietoliikenne OAVK:n eri osien välillä on yksisuuntaista TV lähetysjärjestelmästä johtuen. 1.3 Määritelmät, merkintätavat ja lyhenteet Seuraavassa taulukossa on esitetty tässä dokumentissa käytettävät määritelmät ja lyhenteet selityksineen. DVB MPEG-2 MHP NPT Digital Video Broadcasting; organisaatio, joka on kehittänyt digitaalisten TV lähetysten standardeja Euroopassa. DVB:ssä on yli 200 jäsentä yli 25 maassa. 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. 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ää Tekninen määrittely, Ohjelma-ajanvälitys komponentti 4/19
sovellusten ja TV-ohjelmien synkronoinnissa. Katso myös Ohjelma-aika. OC Ohjelmaaika Stream Event UML Xlet 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. 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 Tässä dokumentissa viitataan useisiin projektin muihin dokumentteihin, sekä Digi-TV ja Java standardeihin. 1.4.1 Projektin omat dokumentit Projektisuunnitelma Vaatimusmäärittely Koordinaattilukija Projektin kokonaisuuden kuvaava suunnitelma, jonka uusin versio on 1.08 tätä dokumenttia kirjoitettaessa. OAVK:n vaatimusmäärittely, jonka uusin versio on 1.02 tätä dokumenttia kirjoitettaessa. Koordinaattilukijan tekninen määrittely. 1.4.2 Standardit Tekninen määrittely, Ohjelma-ajanvälitys komponentti 5/19
MHP 1.0.1 ETSI TS 101 812 v1.1.2 http://webapp.etsi.org/action\pu/20011016/ts_101812v010102p.pdf JAE 1.1.8 API Java 1.1 API Specification 1.5 Yleiskatsaus dokumenttiin Tämän dokumentin kappaleessa 1 kuvataan OAVK yleisesti ja määritellään termit ja viitteet. Kappaleessa 2 kuvaamme tarkemmin OAVK:n toimintaympäristöä laiteiden ja ohjelmistojen osalta. Seuraavaksi kappaleessa 3 määrittelemme komponentin vaatimaa signalointia ja sen toteuttavan ohjelmiston rakennetta, sekä tiedonkulkua OAVK:n eri osien välillä. Kappaleessa 4 esittelemme ohjelmiston rakenteen UML kaavioiden avulla. Kappaleessa 5 käsittelemme lyhyesti tehtyjä erikoisratkaisuita ja kappaleessa 6 luettelemme erilaisia virhetilanteita ja tapoja selviytyä niistä. Kappaleessa 7 luettelemme erilaisia tapoja ratkaista komponentin signalointiongelma ja lopulta kappaleessa 8 käsittelemme jatkokehitysajatuksia. 2 JÄRJESTELMÄN YLEISKUVAUS Tässä kappaleessa kuvataan OAVK:n toimintaympäristöä kokonaisuuden, laiteiden ja ohjelmistojen osalta. 2.1 Sovellusalueen kuvaus Projektissa toteutettavalla järjestelmällä pyritään synkronoimaan asiakaan päätelaiteessa oleva Java sovellus TV-ohjelman kanssa. Sovellus tarjoaa asiakkaalle lisäpalveluita lähetettävän ohjelman sisällöstä riippuen. Sovellukselle välitetään tietoa ruudulla olevista alueista, joita klikkaamalla asiakas saa esimerkiksi lisätietoa klikkaamastaan henkilöstä. Koordinaattien piirtäminen tehdään editori ohjelmalla. Sovelluksen näyttämä lisätieto riippuu sovelluksesta ja toteutetaan erikseen jokaista sovellusta varten. Järjestelmä on kuvattu kokonaisuudessaan kuvassa 1. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 6/19
Kuva 1 Synkronointijärjestelmän arkkitehtuuri 2.2 Järjestelmän liittyminen ympäristöönsä OAVK on osa synkronoitua sovellusta ja sen toteuttaminen on edellytys synkronoinnille. OAVK ei käytä muita projektissa toteutettavia osia hyväkseen vaan muut osat käyttävät OAVK:ia. Digi-TV järjestelmä tarjoaa OAVK:lle tiedonsiirtopalvelun, jonka avulla lähetyspäästä voidaan välittää esitettävän ohjelman aika asiakkaan päätelaitteeseen. Päätelaitteeseen välitetään myös tieto ohjelman tilasta. Mahdollisia tiloja ovat: 1. Ohjelma ei ole alkanut 2. Ohjelma on käynnissä 3. Ohjelmassa on katko 4. Ohjelma on loppunut Tekninen määrittely, Ohjelma-ajanvälitys komponentti 7/19
Ohjelma-aikaa ja ohjelman tilaa käyttää hyväkseen koordinaattilukija. Koordinaattilukija kuvataan tarkemmin omassa dokumentissaan [koordinaattilukija] ja sen toiminta ei vaikuta ohjelma-aika komponentin toteutukseen.. 2.3 Laitteistoympäristö OAVK:ssa on kaksi osaa lähetyspää ja asiakkaanpää. Asiakkaanpäässä laiteympäristö on määritelty MHP 1.0.1 standardin mukaiseksi, ottamatta tarkemmin kantaa itse laitteistoon. Digitalta saatujen tietojen mukaan lähetyspään laiteympäristö on Windows tai Linux käyttöjärjestelmällä toimiva PC. 2.3.1 Asiakaspään Laitteistoympäristö Asiakkaan päätelaitteen tulee olla MHP 1.0.1 yhteensopiva. Tämä on edellytys sille että päätelaitteessa voidaan ylipäätänsä suorittaa Java sovelluksia. Tarkempaa kuvaa itse päätelaitteesta ei voida antaa, koska valmistajilla on vapaus toteuttaa päätelaitteensa omalla tavallaan. 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. MHP laiteympäristöstä tulee vielä todeta että tätä kirjoitettaessa ei ole saatavilla yhtään MHP:tä tukevaa päätelaitetta. Digi-TV päätelaitteita on saatavilla markkinoilla, mutta edes Digitalla ei ole käytössään prototyyppejä MHP tukevista päätelaiteista. Asiakaan päätelaitteessa ei oleteta olevan paluukanavaa, eli tietoliikenneyhteyttä jonka avulla päätelaite voisi lähettää tietoa. 2.3.2 Lähetyspään Laitteistoympäristö Lähetyspäässä toimiva objektikaruselli toimii Intel x86 PC tietokoneessa jossa on käyttöjärjestelmänä Linux. Objektikarusellia voidaan ohjata toisesta PC koneesta jossa käyttöjärjestelmänä on Windows, mahdollisesti versio NT tai 2000. OAVK on sovellustason komponentti eikä sen toteutuksessa ole tarvetta käyttää minkään laitteistoympäristön erikoisominaisuuksia. 2.4 Ohjelmistoympäristö Asiakkaan päätelaitteessa on tarkasti määritelty MHP 1.0.1 ohjelmistoympäristö. Lähetyspäässä ohjelmistoympäristö on Windows tai Linux käyttöjärjestelmä, sekä objektikaruselli sovellus johon OAVK liitetään. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 8/19
2.4.1 Asiakaspään Ohjelmistoympäristö MHP 1.0.1 ympäristö 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 pelkkä kaukosäädin. Tiedonsiirtoon liittyvät muutokset johtuvat lähinnä siitä että tiedonsiirto on oletusarvoisesti yksisuuntaista. Yksisuuntainen tiedonsiirto toteutetaan objektikarusellin avulla. MHP 1.0.1 ympäristöstä puuttuu osa Java 1.1. ympäristön luokista. Toisaalta ne on korvattu monilla uusilla luokilla ja lisäksi MHP ympäristössä on valtavasti Digi-TV:n palveluiden käyttämiseen tarkoitettuja luokkia. Erityisesti näistä voidaan mainita objektikaruselliin liittyvät luokat, joiden avulla objektikarusellin palveluita voidaan hyödyntää sovelluksissa. Koska MHP päätelaitteita ei toistaiseksi ole saatavissa, ei testausta voida suorittaa kohde ympä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. 2.4.2 Lähetyspään Ohjelmistoympäristö Lähetyspään ohjelmistoympäristö on varsin joustava OAVK:n toteutuksen kannalta. Windows käyttöjärjestelmässä voidaan OAVK:n tarvitsema toiminnallisuus toteuttaa usealla ohjelmointikielellä. Rajapinta objektikaruselliin riippuu objektikarusellin toteutuksesta ja rajapintaa ei ole standardoitu. Tästä syystä asiakas on lupautunut avustamaan OAVK:n integroinnissa objektikaruselliin ja tämä integrointi voidaan yksityiskohdiltaan jättää pois tästä dokumentista. Digitalla on jo asennettuna objektikaruselli testikäyttöön. OAVK:n lähetyspää voidaan testata lopullisessa ympäristössään, olettaen että testikäytössä oleva karuselli on sama joka tulee myös tuotantokäyttöön. 2.5 Toteutuksen keskeiset reunaehdot OAVK:lle asetetut reunaehdot on kuvattu komponentin vaatimusmäärittelyssä [vaatimusmäärittely]. On kuitenkin huomattava että kyseessä on prototyyppi Tekninen määrittely, Ohjelma-ajanvälitys komponentti 9/19
synkronoiduista sovelluksista, eikä voida varmasti tietää mitkä kaikki ominaisuudet ovat oikeasti toteutettavissa. OAVK:n keskeisin vaatimus on välitetyn ajan tarkkuus. Tämä edellyttää tehokasta signalointia lähetys- ja asiakaspään välillä. Erityisesti signaloinnilta vaaditaan lyhyitä prosessointiviiveitä. 2.6 Sopimukset ja standardit OAVK:n toteuttavan ohjelmiston rakenne kuvataan UML kuvauskielellä. Ohjelmisto on kokonaisuudessaan melko suppea ja UML kaaviot riittävät sen kuvaamiseen. OAVK:n tietoliikenne kuvataan sannallisesti ja esimerkein. Mitään erityistä menetelmään ei käytetä. Komponentin omistusoikeudet ja dokumentaation luottamuksellisuus on määritelty koko projektin osalta projektisuunnitelmassa [projektisuunnitelma]. 3 ARKKITEHTUURIN KUVAUS Järjestelmän kokonaisuus kuvattiin yleisesti luvussa 2.1. Tässä luvussa keskitytään OAVK:n tarkempaan kuvaamiseen ohjelmiston rakenteen ja tiedonsiirron kannalta. 3.1 Suunnitteluperiaatteet Järjestelmä suunnitellaan olio pohjaisesti ja kuvataan UML kaavioina. 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ä. Aiemmissa luvuissa on jo mainittu että OAVK:ssa on kaksi osaa asiakas- ja lähetyspää. Lähetyspään osuus jakautuu edelleen seuraaviin osiin: 1. Liityntä objektikaruselliin 2. Ydin, joka pitää yllä aika- ja tilatietoa 3. Testikäyttöliittymä jolla aikatieto syötetään Asiakaspää jakautuu vastaavasti seuraaviin osiin: 1. Liityntä objektikaruselliin Tekninen määrittely, Ohjelma-ajanvälitys komponentti 10/19
2. Ydin, joka pitää yllä aika- ja tilatietoa OAVK suunnitellaan yleiskäyttöiseksi siten, että sitä voivat hyödyntää kaikki ohjelma-aikaa tarvitsevat sovellukset. Asiakaspään ohjelmointikieli on välttämättä Java versio 1.1. Tämä johtuu siitä että MHP päätelaiteet tukevat vain Javaa ja siitä versiota 1.1. Lähetyspäässä ohjelmointikieltä ei määrää tekninen ratkaisu. Käytettäväksi kieleksi valittiin Java seuraavista syistä: 1. Java on alusta riippumaton ja toteutus voidaan tarvittaessa siirtää uudelle alustalle helposti 2. Komponentissa käytetään yhtä kieltä 3. Projektiryhmän Java osaaminen on korkeammalla tasolla kuin muiden kielien osaaminen 4. Java ohjelmointi on nopeampaa ja virheitä tulee vähemmän kuin esimerkiksi C kielellä Lähetyspään Java versiota ei ole sidottu ja siihen tullaan käyttämään uusinta versiota eli Java 1.3:a. Testikäyttöliittymä voidaan lähetyspäähän tehdä joko Java AWT tai Swing käyttöliittymäelementeillä. Valitsimme Swing elementit koska ne näyttävät samoilta kaikissa käyttöjärjestelmissä. Komponentin vaatimaan signalointiin käytetään Stream Eventtejä (SE), eli vuo tapahtumia. Stream Eventit ovat lyhyitä sanomia joilla on useita tunnisteita ja jotka voivat välittää 246 tavua tietoa mukanaan. Teoriassa eventit soveltuvat hyvin komponentin käyttöön. Käytännössä ei voida olla varmoja tuetaanko niitä kaikissa lähetysjärjestelmissä ja päätelaiteissa. Näin ollen on myös tärkeää dokumentoida muita teknisiä ratkaisuita joilla signalointi voitaisiin toteuttaa. Vaihtoehtoiset ratkaisut käsitellään myöhemmin kappaleessa 7. 3.2 Signalointi Tässä luvussa kuvataan signalointi lähetys- ja asiakaspään välillä. Signaloinnin tavoitteena on välittää tieto ohjelma-ajasta ja ohjelman tilasta. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 11/19
Stream Eventtejä lähetetään tasaisesti 10 sekunnin välein kun ohjelman tila ei muutu. Näin asiakaspää pysyy synkroonissa ja pääsee mukaan palveluun viimeistään kymmenen sekunnin kuluttua käynnistyksestä. 10 sekuntia on kompromissi jossa halutaan tuottaa mahdollisimman vähän liikennettä, mutta toisaalta saavuttaa suhteellisen nopea mukaan pääsy asiakaspäässä. Tätä arvoa voidaan muuttaa integraatio vaiheessa jos siihen ilmenee tarvetta. Kun ohjelman tila muuttuu lähetetään uusi tila ja sen hetkinen aika välittömästi. Stream Eventit voivat olla kahta eri tyyppiä ajastettuja tai välittömiä, eli do it now tyyppiä. Koska ajastus ei ole tarpeeksi tarkka käytämme välittömiä tapahtumia. Jokaisessa Stream Eventissä on seuraavat kentät: EventName: EventID: EventNPT: EventPrivateData: Nimi jolla asiakaspään osa tilaa tapahtuman. Tapahtuman tunniste, tämän pitää olla eri jokaiselle lähetettävälle tapahtumalle. Välittömille tapahtumille arvon pitää olla välillä 0x0001 ja 0x3FFF. Ajastetun tapahtuman ajankohta, tätä ei käytetä Korkeintaan 246 tavua dataa. Aika- ja tilatieto koodataan tähän kenttään. Tapahtuma luodaan ensin karuselliin kerran. Tämän jälkeen se voidaan laukaista useita kertoja eri tiedoilla. Luominen tehdään manuaalisesti eikä sitä varten toteuteta toistaiseksi mitään toiminnallisuutta OAVK:in. Laukaisua varten sen sijaan tehdään toiminnallisuus, joka integroidaan testikaruselliin yhdessä Digitan asiantuntijoiden kanssa. 3.2.1 Aika- ja tilatiedon koodaus Aika- ja tilatiedolle on käytettävissä 246 tavua tilaa. Tilatiedolle voidaan varata yksi tavu vaikkakin neljän tilan esittäminen vaatii vain murto-osan siitä. Aikatiedon esittäminen on hiukan monimutkaisempaa. Javassa aika esitetään yksinkertaisesti millisekunteina, siten että ajanlasku alkaa vuoden 1970 ensimmäisestä millisekunnista. Tietotyyppinä ajan säilyttämiseen Javassa käytetään 8 tavuista long muuttujaa. Tätä samaa ja kompaktia esitystä kannattaa käyttää myös ajan siirtämisessä tapahtuman mukana. Tarvitaan siis yhteensä vain 9 tavua aika- ja tilatiedon välittämiseen. Ensimmäinen tavu on tilatietotavu ja seuraavat 8 tavua sisältävät ohjelma-ajan. Seuraavassa taulukossa esitetään mitkä tilatietotavun arvot vastaavat mitäkin tilaa. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 12/19
Arvo 0x00 0x01 0x02 0x03 Tila Ohjelma ei ole alkanut Ohjelma on käynnissä Ohjelmassa on katko Ohjelma on loppunut Jos tilatietotavulla on jokin muu arvo kuin taulukossa määritelty on kyseessä tiedonsiirtovirhe ja tapahtuman tiedot pitää hylätä. 3.3 Ohjelmistoarkkitehtuuri, moduulit ja prosessit OAVK arkkitehtuuri on kuvattu seuraavassa erikseen lähetys- ja asiakaspään osalta. 3.3.1 Asiakaspään arkkitehtuuri 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. 3.3.2 Lähetyspään arkkitehtuuri Lähetyspään toteutukseen kuuluu seuraavat osat: 1. Liityntä objektikaruselliin 2. Ydin, joka pitää yllä aika- ja tilatietoa Tekninen määrittely, Ohjelma-ajanvälitys komponentti 13/19
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.digitvsynkro.programtime.sender pakettiin. Käyttöliittymä toteutetaan org.digitvsynkro.programtime.testui pakettiin. 3.4 Moduulien kommunikointi Lukuun ottamatta kohdassa 3.2 käsiteltyä signalointia joka tehdään objektikarusellin avulla muut OAVK osat kommunikoivat keskenään Java rajapintojen yli. Seuraavassa kaaviossa on kuvattu osien välinen kommunikaatio yleisellä tasolla. Kuva 2 Tiedonkulku ohjelma-ajanvälitys komponentissa 4 UML LUOKKAKAAVIOT Tässä kappaleessa kuvataan OAVK:n ohjelmiston rakenne yksityiskohtaisella tasolla. Kuvauksessa käytetään UML luokkakaavioita. OAVK jaetaan kolmeen pakettiin: receiver, sender ja testui. Jokaisesta paketista on seuraavassa oma kaavionsa ja sannallinen kuvaus. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 14/19
Toteutettavan koodin kieli on englanti, mukaan lukien kommentit koodissa. Koodi kommentoidaan Javadoc kommentein, joista voidaan helposti generoida html muotoinen dokumentaatio. 4.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 3 Receiver paketin luokat ja rajapinnat Aika- ja tilatiedon välitykseen tarvittavat metodit on määritelty ProgramTime rajapinnassa, jotta toteutusluokka voidaan helposti vaihtaa tarpeen tullen. 4.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 Tekninen määrittely, Ohjelma-ajanvälitys komponentti 15/19
toteuttaa ObjectCarouselInterface rajapinnan. Rajapinnassa ProgramStates on määritelty kokonaisluku vakiot jotka vastaavat ohjelmien eri tiloja. Kuva 4 Sender paketin luokat ja rajapinnat 4.3 Testui paketti Kuvassa 5 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ä. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 16/19
Kuva 5 Testui paketin luokat ja rajapinnat 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. 4.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 Javan 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. Jos käyttöliittymään lisätään myöhemmin toimintoja jotka ovat ytimen laukaisemia tulee synkronointi jonkin yhteisen objektin kautta. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 17/19
4.5 Komponentin testaus Koska MHP päätelaitteita ei ole joudutaan OAVK:n testaus tekemään aluksi työasemassa. Täällä säästetään aikaa, koska on oletettavaa että testaus on hitaampaa MHP ympäristössä. Työasema testausta varten joudutaan toteuttamaan objektikarusellia simuloiva palvelu joka välittää tapahtumia. Lisäksi joudutaan toteuttamaan yksinkertainen sovellus joka käyttää OAVK:n asiakaspään palveluita. Tämä sovellus voi olla joko graafinen tai merkkipohjainen. 5 ERITYISET TEKNISET RATKAISUT OAVK:n suunnittelussa käytetyt ratkaisut on dokumentoitu edellä. Erityistä niissä on vain tapahtumien käyttö, joka toteutetaan yhteistyössä Digitan asiantuntijoiden kautta. Lisäksi pitää huomata että kappaleessa 7 selvitetään muita mahdollisia tapoja ratkaista komponentin tarvitsema tiedonvälitys. 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:n, pitää käynnistää manuaalisesti uudelleen. 6 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. 2. Käyttäjän antama syöte on virheellinen. Menettely: annetaan käyttäjälle virheilmoitus. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 18/19
7 HYLÄTYT RATKAISUVAIHTOEHDOT 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. 7.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. 7.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ä. 7.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. 8 JATKOKEHITYSAJATUKSIA OAVK on komponenttina yksinkertainen eikä sen kehittämiselle jatkossa näy tarvetta. Jatkossa voisi tietysti olettaa että MHP standardiin tulisi vakiona vastaava palvelu. 9 KESKENERÄISET ASIAT OAVK:n kannalta keskeneräisiä asioita ovat tällä hetkellä tapahtuma objektien luominen objektikaruselliin sekä tapahtumien laukaiseminen. Näiden toteutus riippuu pitkälti käytettävästä objektikarusellista. Digitalta on luvattu tarjota asiantuntija-apua, konhan ensimmäiset MHP päätelaitteet saadaan käyttöön. Tekninen määrittely, Ohjelma-ajanvälitys komponentti 19/19