Tik-110.300 Tietoliikennearkkitehtuurit. Tehtävä 7/syksy 1997.

Olli-Pekka Auvinen, 44010h

Televisiolähetyksen jakelupalvelu Calypso-arkkitehtuurissa.

Yleistä Calypso-arkkitehtuurista

Calypso on Teknillisen Korkeakoulun TLM-laboratorion tutkimusprojekti [1,2], joka pohjautuu osittain laboratorion TOVE-projektiin [3]. TOVE-projektin tuloksia on käytetty uuden kolmikerroksisen laajakaistaverkkoarkkitehtuurin suunnittelemiseksi. Calypso on palveluarkkitehtuuri, jossa palveluiden luominen, kehittäminen ja hallinta on tehty helpoksi.

Arkkitehtuurin alin kerros on FCL (Fabric Control Layer), joka vastaa ATM-kytkimen hallinnasta. Tämänhetkisessä kuitujen hallintakerroksen toteutuksessa on käytössä FSR (Frame Synchronized Ring) API, jolla ohjataan VTT:llä kehitettyä FSR- kytkintä. Toteutuksessa on varauduttu myös ottamaan käyttöön GSMP (General Switch Management Protocol). Kuidunhallintakerroksen liittymä tehdään Javalla. Toinen kerros on NCL (Network Control Layer), joka mahdollistaa päästä-päähän yhteydet, kontrollitiedon siirron ja virtuaalipolkujen varauksen. Kolmas kerros, SCL (Service Control Layer), muodostaa palveluiden ajoympäristön (SEE, Service Execution Environment) ja liittymän palvelusovelluksille [4]. Palveluiden ajoympäristö on vastuussa palveluiden hallinnasta. Palvelut toteutetaan agentteina ja ne toteutetaan Java-pohjaiseen ympäristöön. Uusien palveluiden eli agenttien lisäys ja poistaminen kytkinkohtaisesta ajoympäristöstä on tarkoitus toteuttaa dynaamisesti. Käyttäjän liittymä palveluihin tarjotaan palveluikoneiden kautta (SI, Service Icons). Palveluikonit kommunikoivat palveluagenttien kanssa esimerkiksi Java RMI:n avulla. Näin on esimerkiksi tv-jakelupalvelun toteutuksessa [5]. Palveluikonit on tarkoitus toteuttaa Java-appletteina, mutta nykyisten Javan turvallisuusrajoitusten vuoksi käytännössä ikonit toteutetaan ainakin aluksi Java-sovelluksina. Arkkitehtuurin kerrosmallin toteuttava ohjelmisto palveluagentteineen on ATM-kytkintä hallitsevassa työasemassa, jota kutsutaan SEP:ksi (Service Execution Point). Varsinaisessa implementaatiossa työasemassa on käytössä Linux-käyttöjärjestelmä.

Televisiolähetyksen jakelupalvelu

Televisiolähetyksen jakelupalvelu on Calypso-arkkitehtuurin ensimmäisiä toteutettuja palveluja. Palvelu koostuu kolmesta erillisestä komponentista: ohjelmalähteistä, palveluagentista ja katseluohjelmasta, joka käynnistetään palveluikonista. Lisäksi Palveluikonin ohjaus, esimerkiksi kanavan vaihto ja äänen voimakkuuden säätäminen tapahtuu infrapunakaukosäätimellä. Ohjelmalähteet sijaitsevat TV-jakelupalvelimilla.

Toteutetussa demoversiossa ohjelmalähteenä on C-kielinen Linuxissa toimiva yksinkertainen ohjelma, joka lukee tiedostosta MPEG-koodattua System Layer Streamiä ja lähettää tätä halutessa ATM PVC-yhteyden yli tai Internetin kautta UDP:llä (User Datagram Protocol). MPEG System Layer Stream sisältää kompressoitua Video Streamiä sekä Audio Streamiä. Ohjelmalähde lähettää koodatun streamin ATM-kytkintä hallitsevaan työasemaan (SEP). Projektin tässä vaiheessa lähetystapana käytetään ATM PVC-yhteyttä.

ATM-kytkintä hallitsevan työaseman palveluajoympäristössä on palveluagentti, jolla on hallussa tiedot kytkimeen tulevista tv-lähetyksistä. Näitä tietoja on mm. kanavan nimi, kanavaan liittyvä Multicast-yhteys, kytkimen portti (josta lähetys otetaan sisään), VPI (Virtual Path Identifier), VCI (Virtual Channel Identifier) ja tieto kanavan maksullisuudesta. Jokaisella kanavalla on siis oma Multicast-yhteys, jossa on yksi sisääntuleva yhteyspiste ja kytkimen kautta katselupalvelun käyttäjien lukumäärän mukainen määrä ulosmeneviä yhteyspisteitä. Kanavien tiedot palveluagentti hakee käynnistyksen yhteydessä omasta konfigurointitiedostosta. Agentti pitää listaa kaikista kytkimeen saapuvista tv-kanavista. Palveluagentti kommunikoi palveluikonin kanssa käyttäen Java RMI:tä (Remote Method Invocation). RMI mahdollistaa etäolioiden luomisen. Näille olioille annetaan oma tunniste (URL) ja luomisen jälkeen ne sidotaan RMI:n rekisteröintikantaan (rmiregistry). RMI käyttää etäolioviittauksien siirtoon sekä metodien parametrien ja paluuarvojen siirtämiseen TCP:tä (Transmission Control Protocol). Tällöin tiedot etäolioista siirtyvät Internetin kautta. Kun oliot on sidottu rekisteröintikantaan, niistä voidaan hakea viittaus ja niiden metodeja voidaan kutsua etäkoneista. Edellytys olioiden toimivuudelle on että ne toteuttavat Remote-rajapinnan, jossa määritellään ne metodit, joita on mahdollista kutsua etäkoneista. Palveluagentti toimii siten, että käynnistyessä se luo yhden etäolioinstanssin, jota käytetään tv-jakelupalveluun liittymisessä. Tämän jälkeen aina, kun uusi käyttäjä siirtyy käyttämään palvelua, palveluunlittäjäinstanssi luo oman palveluolioinstanssin uniikilla tunnisteella palvelemaan yksittäistä käyttäjää. Tämä instanssi toteuttaa käytäjään liittyvät toiminnot, kuten kanavanvaihdon.

Palveluikoniosuus jakelupalvelussa koostuu Java-sovelluksesta, joka käynnistää katseluohjelman, jolla pystytään lukemaan MPEG-koodattua System Layer Streamiä. Katseluohjelma ei ole laitteistoriippumaton. Ohjelmana käytetään MpegTV Playeriä, jonka oikeudet kuuluvat MpegTV LLC:lle ja ohjelmasta on hankittu kehityslisenssi projektia varten. Ohjelma pystyy lisäksi sopeutumaan tilanteisiin, joissa laskentateho ei riitä purkamaan kaiken aikaa syötteenä annettua MPEG-streamiä. Katseluohjelma liitetään linuxin ATM API:lla luettuun MPEG-streamiin erillisellä välitysohjelmalla. Tämä ohjelma mahdollistaa myös palveluikonista lähetettävien kontrolliviestien välityksen MpegTV:n käyttäjärajapinnalle. Nämä viestit on tarkoitettu mm. äänen voimakkuuden säätämiseen sekä kuvan zoomaukseen. Palveluikoni kommunikoi välittäjäohjelman kanssa UDP-sokettien kautta ja käyttää omaa protokollaa kontrolliviestien ja niiden kuittausten lähetykseen. Käynnistettäessä palveluikoni, hakee se katsojakohtaiset parametrit Javan laitteistoriippumattomista ympäristömuuttujista (Properties). Tässä vaiheessa ainoa parametri on ATM-kytkimen portti, johon kyseinen käyttäjä on liitetty. Palveluikoni avaa ikkunan, jossa pidetään tietoja kyseisenä ajankohtana katsotusta tv-kanavasta. Ikkunasta pystytään avaamaan myös toinen ikkuna, josta nähdään mahdolliset kanavavaihtoehdot. Ikoniohjelma hakee ATM-kytkintä ohjaavasta työasemasta RMI:n avulla viittauksen palveluagentin palveluunlittäjäinstanssiin, jota pyydetään luomaan uutta käyttäjää varten uusi palveluolioinstanssi ja palautetaan tämän uuden instanssin uniikki tunniste, kun se on sidottu RMI:n rekisteröintikantaan. Tämän jälkeen haetaan viittaus RMI:llä palveluolioinstanssiin. Palveluolioinstanssilta saadaan tietoon lista mahdollisista kanavista sekä (VPI, VCI)-pari, jonka se on varannut tätä käyttäjää varten käyttäjäkohtaisesta portista. Palveluikonin käynnistyttyä mitään kanavaa ei ole valittu. Kanavanvaihto tapahtuu siten, että palveluolioinstanssia pyydetään vaihtamaan haluttu kanava. Palveluolioinstanssille tämä merkitsee ensin poistamista yksi yhteyspiste nykyisen kanavan Multicast-yhteydestä, siinä tapauksessa, että oltiin jo valittu jokin kanava. Tämän jälkeen haetaan halutun uuden kanavan Multicast-yhteys ja luodaan uusi yhteyspiste ja lisätään se tämän yhteyden yhdeksi ulostuloksi, jolloin kanavanvaihto on suoritettu.

Katseluohjelman ja ohjelmalähteen osalta on toteutettu myös toinen versio, joka kuitenkin hylättiin laadukaan MpegTV:n vuoksi. Tämä aikaisempi versio käytti MPEG Video Streamin purkamiseen Berkeleyn dekooderia, jota oli muokattu siten, että se pystyi lukemaan streamiä Linuxin ATM- tai UDP-soketista. Lisäksi dekooderiin oli tehty purkamistehon vaihteluun mukautuminen. Tämä toteutettiin siten, että lähettävä pää parseroi MPEG Video Stream:in I-, B- ja P-kehyksiksi - riippuen kehyksen koodausmenetelmästä. Nämä kehykset ovat MPEG-standardin mukaisia. I-kehykset sisältävät kaiken tiedon kehyksen purkamiseksi ja niitä on streamissä esimerkiksi joka kolmastoista kehys. P-kehykset ennustetaan edellisestä I-kehyksestä standardin määrittelemällä algoritmilla ja B-kehykset interpoloidaan kaksisuuntaisesti näistä liikevektoreiden avulla. Tällöin I-kehyksen ja P-kehyksen välissä on yleensä pari B-kehystä. Jakso kompressoitua streamiä voi olla esimerkiksi I-B-B-P-B-B-P-B-B-P-B-B-I-B-B-P- - - jne. Tällöin jakso I-kehyksestä toiseen muodostaa GOP-rakenteen (Group of Pictures). Kehystysparseroinnin jälkeen lähettävä pää siirtää verkon yli yhdessä paketissa yhden kehyksen, jolloin dekooderin puolen on helppo jättää väliin tarvittava määrä kehyksiä, jos purkamisteho laskisi alle vaaditun tehon. Siirrossa käytetyn protokollan kehys sisältää aikaleimoja erillisille kehyksille, joita dekooderi käyttää väliinjätettävien kehyksien valinnassa. Tämän ratkaisun huonona puolena on se, että Berkeleyn dekooderi ei tue System Layer Streamin purkamista Audio Streamin osalta, jolloin kanavalta ei saada ääntä kuulumaan. Paras ratkaisu olisi siirtää streamin purkaminen MPEG-dekoodaavalle kortille, jolloin dekoodausteho ei olisi ongelma. Vaihtoehtoiset ratkaisut ovat edelleen harkinnassa, mutta ensimmäinen demo (joulukuussa 1997) tullaan pitämään MpegTV:llä.

Kanavien valinta palveluikonin puolella tapahtuu käyttämällä infrapunakaukosäädintä. Infrapunalähettimellä vastaanotetut koodit tulkitaan Linuxin moduulia käyttävällä C-kielisellä ohjelmalla ja lähetetään edelleen omilla tunnisteilla eteenpäin palveluikonille käyttäen TCP:tä. Palveluikonissa vastaanotetaan kaukosäädinviestejä JavaBeans-mallin mukaisella 'kuuntelijalla'. Kun vastaanotetaan uusi viesti kaukosäätimeltä generoidaan tapahtuma (Event), jonka seurauksena kaikkien kuuntelijarajapinnan toteuttavien instanssien rajapinnassa määriteltyä tapahtumaan liittyvää metodia kutsutaan. Palveluikonin nykyisessä toteutuksessa näitä instansseja on kaksi. Palvelun kannalta oleellisempi on kanavanvaihtoa etäolioviittaukselta pyytävä instanssi. Toinen olio sisältää demonstraatiotarkoituksessa käytettävän kaukosäätimen kuvan, johon päivitetään viimeisimmät kaukosäätimen painallukset. Tämä kaukosäätimen kuva on omassa ikkunassaan, jonka näyttäminen on sidottu ikoniohjelman käynnistyksessä annetuun optioon.

Viitteet:

[1] Executive Summary (***)
<URL:http://www.tcm.hut.fi/Research/CALYPSO/summary.html>

[2] Calypso project personnel contact information (**) <URL:http://www.tcm.hut.fi/Research/CALYPSO/personnel.html>

[3] TOVE-esite (*)
<URL:http://www.cs.hut.fi/~tta/TOVE-esite.html>

[4] Calypso: System Components and Tools for Media Distribution over Broadband Networks (*****)
<URL:http://www.tcm.hut.fi/Research/CALYPSO/published/ slideshows/lappeenranta_aug97/index.htm>

[5] Räsänen J., Koponen P., Martikainen O. Broadband Network Architectures, Proceedings of the Network Information Processing Systems '97 Conference (Boyanov K., ed.), Sofia, Bulgaria, lokakuu 1997(*****)

Lisätietoviitteet aiheesta:

[6] Broadband Network Architectures (*****)
<URL:http://www.tcm.hut.fi/Research/CALYPSO/published/ slideshows/sofia_oct97/index.htm>

[7] 1997 International Conference 2IN'97 (*)
<URL:http://www.prism.uvsq.fr/public/marefat/2IN97/2in97.html>

[8] OPENSIG Spring '97 Workshop (***)
<URL:http://www.cl.cam.ac.uk/Research/SRG/opensig97/>

[9] The ATM Forum (*)
<URL:http://www.atmforum.com/>

Javaan liittyvät lisätietoviitteet:

[10] JavaBeans Documentation (**)
<URL:http://java.sun.com/products/jdk/1.1/docs/guide/beans/index.html>

[11] RMI Documentation (**)
<URL:http://java.sun.com/products/jdk/1.1/docs/guide/rmi/index.html>

MPEGiin liittyvät lisätietoviitteet:

[12] MPEG.ORG - MPEG Pointers and Resources (*)
<URL:http://www.mpeg.org/>

[13] MPEG-2 FAQ (*)
<URL:http://bmrc.berkeley.edu/projects/mpeg/faq/MPEG-2-FAQ.html/>

[14] MPEG Moving Picture Expert Group Information (*)
<URL:http://www.vol.it/MPEG/>

[15] MPEG-FAQ 4.1 (*)
<URL:http://www.mpeg1.de/mpegfaq/>


Olli-Pekka Auvinen
Last modified: Fri Oct 31 11:20:03 EET