PROGRAMAREA FOLOSIND JAVA MEDIA FRAMEWORK
1/13425
calendar_month 26 Ian 2007, 00:00
O sursa de date incapsuleaza steam-ul media. In JMF, un obiect DataSource reprezinta media audio, video sau o imbinare a acestora. O sursa de date poate fi un fisier sau un stream ce vine de pe retea. Dupa ce se determina locatia sau protocolul, DataSource incapsuleaza atat locatia media, cat si protocolul si software-ul folosit pentru a livra media. Odata creata, o sursa de date poate fi oferita unui Player pentru a fi rulata, pentru Player fiind indiferent originile sursei de date.

Date media pot fi obtinute din surse variate, cum ar fi fisiere locale sau de pe retea, sau transmisii live de pe Internet. Astfel, o sursa de date poate fi clasificata dupa modul in care incepe transferul:

- Sursa de date pull: clientul initializeaza transferul si controleaza transferul de la sursa. HTTP si FILE sunt exemple de protocoale pentru acest tip de date.

- Sursa de date push: serverul initializeaza transferul datelor si controleaza modul in care sunt transferate datele. Exemple de surse de acest tip includ transmisie media si video la cerere.

Un dispozitiv de captura il reprezinta hardware-ul folosit pentru a captura datele, de exmplu microfon, camera web. Datele capturate de la dispozitiv pot fi furnizate unui Player pentru a fi redate, pot fi procesate pentru a converti datele in alt format sau pot fi stocate.Dispozitivele de captura pot fi categorisite in surse pull sau push. Cu o sursa pull, utilizatorul hotaraste cand sa captureze o imagine. In schimb un microfon se comporta ca o sursa push, deoarece ofera continuu stream de date audio.

Un player ia o intrare de stream audio sau video si o reda la un speaker sau la un ecran. Player-ul poate avea stari deoarece trebuie sa se pregatesca si sa-si pregatesca sursa de date ininte de a reda media. JMF defineste sase stari pentru un Player:

- Nerealizat: in acest stadiu, obiectul Player a fost initializat. Aici Player-ul nu stie inca nimicdespre media.

- In curs de realizare: Un Player se schimba de la stadiul de unrealized la realizing atunci cand este apelata metoda realize(). In acest stadiu, Playerul este in procesul de a-si determina cerintele resurselor.

- Realizat: In acest stadiu Player-ul stie de ce resurse are nevoie si are informatii despre tipul de media pe care trebuie sa-l redea. Poate, de asemenea sa ofere componente vizuale si controale, si conexiunile sale cu restul obiectelor din sistem sunt realizate.

- Prefetching: Atunci cand este apelata metoda prefech(), un Player se schimba din stadiul de realized in cel de prefetching. Aici Player-ul se pregateste sa prezinte media. In aceasta faza, isi incarca data media, obtine resursele exclusive

- Prefetched: Acesta este stadiul in care Playerul este gata de start

- Pornit: In acest stadiu intra cand se apeleaza metoda start(). Acum Playerul este gata sa rea data media.

Processor-ul este un tip de Player, dar spre deosebire de acesta, Processor-ulare controlul asupra procesarii din intrarea media. Pe langa redarea unei surse de date, Processor-ul poate sa scoata datele printr-o DataSource, astfel incat poate fi prezentat unui alt Player sau Processor. Pe langa cele sase stadii ale unui Player, un Processor include inca doua:



- In curs de configurare: Un Processor intra in acest stadiu din stadiul unrealized, atunci cand este apelata metoda configure(). Se iese din acest stadiu atunci cand se conecteaza la sursa de date, demultiplexeaza streamul de intrare si acceseaza informatia despre formatul datelor de intrare

- Configurat: Din stadiul de configurare, un Processor se schimba in stadiul de configured cand se conecteaza la sursa de date si formatul acesteia este determinat.

Un obiect Format reprezinta formatul exact al unui obiect media. Formatul nu poarta parametrii encoding specifici sau informatie global-timing; el descrie numele encoding al formatului si tipul de date necesar pentru format. Subclasele Format contin AudioFormat si VideoFormat.

Un Manager este un obiect intermediar care integreaza implementarile interfetelor care pot fi folosite. De exemplu, folosind Manager se poate crea un Player dintr-o DataSource. JMF ofera patru tipuri:

- Manager: Se foloseste pentru a crea Player, Precessor, DataSource.

- PackageManager: Acesta mentine un registru de package-uri ce contin clase JMF, cum ar fi custom Players, Processors, DataSources

- CaptureDeviceManager: Acesta mentine un registru cu dispozitivele de captura

- PlugInManager: Acest manager mentine un registru cu plug-in-urile JMF pentru componentele procesate

Cu JMF, una dintre cele mai importante probleme este crearea unui Player. Crearea acestuia se face apeland metoda createPlayer() a clasei Manager. Managerul foloseste URL-ul de la media sau MediaLocator specificat pentru a crea un Player corespunzator. Dupa obtinera acestuia, se pot obtine componentele vizuale, folosite pentru reprezentarea vizuala a informatiei media. Pentru a afisa componentele vizuale ale unui Player sunt necesari doi pasi:

- Obtinerea unei componente vizuale apeland metoda getVisualComponent()

- Adaugarea componentei vizuale la aplicatie

Un Player poate include si un panou de control cu butoane de start, stop si pause. Multe dintre metodele Player-ului pot fi apelate dupa ce acesta este in stadiul de realizat.Aceste metode ofera modalitati usoare de creare si realizare a unui Player intr-un singur pas. Atunci cand sunt apelate, se blocheaza pana cand Playerul este realizat. Urmatorul pas este apelarea metodei start(). Aceasta incearca sa schimbe starea Playerului in stadiul de started.

Captura datelor media este o alta problema importanta. Pentru a realiza o captura media sunt necesari pasii urmatori:

1.
Localizarea dispozitivului de capturare folosit interogand CaptureDeviceManager

2.
Obtinerea unui obiect CaptureDeviceInfo

3.
Se obtine un MediaLocator din obiectul CaptureDeviceInfo si se foloseste pentru a creao DataSource

4.
Crearea unui Player sau a unui Processor folosind DataSource

5.
Pornirea Player-ului sau a Processor-ului pentru a incepe procesul de capturara

Se foloseste CaptureDeviceManger pentru accesarea dispozitivului de captura disponibil. Acest manager functioneaza ca un registru general al dispozitivelor disponibile pentru JMf. Se poate obtine lista dispozitivelor disponibile apeland metoda getDeviceList(). Un dispozitiv decaptura este reprezentat de un obiect CaptureDeviceInfo. Se foloseste metoda getDevice() a clasei CaptureDeviceManager pentru a obtine CaptureDeviceInfo pentru un anumit dispozitiv. Pentru a folosi dispozitivul, trebuie obtinut MediaLocator de la obiectul CaptureDeviceInfo. Se poate folosi acest MediaLocator pentru a construi un Player sau un Processor direct, sau se poate folosi MediaLocator pentru a construi o DataSource care poate fi folosita ca intrare pentru un Player sau Processor. Pentru a porni captura se foloseste metoda start() a Player-uilui sau Processor-ului.

Folosind JMF se poate transmite sau receptiona in direct transmisiuni radio sau TV, conferinte realtime pe Internet sau intranet. O caracteristica a transportului media realtime care difera fata de accesarea unei ate statice este faptul ca un protocol realtime nu garanteaza venirea tuturor pachetelor in siguranta. O problema importanta este modul in care se recupereaza datele pierdute si se asigura intarzieri mici in receptia datelor.

In lucrul cu stream-uri media realtime se realizeaza transmisia fara sa se astepte tot stream-ul. De asemenea, transmisia realtime pe Internet necesita o latime debanda mare pentru ca datele primite sa fie continue. Traficul realtime necesita propriul protocol de transfer al pachetelor media, RTP Real-Time Transport Protocol. Nu exista garantia ca pachetele cu date RTP vor ajunge in ordinea in care au fost trimise, sau ca vor ajunge. Receptorul trebuie sa reconstruiasca secventa si sa detecteze pachetele pierdute folosind informatiile din header-ul pachetului.