|
From: <car...@us...> - 2003-03-14 03:26:22
|
Update of /cvsroot/madsserv/madsserv/src/server/streaming In directory sc8-pr-cvs1:/tmp/cvs-serv2431/src/server/streaming Modified Files: Streaming.java Log Message: premiere version test Index: Streaming.java =================================================================== RCS file: /cvsroot/madsserv/madsserv/src/server/streaming/Streaming.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Streaming.java 25 Feb 2003 00:56:34 -0000 1.1 --- Streaming.java 14 Mar 2003 03:26:19 -0000 1.2 *************** *** 1,138 **** ! // La classe Streaming met en place le module Streaming RTP du projet Madsserv ! // Elle reçoit en entrée une DataSource à diffuser vers une adresse client ! // Elle utilise les RTPManager de JMF pour la diffusion ! ! ! import java.awt.*; ! import java.io.*; ! import java.util.Vector; ! import java.net.InetAddress; ! import javax.media.*; ! import javax.media.protocol.*; ! import javax.media.protocol.DataSource; ! import javax.media.format.*; ! import javax.media.control.TrackControl; ! import javax.media.control.QualityControl; ! import javax.media.rtp.*; ! import javax.media.rtp.rtcp.*; ! import com.sun.media.rtp.*; ! ! public class Streaming { ! ! // Adresse IP et port du client ! private String clientIpAddress; ! private int clientPort; ! ! // Variables de controle ! private int nbManager = 2; ! private boolean alreadyStarted = false; ! ! // Tableau des RTPManager ! private RTPManager rtpMgrs[]; ! // Tableau des vectors contenant chacun les SendStream d'un RTPManager ! private Vector [] sendStreamVectors = new Vector[nbManager]; ! // La DataSource en entrée du module de streaming RTP ! private DataSource dataInput = null; ! ! // Constructeur unique avec l'adresse IP et le port du client ! public Streaming(String _clientIpAddress,String _clientPort) { ! ! clientIpAddress = _clientIpAddress; ! Integer integer = Integer.valueOf(_clientPort); ! if (integer != null) ! clientPort = integer.intValue(); ! ! rtpMgrs = new RTPManager[nbManager]; ! SessionAddress localAddr, destAddr; ! InetAddress ipAddr; ! int port; ! ! // Initialisation des vectors de SendStreams ! for (int i = 0; i< nbManager; i++) { ! sendStreamVectors[i] = new Vector(); ! } ! ! // Creation des RTPManager (on passe les adresses locale et destination) ! for (int i = 0; i < nbManager; i++) { ! try { ! rtpMgrs[i] = RTPManager.newInstance(); ! ! port = clientPort + 2*i; ! ipAddr = InetAddress.getByName(clientIpAddress); ! ! localAddr = new SessionAddress( InetAddress.getLocalHost(), ! port); ! ! destAddr = new SessionAddress( ipAddr, port); ! ! rtpMgrs[i].initialize(localAddr); ! ! rtpMgrs[i].addTarget(destAddr); ! ! System.err.println( "Created RTP session: " + clientIpAddress + " " + port); ! } catch (Exception e) { ! System.err.println(e.getMessage()); ! } ! } ! } ! ! // Méthode publique pour modifier la DataSource en cours de diffusion ! public synchronized void setNewStreams(DataSource _dataInput) { ! ! int nbStreams, vectSize; ! ! SendStream sendStream; ! ! PushBufferDataSource ds = null; ! PushBufferStream ss[]; ! ! // Annuler la diffusion des SendStreams en cours (alreadyStarted permet de savoir si une diffusion est deja commencee) ! if (alreadyStarted) { ! for (int i = 0; i < nbManager; i++) { ! vectSize = sendStreamVectors[i].size(); ! System.err.println("Taille du vecteur sendStream " + i + " : " + vectSize); ! if (vectSize > 0) { ! for(int j = 0; j < vectSize; j++) { ! ((SendStream) sendStreamVectors[i].get(j)).close(); ! sendStreamVectors[i].remove(j); ! System.err.println("suppression du sendstream "+ i + "," + j); ! } ! } ! } ! } ! ! // Mise à jour de la DataSource à diffuser ! dataInput = _dataInput; ! ! // Identification des Streams contenus dans la DataSource ! ds = (PushBufferDataSource)dataInput; ! if (ds == null) System.err.println("source vide"); ! ss = ds.getStreams(); ! System.err.println("Nombre de streams " + ss.length); ! ! // Lancer la diffusion des nouveaux Streams ! for (int i = 0; i < ss.length; i++) { ! try { ! sendStream = rtpMgrs[i].createSendStream(dataInput, i); ! sendStreamVectors[i].add(sendStream); ! sendStream.start(); ! alreadyStarted = true; ! } catch (Exception e) { ! System.err.println("message erreur sendstreams " + e.getMessage()); ! } ! } ! } ! ! // Méthode permettant de stopper la diffusion et de détruire la seesion RTP ! public void stop() { ! synchronized (this) { ! for (int i = 0; i < rtpMgrs.length; i++) { ! rtpMgrs[i].removeTargets( "Session ended."); ! rtpMgrs[i].dispose(); ! } ! //endConnexion(); ! } ! } ! ! ! } --- 1,248 ---- ! // La classe Streaming met en place le module Streaming RTP du projet Madsserv ! // Elle reçoit en entrée une DataSource à diffuser vers une adresse client ! // Elle utilise les RTPManager de JMF pour la diffusion ! ! import java.awt.*; ! import java.io.*; ! import java.util.Vector; ! import java.net.InetAddress; ! import javax.media.*; ! import javax.media.protocol.*; ! import javax.media.protocol.DataSource; ! import javax.media.format.*; ! import javax.media.control.TrackControl; ! import javax.media.control.QualityControl; ! import javax.media.rtp.*; ! import javax.media.rtp.rtcp.*; ! import com.sun.media.rtp.*; ! import javax.media.rtp.event.*; ! ! public class Streaming ! implements SendStreamListener { ! ! // Adresse IP et port du client ! private String clientIPAddress; ! private int clientPort; ! private int clientID; ! ! private ServerInit serverInit; ! ! // Variables de controle ! private int nbManager = 2; ! private Boolean alreadyStarted = null; ! ! // Tableau des RTPManager ! private RTPManager rtpMgrs[]; ! // Tableau des vectors contenant chacun les SendStream d'un RTPManager ! private Vector[] sendStreamVectors = new Vector[nbManager]; ! // La DataSource en entrée du module de streaming RTP ! private DataSource dataInput = null; ! ! private Reencode reencode=null; ! private Transition transition=null; ! ! // Constructeur sans arguments ! public Streaming(int _clientID, ServerInit _serverInit) { ! serverInit = _serverInit; ! clientID = _clientID; ! clientIPAddress = ""; ! clientPort = 40000; ! alreadyStarted = Boolean.valueOf(false); ! } ! ! // Constructeur avec l'adresse IP et le port du client ! public Streaming(int _clientID, String _clientIPAddress, String _clientPort, ! ServerInit _serverInit) { ! serverInit = _serverInit; ! clientID = _clientID; ! clientIPAddress = _clientIPAddress; ! Integer integer = Integer.valueOf(_clientPort); ! if (integer != null) { ! clientPort = integer.intValue(); ! } ! } ! ! public void setReencode(Reencode _reencode) { ! reencode = _reencode; ! } ! ! public void setTransition(Transition _transition) { ! transition = _transition; ! } ! ! public void initialize() { ! rtpMgrs = new RTPManager[nbManager]; ! SessionAddress localAddr, destAddr; ! InetAddress ipAddr; ! int port; ! String cname = SourceDescription.generateCNAME(); ! SourceDescription sourceDesc; ! ! // Initialisation des vectors de SendStreams ! for (int i = 0; i < nbManager; i++) { ! sendStreamVectors[i] = new Vector(); ! } ! ! // Creation des RTPManager (on passe les adresses locale et destination) ! for (int i = 0; i < nbManager; i++) { ! try { ! rtpMgrs[i] = RTPManager.newInstance(); ! rtpMgrs[i].addSendStreamListener(this); ! ! port = clientPort + 2 * i; ! ipAddr = InetAddress.getByName(clientIPAddress); ! localAddr = new SessionAddress(InetAddress.getLocalHost(), ! port); ! destAddr = new SessionAddress(ipAddr, port); ! sourceDesc = new SourceDescription(SourceDescription ! .SOURCE_DESC_CNAME, ! cname, ! 1, ! false); ! rtpMgrs[i].initialize(localAddr /*, sourceDesc, 0.05, 0.25*/); ! rtpMgrs[i].addTarget(destAddr); ! System.err.println("Created RTP session: " + clientIPAddress + " " + ! port); ! } ! catch (Exception e) { ! System.err.println(e.getMessage()); ! } ! } ! } ! ! // Méthode publique pour modifier la DataSource en cours de diffusion ! public synchronized void setNewStreams(DataSource _dataInput) { ! ! SendStream sendStream; ! ! PushBufferDataSource ds = null; ! PushBufferStream ss[]; ! ! int nbStreams, vectSize; ! if (alreadyStarted.booleanValue()) { ! for (int i = 0; i < nbManager; i++) { ! vectSize = sendStreamVectors[i].size(); ! System.err.println("Taille du vecteur sendStream " + i + " : " + ! vectSize); ! if (vectSize > 0) { ! for (int j = 0; j < vectSize; j++) { ! ( (SendStream) sendStreamVectors[i].get(j)).close(); ! sendStreamVectors[i].remove(j); ! System.err.println("suppression du sendstream " + i + "," + j); ! } ! } ! } ! } ! ! // Mise à jour de la DataSource à diffuser ! dataInput = _dataInput; ! ! // Identification des Streams contenus dans la DataSource ! ds = (PushBufferDataSource) dataInput; ! if (ds == null) { ! System.err.println("source vide"); ! } ! ss = ds.getStreams(); ! System.err.println("Nombre de streams " + ss.length); ! ! // Lancer la diffusion des nouveaux Streams ! for (int i = 0; i < ss.length; i++) { ! try { ! sendStream = rtpMgrs[i].createSendStream(dataInput, i); ! sendStreamVectors[i].add(sendStream); ! sendStream.start(); ! alreadyStarted = Boolean.valueOf(true); ! } ! catch (Exception e) { ! System.err.println("message erreur sendstreams " + e.getMessage()); ! } ! } ! } ! ! public void setClientIP(String _clientIPAddress) { ! clientIPAddress = _clientIPAddress; ! } ! ! public void setClientPort(int _clientPort) { ! clientPort = _clientPort; ! } ! ! public boolean isInitialized() { ! return alreadyStarted.booleanValue(); ! } ! ! public void endOfMedia() { ! int nbStreams, vectSize; ! if (alreadyStarted.booleanValue()) { ! for (int i = 0; i < nbManager; i++) { ! vectSize = sendStreamVectors[i].size(); ! System.err.println("Taille du vecteur sendStream n°" + i + " : " + ! vectSize); ! if (vectSize > 0) { ! for (int j = 0; j < vectSize; j++) { ! ( (SendStream) sendStreamVectors[i].get(j)).close(); ! sendStreamVectors[i].remove(j); ! System.err.println("suppression du sendstream " + i + "," + j); ! } ! } ! } ! serverInit.endConnexion(clientID); ! //stop(); ! System.err.println("Je fais un stop sur streaming"); ! synchronized (alreadyStarted) { ! alreadyStarted = Boolean.valueOf(false); ! } ! } ! ! } ! ! // Méthode permettant de stopper la diffusion et de détruire la seesion RTP ! public void stop() { ! synchronized (this) { ! for (int i = 0; i < rtpMgrs.length; i++) { ! rtpMgrs[i].removeTargets("Session ended."); ! rtpMgrs[i].dispose(); ! rtpMgrs[i] = null; ! } ! System.err.println("J'ai supprime les rtpmanager"); ! } ! } ! ! /** ! * SendStreamListener ! */ ! public synchronized void update(SendStreamEvent evt) { ! ! int nbStreams, vectSize; ! //System.out.println("Evenement SendStream : " + evt.toString()); ! /* RTPManager mgr = (RTPManager)evt.getSource(); ! Participant participant = evt.getParticipant(); // could be null. ! ReceiveStream stream = evt.getReceiveStream(); // could be null. ! */ ! if (evt instanceof InactiveSendStreamEvent) { ! System.out.println("J'ai un evenement Inactive"); ! ! // Annuler la diffusion des SendStreams en cours (alreadyStarted permet de savoir si une diffusion est deja commencee ! if (alreadyStarted.booleanValue()) { ! for (int i = 0; i < nbManager; i++) { ! vectSize = sendStreamVectors[i].size(); ! System.err.println("Taille du vecteur sendStream " + i + " : " + ! vectSize); ! if (vectSize > 0) { ! for (int j = 0; j < vectSize; j++) { ! ( (SendStream) sendStreamVectors[i].get(j)).close(); ! sendStreamVectors[i].remove(j); ! System.err.println("suppression du sendstream " + i + "," + j); ! } ! } ! } ! } ! ! /* System.err.println(" - Received an RTP PayloadChangeEvent."); ! System.err.println("Sorry, cannot handle payload change."); ! System.exit(0);*/ ! ! } ! } ! ! } |