... Programare Multimedia ...

Cap 6. Limbajul SMIL.

Synchronized Multimedia Integration Language (SMIL) a fost creat in ideea de a reprezenta pentru multimedia ceea ce HTML reprezinta pentru hypertext. El se bazeaza pe XML si pemite crearea de prezentari distribuite care sa integreze si sincronizeze elemente multimedia avand cele mai diferite formate. Incepand cu versiunea 2.0 SMIL a fost definit ca un meta-limbaj cu ajutorul notiunilor de modularizare si profilare. Din el pot fi derivate diverse limbaje ca subseturi ale standardului SMIL. Versiunea actuala este SMIL 3.0 si specificatia sa completa se gaseste pe paginile W3C SMIL 3.0. Ea este sprijinita de diverse companii in domeniul dezvoltarii de media printre care Macromedia, Adobe si RealNetworks. Microsoft s-a alaturat de asemenea acestui standard contribuind prin tehnologia proprie (HTML+TIME) si prin suportul in Internet Explorer.
 

6.1. Structura unui document SMIL

Un document SMIL este similar ca si structura cu un  document HTML. Ca si acesta este compus din o sectiune <head> care va cuprinde formatarea generala si  meta-informatiile si o sectiune <body> care va contine prezentarea cu informatiile de sincronizare si interactivitate. Sectiunea <body> cuprinde in general o combinatie de entitati definite prin trei taguri structurale (<seq>, <par> si <excl>). Prin tagul <seq> se pot defini playlist-uri simple, secventiale; prin <par> zone si straturi multiple de redare in paralel; iar prin <excl>  eventimente exclusive declansate prin intreruperi.
SMIL utilizeaza adrese URL pentru a desemna obiecte media, permitand reutilizarea acestor obiecte si pastrearea lor in mod distribuit pe diverse servere. Pentru transferuri se poate preciza si largimea de banda asociata acestora.

Structura de baza a unui document SMIL se aseamana cu cea a unei pagini HTML:

<smil>
 <head>
  <meta> informatii </meta>
  <layout>
   <!-- pozitionare si afisare -->
  </layout>
 </head>
 <body>
   <!-- componente multimedia si
        sincronizare -->
 </body>
</smil>

Sectiunea <layout> permite crearea "scenei" pe care vor evolua entitatile multimedia din prezentare.
Entitatile (componentele) multimedia din sectiunea <body> sunt definite prin adrese URL, li se atribuie un nume (handler) si pot avea diverse formate: imagini, animatii, streamuri video, clipuri audio sau video, fisiere text, fisiere flash si alte formate pentru care exista instalate playere specifice.

Metainformatii SMIL
Metainformatiile din sectiunea <meta> reprezinta atribute ale documentului. Cele mai folosite atribute sunt: “abstract”, “author”, “base”, “copyright” and “title”. Ex:
<meta name="title" content="My SMIL Presentation"/>

6.2 Modulul SMIL Layout

Elementele acestui modul se folosesc in sectiunea <head> si sunt folosite pentru a defini si denumi ferestre si regiuni unde vor fi afisate elementele media. In lipsa acetor indicatii, playerul de SMIL va hotara singur unde sa plaseze elementele de media din pagina. Principalele elemente ale acestui modul sunt:
- <root-layout> Permite dimensiunea initiala a ferestrei prezentarii. Ex:
<root-layout backgroundColor="blue"
width="300" height="250"/>

- <top-layout> Permite definirea de ferestre multiple la o prezentare ca si alternativa la root-layout care permite o singura fereastra. Nu afecteaza sincronizarea. Ex:
<top-layout width="200" height="90"/>
Momentul in care fereastra este afisata se poate controla prin atributul open (onStart sau whenActive), respectiv prin close (onRequest sau whenNotActive).
- <region> Permite stabilirea pozitiei, dimensiunii si scalarii elemnentelor media din prezentare. Ex:
<region id="fixed1" width="320" height="240" />
<region id="relative1" width="50%" height="50%" />
Regiunile pot contine alte regiuni imbricate:
<region id="container1" width="200" height="200">
  <region id="in1" width="40%"
                   hieght="40%" />
</region>
Pentru controlul dimensiunii afisarii elementului in regiune sunt posibile urmatoarele optiuni:
>hidden - dimensiunea originala cu decupare daca este cazul(implicit)
>fill - redimensioneaza la dimensiunea ferestrei (va produce distorsiuni)
>meet - redimensioneaza dar pastreaza proportiile astfel incat sa incapa optim
>slice - redimensioneaza astfel incat cea mai mica dimensiune sa ajunga sa umple regiunea
>scroll - dimensiune normala dar cu posibilitate de scroll (nu toate playerele implementeaza corect)
Nivelul sunetului legat de media dintr-o regiune se poate stabili prin atributul soundLevel. Acest atribut poate fi utilizat si legat direct de element. Ex:
<region id="sunet"
            soundLevel="200%" ... />

Ordinea de afisare a obiectelor la suprapunerea regiunilor se poate stabili prin atributul numeri z-index. Valoarea 1 este cel mai ascus nivel.
- <regPoint> Este folosit pentru a defini puncte de referinta in interiorul unei regiuni oarecare. Ex:
<regPoint id="coltStanga" top="10" left="10"/>
In plus se poate specifica si punctul la care se face alinierea prin atributul regAlign (ex. center, topLeft, bottomMid etc.). In plus se poate utiliza atributul predefinit regPoint="center" pentru a specifica direct in cadrul elementului modalitatea de aranjare.

6.3. Modulul SMIL Timing and Synchronization

Acest modul premite orchestrarea prezentarii prin stabilirea timpului de intrare si a duratei de afisare a fiecarui element. Prin acesta se poate sincroniza diverse elemente cum ar fi o secventa video cu un element audio.
Elementele de sincronizare:
- <seq> Permite rularea secventiala a unei liste de entitati media. Este un asa numit "time container", fii sai fiind ordonati in ordinea aparitiilor in lista. Cel mai simplu exemplu este realizarea unei prezentari de tip slide-show cuprinzand imagini.
- <par> Permite rularea in paralel (in acelasi timp) a unor entitati media. Un exemplu simplu este cel care ruleaza simultan o secventa video cu o coloana sonora externa. La utilizarea lui <par> trebuie sa se tina cont de largimea de banda. 
- <excl> Permite rularea exclusiva a unui elemet. Daca rularea incepe in timpul rularii altui element, aceasta va fi automat oprita.
- <priorityClass> Permite controlul comportamentului la selectarea diverselor entitati sau actiuni. Permite stoparea sau intreruperea unui element in momentul in care alt element este ales. Se foloseste ca si fiu al unui element <excl>. Pentru a intrerupe rularea primului element in momentul selectarii celui de al doilea se poate folosi secventa:
<excl>
  <priorityClass peers="pause">
     <video id="first" src= 
                    "primul.avi" />
     <video id="second" src= 
                    "aldoilea.avi"/>
  </priorityClass>
</excl>

Atributele acestor entitati sunt:
- begin/end Permite specificarea momentului de start/stop a unui element. Valoarea se poate exprima in mod absolut in secunde (ex. 3s), ca si offset (+/-3s) sau relativ fata de un alt element (begin="el1.begin+5s"). Momentul inceperii/incheierii se poate specifica si prin referirea la o actiune ("el1.activateEvent+3s"). De asemenea pot fi utilizate si mai multe evenimente care sa declanseze startul, de ex. "3s; el1.activateEvent". Intrarea poate fi specificata si prin accesskey(tasta).
- dur Permite stabilirea duratei de rulare a unui element. Poate fi exprimata in secunde sau poate lua valoarea "indefinite".
- min/max Permite specificarea duratei minime/maxime de rulare a unui element. Are prioritate fata de evenimentele generate de utilizator. Pentru elemente care au o durata proprie (ex. clipuri audio sau video) se poate utiliza valoarea "media" pentru a specifica aceasta durata.
- endsync Permite terminarea fortata a unui grup functie de incheierea rularii elementelor care il compun. Valori posibile: first, last, all sau id(el).
- repeatCount Permite reluarea unui element sau grup de elemente de un numar specificat de ori sau in mod continuu (indefinite).
- repeatDur Permite reluarea unui element sau grup de elemente astfel incat sa acopere o anumita durata. Valoarea "indefinite" specifica repetarea continua. 
- fill Permite sincronizarea mai exacta intre obiectele unei prezentari. Valori posibile: remove, freeze, hold (pana la incheierea parintelui), default (ca si parintele).
- fillDefault La fel ca si fill dar se aplica unui intreg grup.  
- restart Utilizat in general pentru elemente audio/video permite specificarea comportamentului in timpul rularii acestora. Valori posibile: allways, whenNotActive, never, default.

6.4. Modulul SMIL Media Objects
Limbajul SMIL nu permite crearea de elemente media. Pentru realizarea unei aplicatii obiectele media trebuiesc referite extern.
Tipuri de elemente media (tipul final este identificat din continutul fisierului sau de tipul MIME transmis de catre server):
<animation> Utilizat pentru animatii (ex. SVG sau GIF animat).
<audio> Utilizat pentru secvente audio (ex. mp3 sau rm).
<brush> Permite specificarea unei culori, poate fi utilizat si pentru umplrea unei regiuni in locul unui element.
<img> Utilizat pentru imagini digitale (ex. gif, jpg, png).
<param> Utilizat pentru transmiterea de parametrii pentru elemente complexe (ex. prezentari flash).
<ref> Utilizat pentru un tip de media pe care nu stim singur cum sa-l incadram.
<text> Utilizat pentru definirea de text static. Poate proveni si dintr-un fisier text sau HTML.
<textstream> Utilizat pentru text dinamic.
<video> Utilizat pentru fisiere video (avi, mpeg, rm).
Atribute specifice:
- alt Permite specificarea unui text alternativ ce va fi afisat daca elementul respectiv nu este suportat de catre player.
- clipBegin, clipEnd Permit specificarea unei portiuni dintr-un clip care va fi redata de catre player.
- color Permite specificarea unei culori pentru un element de tip brush (nume culoare sau RGB in hexa).
- erase Permite specificarea comportamentului dupa incheierea rularii clipului (whenDone -  obiectul este eliminat din scena, never - obiectul este pastrat pe scena).
- src Permite specificarea adresei unui obiect extern care va fi referit pentru a fi inclus in prezentare.
- sensitivity Permite specificarea modului in care obiectul interactioneaza cu utilizatorul (daca este opaque va opri evenimentul utilizatorului iar daca este transparent va lasa sa treaca evenimentul spre elementele de sub el).
- title Permite specificarea titlului unui obiect. Cand devine activ playerul va afisa acest titlu (nu exista insa un mod standard de afisare).


6.5. Modulul SMIL Transition Effects

Acest modul permite controlul modului in care se face trecerile intre elementele unei prezentari. El contine doua elemente:
<transition> Utilizat la definirea in sectiunea head a fiecarui fel de tranzitie posibil de folosit cu elemtele din sectiunea body. Un fel include un anumit tip de tranzitie, de o anumita durata si avand diferiti parametrii specifici prestabiliti. 
<transitionFilter> Utilizat daca se doreste specificarea unei tranzitii direct la un element. Pentru aceasta va fi definit direct ca si copil a acelui element.
Atribute specifice:
- begin, end Permit specificrea momentelor in care incepe / se incheie o tranzitie. Observatia este ca tranzitia nu poate influenta timpul total de afisare a obiectului (daca timpul de afisare se incheie inaintea incheierii tranzitiei, obiectul va dispare de pe ecran inainte de terminarea tranzitiei).
- direction Permite specificarea directiei in care actioneaza tranzitia (forward sau reverse).
- dur Permite specificarea duratei tranzitiei.
- fadeColor Permite specificarea culorii de final a unei tranzitii.
- from, to Permite specificarea portiunii de tranzitie care ruleaza (intre 0.0 si 1.0). 
- horzRepeat, vertRepeat Permit duplicarea tranzitiei pe suprafata obiectului pe orizontala si verticala (>=1).
- mode Permite specificarea sensului tranzitiei (in sau out).
- type, subtype Permite specificarea tipului si subtipului tranzitiei (fade, slideWipe, barWipe, boxWipe, fourBoxWipe, barnDoorWipe, diagonalWipe, bowTieWipe, veeWipe, barnVeeWipe, zigZagWipe, barnZigZagWipe, irisWipe, triangleWipe, eyeWipe, starWipe, clockWipe, spiralWipe etc.) / (left, up, right, down, horizontal, vertical, topLeft etc.).

6.6. Modulul SMIL Animation

Modulul de animatii permite cresterea expresivitatii unei prezentari SMILE. A fost introdus din versiunea SMILE 2.0.
Principalele elementele pachetului sunt:
<animate> Implementeaza diverse tipuri de animatii controlabile prin parametrii specifici.
<set> Permite schimarea valorii unui parametru asociat unui element (ex. pozitia) pentru o anumita perioada de timp.
<animateMotion> Implementeaza deplasarea unui element dealungul unui drum liniar definit prin punctul de destinatie.
<animateColor> Implementeaza animarea culorii unui element pentru o anumita perioada de timp (ex. schimbarea culorii unui text).
Atributele specifice sunt:
- attributeName Permite specificarea atributului care va fi modificat de animatie (ex. left, soundLevel, panZoom etc.).
- from, to Permite specificarea punctului de unde incepe / se termina animatia.
- by Permite specificarea unui deplasament relativ.
- values Permite specificarea unei liste de valori pentru animatia curenta. Continutul listei depinde de atributul (attributeName) modificat de animatie.
- dur Permite specificarea duratei animatiei.
- begin /end Permit specificarea inceputului / sfarsitului unei animatii.