Importul si exportul stream-urilor RTP
Multe aplicatii trebuie sa permita scrierea si citirea stream-urilor RTP. Spre exemplu, aplicatiile de conferinta trebuie sa poata înregistra conferi 818j97i nta si sa o poata rula mai târziu. Sau, aplicatiile de telefonie trebuie sa poata transmite stream-uri audio stocate ca mesaje de întâmpinare.
Stream-urile RTP receptionate prin retea pot fi salvate într-un fisier folosind un DataSink RTP. Similar, se pot citi fisiere salvate, dupa care pot fi prezentate local sau pot fi transmise în retea.
8.10.1. Citirea stream-urilor RTP dintr-un fisier
Pentru a citi date dintr-un fisier si a le prezenta sau a le transmite, trebuie folosit un MediaLocator pentru a construi direct un Processor. Tipul fisierelor care pot fi folosite la transmisia RTP depinde de plug-in-urile de codare care sunt disponibile pentru a coda si împacheta datele într-un format specific RTP.
Exemplul 8.23 Citirea stream-urilor RTP dintr-un fisier |
// creeaza un Processor pentru fisierul selectat // daca nu poate fi creat - exit try catch (IOException e) catch (NoProcessorException e) // configureaza processorul processor.configure(); // il blocheaza pana ajunge configured TrackControl track[] = processor.getTrackControls(); boolean encodingOk = false; // parcurge pistele si incearca sa programeze una dintre ele // sa prelucreze date format ulaw for (int i = 0; i < track.length; i++) else } else } // processor-ul trece in starea realize if (encodingOk) catch (NotRealizedError e) // transmite datasource-ul spre manager pentru a creea // un datasink RTP // datasink RTP va transmite audio multicast try catch (Exception e) } |
8.10.2. Exportul stream-urilor RTP
Stream-urile RTP receptionate din retea pot fi stocate sau pot fi prezentate. Pentru a scrie datele într-un fisier, trebuie obtinut DataSource-ul din ReceiveStream. Acesta trebuie folosit la scrierea unui fisier cu un DataSink, prin intermediul Manager-ului.
Daca se doreste decodarea datelor înainte de stocare, trebuie folosit DataSource-ul obtinut din ReceiveStream pentru a construi un Processor. Apoi:
stream-ul este obtinut din NewReceiveStreamEvent;
DataSource-ul este obtinut din ReceiveStream;
DataSource-ul este trecut pasat Manager.createDataSink împreuna cu un MediaLocator care identifica fisierul în care se doreste stocarea datelor.
Urmatorul exemplu arata cum se executa aceste operatii asupra unei singure piste. Pentru a scrie un fisier care contine atât date audio cât si video, trebuie obtinute stream-urile audio si video de la manageri de sesiune diferiti si creata o DataSource care sa le combine. Apoi, DataSource-ul obtinut este transmisa la Manager.createDataSink.
Exemplul 8.24 Scrierea unui stream RTP într-un fisier |
public void update(ReceiveStreamEvent event) catch (Exception e) } } |
În Capitolul 10 este prezentata o aplicatie care implementeaza un sistem de supraveghere. Pentru partea de captura video s-au folosit o serie de elemente din JMF.
|