CONTENTS | PREV | NEXT | INDEX JMF 2.0 API Guide



F

RTPUtil

RTPUtil demonstrates how to create separate RTP players for each stream in a session so that you can play the streams. To do this, you need to listen for NewRecvStreamEvents and retrieve the DataSource from each new stream. (See Creating an RTP Player for Each New Receive Stream for more information about this example.)

Example F-1: RTPUtil (1 of 5)
 import javax.media.rtp.*;
 import javax.media.rtp.rtcp.*;
 import javax.media.rtp.event.*;
 import javax.media.*;
 import javax.media.protocol.*;
 import java.net.InetAddress;
 import javax.media.format.AudioFormat;
 // for PlayerWindow
 import java.awt.*;
 import com.sun.media.ui.*;
 
 import java.util.Vector;
 
 public class RTPUtil implements ReceiveStreamListener, 
                                 ControllerListener
 {
     
     Vector playerlist = new Vector();
     SessionManager mgr = null;
     boolean terminatedbyClose = false;
     
     public SessionManager createManager(String address,
                                         String sport,
                                         String sttl,
                                         boolean listener,
                                         boolean sendlistener)
     {
         return createManager(address,
                              new Integer(sport).intValue(),
                              new Integer(sttl).intValue(),
                              listener,
                              sendlistener);
     }
     public SessionManager createManager(String address,
                                         int port,
                                         int ttl,
                                         boolean listener,
                                         boolean sendlistener)
     {
         mgr = (SessionManager)new com.sun.media.rtp.RTPSessionMgr();
         
         if (mgr == null) return null;
 
         mgr.addFormat(new AudioFormat(AudioFormat.DVI_RTP,
                                       44100,
                                       4,
                                       1),
                       18);
         if (listener) mgr.addReceiveStreamListener(this);
         if (sendlistener) new RTPSendStreamWindow(mgr);
         
         // ask RTPSM to generate the local participants CNAME
         String cname = mgr.generateCNAME();
         String username = null;
 
         try {
             username = System.getProperty("user.name");
         } catch (SecurityException e){
             username = "jmf-user";
         }
         
         // create our local Session Address
         SessionAddress localaddr = new SessionAddress();
         
         try{
             InetAddress destaddr = InetAddress.getByName(address);
 
             SessionAddress sessaddr = new SessionAddress(destaddr,
                                                          port,
                                                          destaddr,
                                                          port + 1);
             
             SourceDescription[] userdesclist= new SourceDescription[]
             {
                 new SourceDescription(SourceDescription
                                       .SOURCE_DESC_EMAIL,
                                       "jmf-user@sun.com",
                                       1,
                                       false),
                 new SourceDescription(SourceDescription
                                       .SOURCE_DESC_CNAME,
                                       cname,
                                       1,
                                       false),
 
                 new SourceDescription(SourceDescription
                                       .SOURCE_DESC_TOOL,
                                       "JMF RTP Player v2.0",
                                       1,
                                       false)
             };
 
             mgr.initSession(localaddr,
                             userdesclist,
                             0.05,
                             0.25);
             
             mgr.startSession(sessaddr,ttl,null);
         } catch (Exception e) {
             System.err.println(e.getMessage());
             return null;
         }
         
         return mgr;
     }
     public void update( ReceiveStreamEvent event)
     {
         Player newplayer = null;
         RTPPlayerWindow playerWindow = null;
 
         // find the sourceRTPSM for this event
         SessionManager source = (SessionManager)event.getSource();
 
         // create a new player if a new recvstream is detected
         if (event instanceof NewReceiveStreamEvent)
         {
             String cname = "Java Media Player";
             ReceiveStream stream = null;
             
             try
             {
                 // get a handle over the ReceiveStream
                 stream =((NewReceiveStreamEvent)event)
                         .getReceiveStream();
 
                 Participant part = stream.getParticipant();
 
                 if (part != null) cname = part.getCNAME();
 
                 // get a handle over the ReceiveStream datasource
                 DataSource dsource = stream.getDataSource();
                 // create a player by passing datasource to the 
                 // Media Manager
                 newplayer = Manager.createPlayer(dsource);
                 System.out.println("created player " + newplayer);
             } catch (Exception e) {
                 System.err.println("NewReceiveStreamEvent exception " 
                                    + e.getMessage());
                 return;
             }
 
             if (newplayer == null) return;
 
             playerlist.addElement(newplayer);
             newplayer.addControllerListener(this);
            
             // send this player to player GUI
             playerWindow = new RTPPlayerWindow( newplayer, cname);
         }
     }
     public void controllerUpdate( ControllerEvent evt)
     {
         // get a handle over controller, remove it from the player
         // list.
         // if player list is empty, close the sesssion manager.
         
         if ((evt instanceof ControllerClosedEvent) ||
             (evt instanceof ControllerErrorEvent) ||
             (evt instanceof DeallocateEvent)){
             Player p = (Player)evt.getSourceController();
 
             if (!terminatedbyClose){
                 if (playerlist.contains(p))
                     playerlist.removeElement(p);
                 if ((playerlist.size() == 0) && (mgr != null))
                     mgr.closeSession("All players are closed");
             }
         }
     }
     
     public void closeManager()
     {
         terminatedbyClose = true;
     
         // first close all the players
         for (int i = 0; i < playerlist.size(); i++) {
             ((Player)playerlist.elementAt(i)).close();
         }
         if (mgr != null) {
             mgr.closeSession("RTP Session Terminated");
             mgr = null;
         }
     }
     class RTPPlayerWindow extends PlayerWindow 
     {
         public RTPPlayerWindow( Player player, String title) 
         {
             super(player);
             setTitle(title);
         }
         public void Name(String title){
             setTitle(title);
         }
     }
 }



CONTENTS | PREV | NEXT | INDEX

Copyright © 1998-1999 Sun Microsystems, Inc. All Rights Reserved.