Procesarea datelor dependente de timp
Un Processor poate fi folosit ca si un Player programat care permite utilizatorului sa controleze procesele de decodare si afisare. Un Processor poate fi folosit si ca un Processor de captura, permitând utilizatorului sa controleze procesele de codare si multiplexare a datelor capturate.
Controlul asupra actiunilor efectuate de un Processor se poate face în mai multe moduri:
se foloseste un ProcessorModel pentru a construi u 747c27h n Processor la care se cunosc atât intrarea cât si iesirea;
se foloseste metoda TrackControl setFormat pentru a specifica ce conversii de format sunt efectuate asupra pistelor individuale;
se foloseste metoda setOutputDescriptor pentru a specifica formatul datelor multiplexate la iesirea din Processor;
se foloseste metoda TrackControl setCodecChain pentru selectia codec-urilor sau a efectelor folosite de Processor;
se foloseste metoda TrackControl setRenderer pentru a selecta plug-in-ul Renderer folosit de Processor.
8.5.1. Configurarea unui Processor
În afara fazelor Realizing si Prefetching prin care orice Processor trece când se pregateste de pornire, un Processor trece si prin faza de configurare, numita Configuring. Metoda configure este apelata pentru a trece un Processor din starea Unrealized în starea Configuring.
În timpul în care se afla în starea Configuring, un Processor culege informatia de care are nevoie pentru a construi obiecte TrackControl pentru fiecare pista. Când termina, trece în starea Configured si genereaza un eveniment ConfigureCompleteEvent. Odata ce un Processor este Configured, se pot seta formatul datelor la iesire si optiunile pentru TrackControl. Când se termina setarea acestor optiuni, se apeleaza metoda realize pentru a trece Processor-ul în starea Realizing.
Odata ce un Processor este în starea Realized, modificarile viitoare de modificare a optiunilor de procesare nu sunt garantate ca vor functiona. În majoritatea cazurilor, se va primi o exceptie FormatChangeException.
8.5.2. Selectarea optiunilor de procesare a pistelor
Pentru a selecta ce plug-in-uri sunt folosite la procesarea fiecarei piste din stream-ul de date, trebuie:
apelata metoda PlugInManager.getPlugInList pentru a determina ce plug-in-uri sunt disponibile. PlugInManager returneaza o lista cu plug-in-urile care corespund formatelor de intrare si iesire folosite;
apelata metoda getTrackControls asupra Processor-ului pentru a obtine un TrackControl pentru fiecare pista din stream-ul de date. Processor-ul trebuie sa fie în starea Configured înainte de realizarea apelului;
apelata una din metodele TrackControl setCodecChain sau setRenderer pentru a specifica plug-in-urile pe care dorim sa le folosim pentru fiecare pista.
Când se foloseste setCodecChain pentru specificarea codec-ului si a plug-in-urilor de efect pentru un Processor, ordinea în care plug-in-urile apar în lantul de procesare este determinata de formatul datelor de intrare si de iesire pe care fiecare plug-in îl suporta.
Pentru a controla codarea efectuata asupra unei piste de catre un anumit Codec, se pot folosi controalele pentru codec asociate acelei piste. Pentru a obtine aceste controale, trebuie apelata metoda TrackControl getControls. Aceasta returneaza toate controalele asociate cu aceasi pista, inclusiv controalele de codec-uri cum sunt: H263 Control, QualityControl si MPEGAudioControl.
8.5.3. Conversia datelor dintr-un format în altul
Se poate selecta formatul unei anumite piste prin apelarea unei metode TrackControl pentru acea pista:
trebuie apelata metoda getTrackControls asupra Processor-ului pentru a obtine un TrackControl pentru fiecare pista din stream-ul de date. Processor-ul trebuie sa fie în starea Configured înainte de apelarea metodei;
trebuie folosita metoda TrackControl setFormat pentru a specifica formatul în care se doreste conversia pistei selectate.
8.5.4. Specificarea formatului datelor de iesire
Se poate folosi metoda setContentDescriptor pentru a specifica formatul datelor la iesirea din Processor. Pentru a obtine lista cu formatele de date suportate trebuie apelata metoda getSupportedContentDescriptors.
Mai exista o metoda de specificare a formatului de iesire prin folosirea metodei ProcessorModel la crearea Processor-ului.
Specificarea unui formate a datelor de iesire selecteaza automat optiunile de procesare implicite pentru acest format, suprascriindu-le peste optiunile selectate cu TrackControls. Setarea formatului datelor la valoarea null cauzeaza operatia de trimitere înapoi a datelor.
8.5.5. Specificarea destinatiei datelor
Este posibila specificarea destinatiei datelor prin selectarea unui anumit Renderer pentru o pista prin intermediul TrackControl. O alta metoda este folosirea iesirii unui Processor ca intrare într-o anumita DataSink. Iesirea unui Processor poate fi folosita si ca intrare pentru un alt Player sau Processor care are o alta destinatie.
8.5.6. Selectarea dispozitivului de transmisie
Pentru a selecta dispozitivul de transmisie dorit, trebuie:
apelata metoda getTrackControls asupra Processor-ului pentru a obtine un TrackControl pentru fiecare pista din stream-ul de date. Processor-ul trebui sa fie în starea Configured înainte de apelarea metodei;
apelata metoda TrackControl setRenderer pentru a specifica plug-in-ul
8.5.7. Salvarea detelor într-un fisier
Pentru a salva datele într-un fisier trebuie folosit un DataSink pentru a citi datele de la iesirea Processor-ului. Trebuie urmati urmatorii pasi:
obtinuta DataSource-ul de iesire de la Processor prin apelarea metodei getDataOutput;
trebuie construita o procedura de scriere în fisier prin apelarea metodei Manager.createDataSink
trebuie apelata metoda open asupra DataSink-ului pentru a deschide fisierul;
trebuie apelata metoda start asupra DataSink-ului pentru a începe scrierea datelor.
Formatul datelor scrise în fisierul specificat este controlat de catre Processor. Implicit acesta trimite spre iesire date neprelucrate. Pentru a schimba tipul continutului pentru DataSource, trebuie folosita metoda setContentDescriptor, lucru demonstrat în Exemplul 8.8.
Exemplul 8.8. Schimbarea tipului continutului unei DataSource |
DataSink sink; MediaLocator dest = new MediaLocator(file://exemplul8.wav); try catch (Exception) |
Un Processor permite utilizatorului sa controleze un numar de biti pe care îl poate scrie la destinatie. Aceasta se realizeaza prin metoda StreamWriterControl. Pentru a afla daca un stream suporta aceasta operatie trebuie apelata metoda sub forma:
getControl("javax.media.datasink.StreamWriterControl")
asupra Processor-ului.
8.5.8. Conectarea unui Processor la un alt Player
Datele de la iesirea unui Processor pot fi folosite ca date de intrare la alt Player. Pentru a obtine datele de la iesirea unui Processor trebuie apelata metoda getDataOutput, care returneaza un obiect de tipul DataSource. Acest obiect poate fi folosit la construirea unui Player sau a unui Processor prin intermediul unui Manager
|