📄 jmfapp-rtputil.html
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="Quadralay WebWorks Publisher 5.0.2">
<meta name="TEMPLATEBASE" content="Portable HTML">
<meta name="LASTUPDATED" content="11/23/99 11:48:17">
<title>RTPUtil </title>
</head>
<body link="#3366CC" vlink="#9999CC" text="#000000" alink="#0000CC" bgcolor="#FFFFFF"
background="images/backgrnd.gif">
<table width="100%" border="0" align="left" cellpadding="0" cellspacing="0">
<tr>
<td><a href="JMFTOC.html">CONTENTS</a> |
<a href="JMFApp-Controller.html">PREV </a> |
<a href="JMFGlossary.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<td align="right"><em>JMF 2.0 API Guide</em>
</tr>
</table>
<p><br clear="all">
</p>
<hr align="left">
<blockquote>
<div align="right">
<a name="90170"> </a><font size="3" face="Palatino, Times New Roman, Times, serif">F <br></font>
</div>
<div align="right">
<h2>
<a name="90599"> </a><font color="#003366" face="Palatino, Times New Roman, Times, serif">RTPUtil</font>
</h2>
</div>
<p>
<a name="91395"> </a><font face="Palatino, Times New Roman, Times, serif"><code>RTPUtil</code> 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 <code>NewRecvStreamEvents</code> and retrieve the <code>DataSource</code> from each new stream. (See <a href="RTPPresenting.html#107661">Creating an RTP Player for Each New Receive Stream</a> for more information about this example.)</font>
</p>
<a name="46909"> </a><font size="1" face="Palatino, Times New Roman, Times, serif"><strong>
<table border="1" bordercolorlight="#FFFFFF" bordercolordark="#000000"
cellpadding="5" cellspacing="0">
<caption><b><i><font face="Palatino, Times New Roman, Times, serif"><a name="91401"> </a>Example F-1: RTPUtil (1 of 5)</font></i></b></caption>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="91664"> </a><code>import javax.media.rtp.*;
</code><a name="91665"> </a><code>import javax.media.rtp.rtcp.*;
</code><a name="91666"> </a><code>import javax.media.rtp.event.*;
</code><a name="91667"> </a><code>import javax.media.*;
</code><a name="91668"> </a><code>import javax.media.protocol.*;
</code><a name="91669"> </a><code>import java.net.InetAddress;
</code><a name="91670"> </a><code>import javax.media.format.AudioFormat;
</code><a name="91671"> </a><code>// for PlayerWindow
</code><a name="91672"> </a><code>import java.awt.*;
</code><a name="91673"> </a><code>import com.sun.media.ui.*;
</code><a name="91674"> </a>
<a name="91675"> </a><code>import java.util.Vector;
</code><a name="91676"> </a>
<a name="91677"> </a><code>public class RTPUtil implements ReceiveStreamListener,
</code><a name="91678"> </a><code> ControllerListener
</code><a name="91679"> </a><code>{
</code><a name="91680"> </a><code>
</code><a name="91681"> </a><code> Vector playerlist = new Vector();
</code><a name="91682"> </a><code> SessionManager mgr = null;
</code><a name="91683"> </a><code> boolean terminatedbyClose = false;
</code><a name="91704"> </a><code>
</code><a name="91705"> </a><code> public SessionManager createManager(String address,
</code><a name="91706"> </a><code> String sport,
</code><a name="91707"> </a><code> String sttl,
</code><a name="91708"> </a><code> boolean listener,
</code><a name="91709"> </a><code> boolean sendlistener)
</code><a name="91710"> </a><code> {
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="91465"> </a><code> return createManager(address,
</code><a name="91466"> </a><code> new Integer(sport).intValue(),
</code><a name="91467"> </a><code> new Integer(sttl).intValue(),
</code><a name="91468"> </a><code> listener,
</code><a name="91469"> </a><code> sendlistener);
</code><a name="91470"> </a><code> }
</code><a name="91471"> </a><code> public SessionManager createManager(String address,
</code><a name="91472"> </a><code> int port,
</code><a name="91473"> </a><code> int ttl,
</code><a name="91474"> </a><code> boolean listener,
</code><a name="91475"> </a><code> boolean sendlistener)
</code><a name="91476"> </a><code> {
</code><a name="91477"> </a><code> mgr = (SessionManager)new com.sun.media.rtp.RTPSessionMgr();
</code><a name="91478"> </a><code>
</code><a name="91479"> </a><code> if (mgr == null) return null;
</code><a name="91480"> </a>
<a name="91481"> </a><code> mgr.addFormat(new AudioFormat(AudioFormat.DVI_RTP,
</code><a name="91482"> </a><code> 44100,
</code><a name="91483"> </a><code> 4,
</code><a name="91484"> </a><code> 1),
</code><a name="91485"> </a><code> 18);
</code><a name="91755"> </a><code> if (listener) mgr.addReceiveStreamListener(this);
</code><a name="91756"> </a><code> if (sendlistener) new RTPSendStreamWindow(mgr);
</code><a name="91757"> </a><code>
</code><a name="91758"> </a><code> // ask RTPSM to generate the local participants CNAME
</code><a name="91759"> </a><code> String cname = mgr.generateCNAME();
</code><a name="91760"> </a><code> String username = null;
</code><a name="91761"> </a>
<a name="91762"> </a><code> try {
</code><a name="91763"> </a><code> username = System.getProperty("user.name");
</code><a name="91764"> </a><code> } catch (SecurityException e){
</code><a name="91765"> </a><code> username = "jmf-user";
</code><a name="91766"> </a><code> }
</code><a name="91767"> </a><code>
</code><a name="91768"> </a><code> // create our local Session Address
</code><a name="91769"> </a><code> SessionAddress localaddr = new SessionAddress();
</code><a name="91770"> </a><code>
</code><a name="91771"> </a><code> try{
</code><a name="91772"> </a><code> InetAddress destaddr = InetAddress.getByName(address);
</code><a name="91773"> </a>
<a name="91774"> </a><code> SessionAddress sessaddr = new SessionAddress(destaddr,
</code><a name="91775"> </a><code> port,
</code><a name="91776"> </a><code> destaddr,
</code><a name="91777"> </a><code> port + 1);
</code><a name="91778"> </a><code>
</code><a name="91779"> </a><code> SourceDescription[] userdesclist= new SourceDescription[]
</code><a name="91780"> </a><code> {
</code><a name="91781"> </a><code> new SourceDescription(SourceDescription
</code><a name="91782"> </a><code> .SOURCE_DESC_EMAIL,
</code><a name="91783"> </a><code> "jmf-user@sun.com",
</code><a name="91784"> </a><code> 1,
</code><a name="91785"> </a><code> false),
</code></pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="91519"> </a><code> new SourceDescription(SourceDescription
</code><a name="91520"> </a><code> .SOURCE_DESC_CNAME,
</code><a name="91521"> </a><code> cname,
</code><a name="91522"> </a><code> 1,
</code><a name="91523"> </a><code> false),
</code><a name="91524"> </a>
<a name="91525"> </a><code> new SourceDescription(SourceDescription
</code><a name="91526"> </a><code> .SOURCE_DESC_TOOL,
</code><a name="91527"> </a><code> "JMF RTP Player v2.0",
</code><a name="91528"> </a><code> 1,
</code><a name="91529"> </a><code> false)
</code><a name="91530"> </a><code> };
</code><a name="91531"> </a>
<a name="91532"> </a><code> mgr.initSession(localaddr,
</code><a name="91533"> </a><code> userdesclist,
</code><a name="91534"> </a><code> 0.05,
</code><a name="91535"> </a><code> 0.25);
</code><a name="91536"> </a><code>
</code><a name="91537"> </a><code> mgr.startSession(sessaddr,ttl,null);
</code><a name="91796"> </a><code> } catch (Exception e) {
</code><a name="91797"> </a><code> System.err.println(e.getMessage());
</code><a name="91798"> </a><code> return null;
</code><a name="91799"> </a><code> }
</code><a name="91800"> </a><code>
</code><a name="91801"> </a><code> return mgr;
</code><a name="91802"> </a><code> }
</code><a name="91803"> </a> public void update( ReceiveStreamEvent event)
<a name="91804"> </a> {
<a name="91805"> </a> Player newplayer = null;
<a name="91806"> </a> RTPPlayerWindow playerWindow = null;
<a name="91807"> </a>
<a name="91808"> </a> // find the sourceRTPSM for this event
<a name="91809"> </a> SessionManager source = (SessionManager)event.getSource();
<a name="91810"> </a>
<a name="91811"> </a> // create a new player if a new recvstream is detected
<a name="91812"> </a> if (event instanceof NewReceiveStreamEvent)
<a name="91813"> </a> {
<a name="91814"> </a> String cname = "Java Media Player";
<a name="91815"> </a> ReceiveStream stream = null;
<a name="91816"> </a>
<a name="91817"> </a> try
<a name="91818"> </a> {
<a name="91819"> </a> // get a handle over the ReceiveStream
<a name="91820"> </a> stream =((NewReceiveStreamEvent)event)
<a name="91821"> </a> .getReceiveStream();
<a name="91827"> </a>
<a name="91828"> </a> Participant part = stream.getParticipant();
<a name="91829"> </a>
<a name="91830"> </a> if (part != null) cname = part.getCNAME();
<a name="91831"> </a>
<a name="91832"> </a> // get a handle over the ReceiveStream datasource
<a name="91833"> </a> DataSource dsource = stream.getDataSource();
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="91846"> </a> // create a player by passing datasource to the
<a name="91847"> </a> // Media Manager
<a name="91575"> </a> newplayer = Manager.createPlayer(dsource);
<a name="91576"> </a> System.out.println("created player " + newplayer);
<a name="91577"> </a> } catch (Exception e) {
<a name="91578"> </a> System.err.println("NewReceiveStreamEvent exception "
<a name="91579"> </a> + e.getMessage());
<a name="91580"> </a> return;
<a name="91581"> </a> }
<a name="91582"> </a>
<a name="91583"> </a> if (newplayer == null) return;
<a name="91584"> </a>
<a name="91585"> </a> playerlist.addElement(newplayer);
<a name="91586"> </a> newplayer.addControllerListener(this);
<a name="91587"> </a>
<a name="91588"> </a> // send this player to player GUI
<a name="91589"> </a> playerWindow = new RTPPlayerWindow( newplayer, cname);
<a name="91590"> </a> }
<a name="91591"> </a> }
<a name="91858"> </a> public void controllerUpdate( ControllerEvent evt)
<a name="91859"> </a> {
<a name="91860"> </a> // get a handle over controller, remove it from the player
<a name="91861"> </a> // list.
<a name="91862"> </a> // if player list is empty, close the sesssion manager.
<a name="91863"> </a>
<a name="91864"> </a> if ((evt instanceof ControllerClosedEvent) ||
<a name="91865"> </a> (evt instanceof ControllerErrorEvent) ||
<a name="91866"> </a> (evt instanceof DeallocateEvent)){
<a name="91867"> </a> Player p = (Player)evt.getSourceController();
<a name="91868"> </a>
<a name="91869"> </a> if (!terminatedbyClose){
<a name="91870"> </a> if (playerlist.contains(p))
<a name="91871"> </a> playerlist.removeElement(p);
<a name="91872"> </a> if ((playerlist.size() == 0) && (mgr != null))
<a name="91873"> </a> mgr.closeSession("All players are closed");
<a name="91874"> </a> }
<a name="91875"> </a> }
<a name="91876"> </a> }
<a name="91877"> </a>
<a name="91878"> </a> public void closeManager()
<a name="91879"> </a> {
<a name="91880"> </a> terminatedbyClose = true;
<a name="91881"> </a>
<a name="91882"> </a> // first close all the players
<a name="91883"> </a> for (int i = 0; i < playerlist.size(); i++) {
<a name="91884"> </a> ((Player)playerlist.elementAt(i)).close();
<a name="91885"> </a> }
<a name="91886"> </a> if (mgr != null) {
<a name="91887"> </a> mgr.closeSession("RTP Session Terminated");
<a name="91888"> </a> mgr = null;
<a name="91889"> </a> }
<a name="91890"> </a> }
</pre>
</font></td>
</tr>
<tr>
<td><font face="Palatino, Times New Roman, Times, serif"><pre>
<a name="91898"> </a> class RTPPlayerWindow extends PlayerWindow
<a name="91899"> </a> {
<a name="91629"> </a> public RTPPlayerWindow( Player player, String title)
<a name="91630"> </a> {
<a name="91631"> </a> super(player);
<a name="91632"> </a> setTitle(title);
<a name="91633"> </a> }
<a name="91634"> </a> public void Name(String title){
<a name="91635"> </a> setTitle(title);
<a name="91636"> </a> }
<a name="91637"> </a> }
<a name="91638"> </a>}
</pre>
</font></td>
</tr>
</table>
</strong><br></font>
</blockquote>
<br clear="all">
<hr>
<a href="JMFTOC.html">CONTENTS</a> |
<a href="JMFApp-Controller.html">PREV </a> |
<a href="JMFGlossary.html">NEXT</a> |
<a href="JMFIX.html">INDEX</a></td>
<br>
<hr>
<em>
<a href="copyright.html">Copyright</a> ©
1998-1999 Sun Microsystems, Inc. All Rights Reserved.
</em>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -