Esitutkimus MHP sovellusten synkronoituminen videokuvaan Versio Päiväys Tekijä Kuvaus 0.1 5.10.2001 Mika Ståhlberg Ensimmäinen luonnos 0.2 25.10.2001 Mika Ståhlberg Lisätty Xlet-kehitykseen liittyvä luku
Sisällysluettelo Taustaa...3 Multimedia Home Platform...3 Termejä...4 Objektikaruselli (Object Carousel; OC)...5 MHP synkronisointi ja objektikaruselli...7 Synkronointi...8 Triggerit...8 MHP Xletit ja niiden kehittäminen...11 Objektikaruselli ja Java...11 Käyttöliittymien luominen...12 Java ja synkronointi...12 MHP esitutkimus 2
Taustaa Multimedia Home Platform MHP on yritys adaptoida olemassaolevat Internet ja web-standardit digitaaliseen televisioon. Tavoitteena on tuottaa digitaalista sisältöä, jota voi katsoa sekä set-topboxilla ja TV :llä, että tietokoneella. MHP-sovelluksia voidaan käyttää webistä ja websisältöä MHP-sovelluksista käsin. MHP on tarkoitettu toimimaan samanlaisena sekä tavallisilla (terrestrial), kaapeli, että satelliittiyhteyksillä. MHP :n on kehittänyt eurooppalainen TV-yhtiöiden ja telehallintokeskusten yhteinen kehityselin, DVB. DVB :n standardit julkaisee Euroopan tietoliikennettä standardisoiva ETSI. MHP on monella tavalla avoin sikäli, että se käyttää monia webistä tuttuja teknologioita suoraan tai pienillä muutoksilla. Tiukimmat Linux-harrastaja (www.linuxtv.org) tuntuvat kuitenkin olevan sitä mieltä, ettei MHP ole avoin, sillä vain sen standardit ovat avoimet. Kaikki toiminta perustuu Sunin Java-moottoriin, joka ei tiukasti ottaen ole avoin. MHP-standardi tukee nykyisin sisältöä mm. seuraavissa formaateissa: PNG, JPEG, GIF, MPEG-1 ja MPEG-2. Java sovelmia (nimi MHP-maailmassa on Xlet ) voidaan tottakai myös toteuttaa, sillä MHP :n virtuaalimoottori (eli DVB-J) on itse asiassa vain hieman muokattu Java Virtual Machine. DVB-HTML on XHTML :n muunnos DigiTV käyttöön. Se sisältää kaikki eurooppalaiset merkit, mutta XHTML :n ominaisuuksia on rankasti karsittu. Tuettu skriptauskieli on JavaScriptin avoin johdannainen ECMAScript. Tyylisivuja (CSS2) voidaan käyttää XHTML :n tapaan, mutta niidenkin ilmaisuvoimaa on karsittu, tosin lisääkin on saatu. MHP mahdollistaa mm. objektien läpinäkuultavuuden, mikä on varmasti erinomaisen tärkeä ominaisuus DigiTV-sovelmissa. MHP :tä voidaan käyttää mm. sähköisiin ohjelmaoppaisiin, super-tekstitelevisioon ja turvalliseen sähköiseen kaupankäyntiin. MHP-moottori pystyy muokkaaman ja lukemaan ohjelmien tekstityksiä, mutta teksti-tv :seen ei ole MHP :llä minkäänlaista rajapintaa. Tämä on varmastikin suunniteltu estämään teksti-tv :n sisällön hyväksikäyttöä muiden palveluntarjoajien Xleteissä. Lisäksi MHP mahdollistaa synkronoinnin sovellusten ja tv-kuvan välillä. Tälle löytyy varmasti käyttöä etenkin erilaisissa visailuohjelmissa ja urheiluohjelmien informaatio pop-up ikkunoinnissa. Meidän työmme keskittyy juuri tähän synkroinoinnin hyödyntämisen toteuttamiseen, ja sikäli on erinomaisen perustavaalaatuaolevaa. MHP esitutkimus 3
Termejä AIT DAVIC DOM DSM-CC DVB Event Factory File Application Information Table; AIT on taulukko, joka siirretään karusellissa vastaanottimelle. Vastaanotinlaite tietää AIT :n perusteella, mitkä sovellukset ovat voimassa ja pystyy näin ollen puhdistamaan muististansa vanhat sovellukset ja muut tiedostot. AIT :n perusteella voidaan sovelluksia periaatteessa myös käynnistää automaattisesti. Digital Audio-Visual Council; Kahdensadan yrityksen yhdistys, joka oli mukana mm. DSM-CC :n määrittelytyössä. Davic on lopettanut toimintansa. Document Object Model; Alusta- ja kieliriippumaton rajapinta, jolla voidaan vaikuttaa dokumenttien sisältöön, rakenteeseen ja tyyliin. Digital Storage Media Command & Control: Siirtokerrosriippumaton tapa siirtää tietoa laajakaistayhteydellä. MPEG-2 ISO/IEC 13818-1 Standardi videosignaalin koodaamiseksi sisältää DSM-CC :n varhaisen version, jota käytetään objektikarusellinen luomiseen. Digital Video Broadcasting Tiedosto, jossa kuvataan, missä sovelluksen tarvitsemat Stream Event Message tiedostot sijaitsevat. Stream Event Messaget puolestaan linkittävät tapahtumien nimet ja ID :t. Lisäksi Event Factory Filessä kerrotaan, minkä nimiset tapahtumat tätä tiedostoa käyttävä sovellus tilaa. MHP esitutkimus 4
HAVi JavaTV MHP OC OCG PID TS Home Audio / Video Interoperability; Monenlaisia laitteita varten kehitetty käyttöliittymä API. Tuettuja mm. televisiot, kellot, kamerat ja videonauhurit. Käytetään MHP-Xleteissä Java AWT :n tilasta. SUNin kokoelma Java-luokkia digibokseja varten. MHP perustuu JavaTV :lle ja Personal Javalle. Multimedia Home Platform Object Carousel; Objektikaruselli, jossa tiedostot siirtyvät Set-Top boxiin. Pyörii ympäri vanhan kunnon teksti-tv :n tyyliin Object Carousel Generator; Palveluntarjoajille myytävä tuote, jolla he pystyvät valmistamaan ohjelmavirtaa, jossa on karuselli mukana. Packet ID. Objektikarusellit identifioidaan PIDin avulla. Transport Stream; siirtovuo, johon on kanavoitu sekä objektikaruselli, että MPEG-muodossa oleva kuvavirta (ja tietysti myös tekstitys yms. Kuvan lisämausteet). Objektikaruselli (Object Carousel; OC) Televisiolähetys on perusmuodossaan yksisuuntainen. Jos televisiolähetyksen mukana lähettäisiin muuta dataa (sovelluksia, kuvia, teksti-tv sivuja yms.) ainutkertaisina lähetyksinä, saattaisi tärkeää dataa jäädä saamatta televisionkäyttäjältä, joka laittaa tv :n päälle kesken ohjelman. Karusellissa tiedostot pyörivät katsojan saatavilla aina uudelleen ja uudelleen. Karusellissa pyörivät pelkkien tiedostojen lisäksi myös palvelimen hakemistorakenne, jolloin tiedostoihin voidaan viitata palvelimen hakemistopuun mukaan. Toistotiheys karusellissa voidaan määrittää tiedostokohtaisesti. Tekstitiedosto Kuvatiedosto Sovellus (Java) Hakemisto -objekti Kuva 1: Karusellin objektit MHP esitutkimus 5
Karuselli on suorituskyvyn kannalta haastava rakenne, sillä rajoitetuilla kaistanleveyksillä se pyörähtää kokonaan ympäri varsin verkkaisesti. Tästä johtuen tiedostoja täytyy priorisoida niiden tarpeiden mukaan. Osa tiedostoista on välttämättömiä sovelluksille (esim. Xlet-luokat), osa voi saapua myöhemmin (esim. koristeiksi tarkoitetut kuvat) ja osa muuttuu jatkuvasti (esim. Pop-up ikkunaan tarkoitetut tiedot formulakuskin nopeudesta tai sijoituksesta). Priorisoinnin lisäksi suorituskykyä voi kasvattaa tiedon pakkaamisella. Karuselli koostuu itse asiassa monesta sisäkkäisestä karusellista. DVB :n protokollapino selventänee tilannetta. Siitä voidaan nähdä, että MPEG-2 vuo sisältää CSM-CC karusellin, jonka päällä pyörii varsinainen digitelevision karuselli. Sovellukset DVB objekti karuselli DSM-CC objekti karuselli DSM-CC data karuselli MPEG-2 sektiot MPEG-2 Transport Stream Kuva 3: Objektikarusellia koskeva DVB protokollapino Karusellin sisältävä videovirta muodostetaan Transport Stream Builder sovelluksella, jossa jokaisesta objektista kerrotaan ainakin sen polku palvelimella ja prioriteetti, jolla se laitetaan uudelle kierrokselle. Kanavointilaitteelle (MUX) Tiedostot palvelimella TS jossa OC Transport Stream Builder UI TS soitin (yksi tai monia) XML OC kuvaus ja tiedostot Muut Transport Streamin osat OC (karuselli) kooderi Kuva 2: Objektikarusellin tiedostojen tie palvelimen kovalevyltä digitaalitelevisiolähetykseen kanavoiduksi Transport Streamiksi. TS soittimia voi olla useita, sillä ne voivat olla eri paikoissa (eri palveluntarjoajilla). MHP :n objektikaruselli on matkittu DVB- ja MHEG-maailmoista. Se kuitenkin on olennaisesti parempi, sillä siinä on mukana AIT (Application Information Table), jonka avulla vastaanottimen sovelluksia voidaan säädellä palveluntarjoajalta käsin. AIT on MHP esitutkimus 6
talukko, jossa on kuvaus sovelluksista ja muista tiedostoista, joiden kuuluisi olla käynnissä tai muistissa. MHP synkronisointi ja objektikaruselli DVB-järjestelmissä synkronisointi on erinomaisen tärkeää, sillä kuvan, äänen, tekstityksen ja objektikarusellin täytyy toimia jollakin tarkkuudella synkroonissa. MHP :ssä synkronointi on toteutettu lähes samalla tavalla kuin XML :n SMIL-kielessä (Syncronized Multimedia Integration Language), ja onkin ihmetelty, miksei MHP tue SMIL-formaattia suoraan. Audio-video-vuon aikaan liittyviä suoritteita siirretään Stream Event -tapahtumina, jotka lähetetään (broadcast) karusellissa. Sovellukset tilaavat näitä OC :lla pyöriviä tapahtumailmoituksia voidakseen synkronoitua kuvan tai vaikkapa muiden sovellusten kanssa. Kanavointilaitteelle (MUX) Tiedostot palvelimella TS jossa OC Transport Stream Builder UI TS soitin (yksi tai monia) XML OC kuvaus ja tiedostot Muut Transport Streamin osat OC (karuselli) kooderi Kanavointilaitteelta MPEG-videon aika Sovelluksen aika Kuva 4: Tapahtumailmoitusten (Stream Event) integrointi lähetykseen (TS) MHP esitutkimus 7
Synkronointi Triggerit Triggerit tarjoavat keinon, jolla sovellusten tarjoaja voi vaikuttaa sovellukseen, joka pyörii tv-katsojan set-top-boxissa. Triggerit ovat pieniä sanomia, jotka lähetetään tvlähetyksen tapahtumailmoituksina (Stream Events). Ne sisältävät yleensä ajan, jolloin ne pitäisi lähettää ja pienen määrän dataa, jota sovellukset voivat tilata. Aika tapahtumissa tarkoittaa aikaa median alusta, eli esimerkiksi kehyksiä tai sekunteja tv-ohjelman alkamisesta. Tapahtumille annetaan nimi, sovellukset tilaavat tietyn nimisen tapahtumailmoituksen ja tapahtumailmoitus lähetetään OC :lla kun määrätty aika ( ajanlaskun alusta) on kulunut. Tapahtuman nimi Aika Alku 00:00:00.00 Mainoskatko 00:13:34.20 Loppu 00:28:55.00 Taulukko 1: Yksinkertainen esimerkki tapahtumailmoitusten nimeämisestä ja aikautuksesta. Seuraavassa on esitetty Stream Event-ympäristö, niinkuin se on esitettynä MHP spesifikaation luonnoksessa v.1.1 (toukokuu 2001). Virallinen spesifikaatio (v1.0) ei kuvaa Stram Eventien sisältöä tai muuta niihin liittyvää kovinkaan tarkasti, joten sen perusteella eivät laitevalmistajatkaan todennäköisesti pysty laitteitaan suunnittelemaan. Set-top-boxissa pyörii jatkuvasti jonkinlainen daemon-tyyppinen User Agent, joka vastaanottaa kaikki tapahtumat. Agentti muuttaa DSM-CC Stream Eventit (TS :n tapahtumailmoitukset) DOM (Document Object Model) tapahtumiksi, joita sovellukset tilaavat. Sovellukseen liittyy event factory -tiedosto (XML :n DTD-formaatissa), jossa kerrotaan, mitä tapahtumia User Agent etsii sovellusta varten karusellista. Jos event factory -tiedosto puuttuu, käytetään oletustiedostoa. MHP esitutkimus 8
Stream Event sanoma (sijainti löytyy Event Factory-tiedostosta) Nimi1? ID1 Nimi2? ID2 ID, media stream User Agent tilaa tapahtuman nimeltä X Stream Event Descr. Saapuu karusellista? ID, aika, payload User Agent muuntaa tapahtuman nimen, ID :n ja datan (payload) DOM event tyypiksi ja attribuuteiksi DOM Event DVB-HTML dokumentti Media Stream (MPEG) Aika (Now Playing Time; NPT) Event Factory File Sovellus tiedostot Kuva 5: Tapahtumamekanismin kuvaus DVB-HTML-dokumentti voi tilata DOM Eventin joko Xletin tai ECMA skriptin kautta. Tilaaminen tapahtuu addeventlistener()-kutsun avulla. Sovellus tilaa jonkunnimisen tapahtuman ja tapahtumat tulevat karusellista lyhyellä ID-tunnuksella varustettuina. Stream Event-sanomassa (tai oikeammin, tiedostossa) kerrotaan, mikä nimi kuvautuu miksikin ID :ksi. User Agent kerää tapahtumat (ID :n perusteella) karusellista ja lähettää ne DOM Eventteinä sovellukselle kun tapahtumakuvauksessa (Event Description) kerrottu NPT-aika koittaa. Joissakin tapahtumissa aika on muotoa nyt heti, jolloin User Agent muodostaa ja toimittaa DOM Eventin välittömästi. Stream Event Description, eli varsinainen tapahtumaviesti voi sisältää jotakin dataa (payload). User Agent lukee tämän datan ja jäsentää sen Event Factory definitiontiedostossa olevan säännöllisen lausekkeen (regexp) avulla. Jäsennetty data laitetaan DOM Eventin mukaan ja toimitetaan sovellukselle. <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//DVB//DTD XHTML DVB HTML 1.0//EN" "http://www.dvb.org/mhp/dtd/dvbhtml-1-0.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:dvbhtml="http://www.dvb.org/mhp"> <head> <script type="text/ecmascript"> // event listener declaration function handleevent(evt) { /* Handle the event */ } // the listener is positioned on the document root node, // i.e. the html node function setupeventlisteners () { var htmlnode = document.documentelement; htmlnode.addeventlistener("mytriggerevent", handleevent, true); } </script> </head> MHP esitutkimus 9
<body dvbhtml:onload="setupeventlisteners()"> </body> </html> Esimerkki 1: DVB-HTML-tiedosto, jossa tilataan tapahtuma. Event Factory tiedosto linkitetään HTML-tiedoston kanssa laittamalla samaan hakemistoon saman niminen.lnk tiedosto esim. Index.html? index.lnk. Event Linkage tiedosto (*.lnk) on XML-tiedosto, jossa on kerrottuna mitkä Event Factorytiedostot liittyvät mihinkin DVB-HTML-dokumenttiin. Huomattavaa on, että yksi sovellus voi koostua monesta HTML-dokumentista, ja jokaisella näistä voi olla yksi tai useampi linkitystiedosto. Document Object Model (DOM) on rajapinta (API), jolla Java ja ECMAScript sovellukset voivat vaikuttaa dokumenttien sisältöön, rakenteeseen ja ulkoasuun. DVB- HTML tukee tapahtumamodulia, joka on kuvattuna DOM Level 2 Events Spesifikaatiossa. MHP esitutkimus 10
MHP Xletit ja niiden kehittäminen Xlettien kehittämistä pitää ajatella aivan tavallisena Java applettien koodaamisena. Ainoa ero on MHP :n tarjoaminen kirjastojen aiheuttamat rajoitukset ja digiboksin suhteellisen pieni suorituskyky tavalliseen tehotyöasemaan verrattuna. Televisioruudun kuvasuhde, värierot ja pikselien lomittaminen aiheuttavat ongelmia Xletkehittäjälle. Mm. lomittamisen takia ei yhden pikselin paksuisia viivoja kannata käyttöö Xleteissä. Xlettien kehittämisen voi tehdä aivan tavallisessa JDK-ympäristössä, jossa on muutama MHP-luokka asennettuna. MHP spesifikaatio (ETSI TS 101 812 v1.1.1 heinäkuu 2000, luku 11.3 s. 87? ) luettelee ne Javan perusprimitiivit, joita MHP :ssä ei ole toteutettu ja ne paketit, joita MHP tukee peruspakettien lisäksi. Testaaminen todellisella käyttöliittymällä ei kuitenkaan näin onnistu, vaan tarvitaan joko MHPdigiboksi tai esim AltiComposer-sovellus. Lisäksi todellisen funktionaalisuuden testaamiseen tarvitaan DSM-CC Object Carousel Builder ja MPEG-kanavointilaite. MHP sovellusten täytyy määrittää luokka, joka käyttää (implements) javax.tv.xlet.xlet rajapintaa. Kyseinen rajapinta ei eroa java.applet.appletista kovin paljoa, mutta on yksinkertaisempi. Alustamiseen MHP kutsuu seuraavia metodeja seuraavassa järjestyksessä: initxlet(), startxlet() ja Xletin sammuessa destroyxlet(). Objektikaruselli ja Java Objektikaruselli näkyy Xletille (read only) tiedostojärjestelmänä. Classpath määräytyy jo Xletin käynnistyessä, joten tiedostoja voidaan lukea karusellista Java applicationin tapaan. Appletin tapa hakea tiedostoja URLin perusteella ei toimi. Esimerkiksi seuraavanlaisia komentoja voidaan käyttää muiden tiedostojen lukemiseen: new java.iofileinputstream( foo.bar ) tai Toolkit.getImage( MaedchenInternaat.jpg ) org.dvb.dsmcc paketti laajentaa java.io komentoja. Sen avulla voidaan toimia asynkronisesti objektikarusellin kanssa (org.dvb.dsmcc.dsmccobject.asynchronousload()), jolloin esimerkiksi kuvien latautumista ei tarvitse odottaa ennen sovelluksen toimimista. MHP esitutkimus 11
Käyttöliittymien luominen Käyttöliittymässä voidaan käyttää perinteistä java.awt pakettia ja Java 1.1 tapahtumakäsittelyä. Eroina digiboksien ja tietokoneen välillä käyttöliittymässä joitain, mm. ikkunat eivät väälttämättä voi olla päällekkäin. Television näyttötapaa kompensoimaan käytetään org.dvb luokkia: org.dvb.ui.dvbcolor Mahdollistavat läpikuultavuuden (ns. Alpha) org.dvb.ui.dvbgraphics käyttöliittymäkomponenteille org.dvb.ui.dvbbufferedimage Kaksoispuskuroinnin käyttö sovelmissa. Estää välkettä. org.dvb.ui.dvbtextlayoutmanager Tekstin kirjoittaminen ruudulle Myös org.havi käyttöliittymäpakettia voidaan käyttää Xletien kehittämisessä. Esim. org.havi.ui.event.hrcevent auttaa kaukosäätimen tapahtumien käsittelyssä. Huomattava on, ettei digiboksissa aluksi ole hallintalaitteena minkäänlaista hiirtä, vaan ainoastaan muutama kaukosäätimen nappi. Varsinaiset käyttöliittymäkomponentit voidaan piirtää käyttäen java.awt.graphics primitiivejä tai HAVi widgettejä. Ylin Container-olio saadaan selville javax.tv.tvcontainer.getrootcontainer JavaTV-metodilla tai HAVi-metodilla org.havi.ui.hscenefactory Videokuvan ja äänen soittamista varten MHP sisältää Java Media Frameworkin toiminnallisuuden. org.davic.net.dvb.dvblocator primitiivillä voidaan hakea mediavirtaa karusellista, kunhan tiedetään Transport Stream ja Service ID (SI). Videokuvan skaalaamiseen voidaan käyttää javax.tv.media.awtvideosizecontrol tai org.dvb.media.backroundvideopresentationcontrol primitiivejä. Java ja synkronointi Median kanssa voidaan synkronoitua Stream Eventeillä: org.dvb.dsmcc.dsmccstreamevent.subscribe() tai org.davic.media.streameventcontrol.subscribestreamevent() ja NPT :n lukemiseen voidaan käyttää primitiiviä org.davic.media.mediatimeeventcontrol tosin myös org.dvb.dsmcc.dsmccstream.getnpt() mahdollistanee DVB Streamin ajan selvittämisen. Ylipäätänsäkin voidaan sanoa, että kaikki Stream Eventeihin liittyvä löytyy org.davic ja org.dvb.dsmcc.dsmccstream paketeista. MHP esitutkimus 12