Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Captura datelor in Java Media Framework

java


Captura datelor īn Java Media Framework

Īncepānd cu versiunea 2.0, JMF ofera programatorilor posibilitatea de a achizitiona date de la un dispozitiv de captura, cum ar fi un microfon sau o camera video. Aceasta operatie poarta numele de capturare. Datele capturate pot fi capturate si afisate sau pot fi stocate pentru o utilizare ulterioara.



Pentru a captura date trebuie:

     525j94f ;     525j94f ;    localizat dispozitivul de captura prin interogarea CaptureDeviceManager;

     525j94f ;     525j94f ;    creat un obiect CaptureDeviceInfo pentru acel dispozitiv

     525j94f ;     525j94f ;    creat un MediaLocator pentru obiectul CaptureDeviceInfo si folosit la crearea unei DataSource;

     525j94f ;     525j94f ;    creat un Player sau Processor folosind acest DataSource;

     525j94f ;     525j94f ;    pornit Player-ul sau Processor-ul pentru a īncepe procesul de captura

Cānd se foloseste o DataSource cu un Player, datele capturate pot fi doar afisate. Pentru a procesa si stoca datele trebuie folosita o DataSource īn combinatie cu un Processor

8.6.1. Accesarea dispozitivelor de captura

Dispozitivele de captura sunt accesibile prin intermediul CaptureDeviceManager. Acesta este registrul central pentru toate dispozitivele de captura disponibile īn JMF. Pentru a obtine o lista cu dispozitivele de captura disponibile trebuie apelata metoda CaptureDeviceManager.getDeviceList.

Fiecare dispozitiv de captura este reprezentat ca un obiect CaptureDeviceInfo. Pentru a obtine acest obiect pentru un anumit dispozitiv trebuie apelata metoda CaptureDeviceManager.getDevice astfel:

Exemplul 8.9. Obtinerea informatiei despre dispozitivul de captura

CaptureDeviceInfo deviceInfo =
CaptureDeviceManager.getDevice("devName");

8.6.2. Captura efectiva a datelor

Pentru a captura date de la un anumit dispozitiv de captura, trebuie obtinut MediaLocator din obiectul CaptureDeviceInfo al acelui dispozitiv. Exista posibilitatea de a folosi acest MediaLocator pentru a construi un Player sau Processor direct sau de a-l folosi pentru a construi o DataSource care sa fie folosita ca intrare īntr-un Player sau Processor. Pentru a initia procesul de captura trebuie pornit Player-ul sau Processor-ul.

8.6.3. Controlul utilizatorului asupra procesului de captura

Īn general un dispozitiv de captura are implementat un set de atribute specifice care pot fi folosite pentru a controla acel dispozitiv. Pentru a permite controlul utilizatorului asupra acestor setari, īn JMF se folosesc doua tipuri de control: PortControl si MonitorControl. Accesarea acestor controale se realizeaza prin apelarea metodei getControl asupra DataSource-ului avānd ca parametru atributul care dorim sa īl modificam.

Un PortControl ofera posibilitatea selectarii portului de unde datele vor fi capturate.

Un MonitorControl ofera posibilitatea monitorizarii procesului de captura

Ca si alte obiecte de tip Control, daca exita o componenta vizuala care corespunde lui PortControl sau MonitorControl, aceasta poate fi obtinuta prin apelarea getControlComponent. Adaugarea acestei componente ferestrei applet-ului sau ferestrei aplicatiei ofera utilizatorului posibilitatea controlului capturii.

Este posibila afisarea panoului standard de control si a componentelor vizuale asociate cu un Player sau cu un Processor. Exemplul 8.10 ilustreaza cum se realizeaza afisarea componentelor GUI (Graphic User Interface) pentru un Processor.

Exemplul 8.10. Afisarea componentelor GUI pentru un Processor

Component controlPanel, visualComponent;

if ((controlPanel = p.getControlPanelComponent()) != null)

add(controlPanel);

if ((visualComponent=p.getVisualComponent())!=null)   

add(visualComponent);

8.6.4. Stocarea datelor capturate

Pentru a salva datele capturate īntr-un fisier trebuie folosit un Processor īn locul unui Player. Se foloseste un DataSink pentru citirea datelor la iesirea din Processor si pentru a le salva īntr-un fisier. Pasii ce trebuie urmati sunt:

     525j94f ;     525j94f ;    se citesc datele de la iesirea Processor-ului prin apelarea getDataOutput;

     525j94f ;     525j94f ;    se construieste un DataSink pentru scrierea īn fisier prin apelarea Manager.createDataSink. Parametrii sunt DataSource-ul de iesire si un MediaLocator care specifica locatia fisierului īn care se doreste salvarea;

     525j94f ;     525j94f ;    se apeleaza metoda open asupra DataSink-ului pentru a deschide fisierul;

     525j94f ;     525j94f ;    se apeleaza metoda start asupra DataSink-ului;

     525j94f ;     525j94f ;    se apeleaza metoda start asupra Processor-ului pentru a īncepe captura datelor;

     525j94f ;     525j94f ;    se asteapta pentru un eveniment EndOfMediaEvent, un anumit timp sau interventia utilizatorului;

     525j94f ;     525j94f ;    se apeleaza metoda stop asupra Processor-ului pentru a termina captura datelor;

     525j94f ;     525j94f ;    se apeleaza metoda close asupra Processor-ului;

     525j94f ;     525j94f ;    cānd Processor-ul este oprit si DataSink-ul posteaza un eveniment EndOfStreamEvent trebuie apelata metoda close asupra DataSink-ului.

Exemplul 8.11 arata cum se realizeaza toate aceste operatii necesare pentru salvarea datelor capturate īntr-un fisier

Exemplul 8.11. Salvarea datelor capturate īntr-un fisier

DataSink sink;

MediaLocator dest = new MediaLocator("file://exemplul10.avi");

try catch (Exception)

8.6.5. Exemplu de captura si salvare a datelor audio si video

Īn cele ce urmeaza voi prezenta un exemplu īn care un ProcessorModel pentru a crea un Processor pentru a captura date audio si video, pentru a coda datele IMA4 (pentru audio) si Cinepak (pentru video), pentru a intercala pistele si pentru a salva pista rezultata īn urma intercalarii īntr-un fisier QuickTime.

Cānd se construieste un ProcessorModel prin specificarea formatului pistelor si a continutului iesirii iar apoi se foloseste acel model la construirea unui Player, Processor-ul este conectat automat la dispozitivul de captura care īndeplineste necesitatile formatului (daca exista unul).

Exemplul 8.12. Captura si salvarea datelor audio si video

formats[0] = new AudioFormat(AudioFormat.IMA4);

formats[1] = new VideoFormat(VideoFormat.CINEPAK);

FileTypeDescriptor outputType = new

FileTypeDescriptor(FileTypeDescriptor.QUICKTIME);

Processor p = null;

try catch (IOException e) catch (NoProcessorException e) catch (CannotRealizeException e)

// citeste de la iesirea Processor-ului

DataSource source = p.getDataOutput();

// creaza un MediaLocator cu locatia fisierului unde se doreste salvarea bitilor

MediaLocator dest = new MediaLocator("file://test.mov");

//creaza un DataSink care sa realizeze deschiderea fisierului

DataSink filewriter = null;

try catch (NoDataSinkException e) catch (IOException e) catch (SecurityException e)

// porneste FileWriter si Processor-ul

try catch (IOException e)

p.start

//opreste si inchide Processor-ul cand se termina captura

// inchide DataSink-ul cand apare evenimentul EndOfStream



Document Info


Accesari: 1129
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )