⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controllervideopanel.java

📁 Its video trNSMITT FILE USING JMF
💻 JAVA
字号:
/*  ControllerVideoPanel.java
 *
 *  Panel displaying video that can be played from file or from RTP 
 *  transmission.  Used by VideoViewer.
 *
 *  Copyright (C) 2002 by Frank McCown
 *  University of Arkansas at Little Rock
 *  July 2002
 */
 
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;


class ControllerVideoPanel extends JPanel implements ControllerListener, ReceiveStreamListener
{
	private Player mplayer;
	private Component visual = null;
	private Component control = null;
	private RTPManager manager = null;   // Used to manage RTP session from MediaServer
	private boolean dataReceived = false;
	private Object dataSync = new Object();
	
	
	public ControllerVideoPanel() 
	{
		setLayout(new BorderLayout());
  }


	private void createPlayer(String filename)
	{	
	  try 
	  {
	  	String rtpURL = filename; //"rtp://" + ipAddress + ":" + port + "/video";
	  	
System.out.println("Video to play: " +rtpURL);
			mplayer = Manager.createPlayer(new MediaLocator(rtpURL));
			mplayer.addControllerListener((ControllerListener) this);
			mplayer.realize();
	  } 
	  catch (NoPlayerException e) 
	  {
			e.printStackTrace();
	  }
	  catch (IOException e)
	  {
	  	e.printStackTrace();
		}
	
	}
	
	private void removePreviousManager()
	{
		if (manager != null)
		{
			System.out.println("Disposing RTPManager.");
			manager.dispose();
			manager = null;
		}
	}

	public void play(String filename)
	{		
		removePreviousPlayer();
		removePreviousManager();
		createPlayer(filename);
		mplayer.start();
	}
	
	public void playRTP(String url)
	{
		System.out.println("About to play: " +url);
	
		// Get port from url
		int colon = url.indexOf(':', 4);  // Skip rtp:
		int endColon = url.indexOf('/', colon);
		String portString = url.substring(colon+1, endColon);
		int port = Integer.parseInt(portString);
		
		removePreviousPlayer();
		removePreviousManager();
		
		manager = (RTPManager) RTPManager.newInstance();
		manager.addReceiveStreamListener(this);
		
		try
		{
			SessionAddress localAddr = new SessionAddress(java.net.InetAddress.getLocalHost(), port);
			SessionAddress destAddr = new SessionAddress(java.net.InetAddress.getLocalHost(), port);
		
			// Must have both of these set before receiving a transmission         
			manager.initialize(localAddr);
			manager.addTarget(destAddr);
			
			
/*			// Wait for data to arrive before moving on.
		
			long then = System.currentTimeMillis();
			long waitingPeriod = 15000;  // wait for a maximum of 15 secs.
		
			try
			{
			  synchronized (dataSync) 
			  {
					while (!dataReceived && System.currentTimeMillis() - then < waitingPeriod) 
					{
				    if (!dataReceived)
							System.err.println("  - Waiting for RTP data to arrive...");
				    dataSync.wait(1000);
					}
			  }
			} 
			catch (Exception e) 
			{
				e.printStackTrace();
			}
			
			if (!dataReceived) 
			{
			  System.err.println("No RTP data was received.");
			  //close();
			  //return false;
			}
						
			//return true;*/
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void stop()
	{
		if (mplayer != null)
			mplayer.stop();
	}
	
  private void removePreviousPlayer()
  {
  	if (mplayer == null)
  	{
  	//	System.out.println("mplayer is NULL");
  		return;
  	}
  		
  	try
  	{
	  	Component visual = mplayer.getVisualComponent();
	    Component control = mplayer.getControlPanelComponent();
	
	    if (visual != null) 
	      this.remove(visual);
	
	    if (control != null) 
	      this.remove(control );
	    
	    mplayer.close();
	 	}
	 	catch (NotRealizedError e)
	 	{
	 		System.out.println("Media player wasn't previously realized." +
	 			" Probably because invalid file opened before.");
	 	}
  }
      
  public void controllerUpdate(ControllerEvent ce) 
  {
		if (ce instanceof RealizeCompleteEvent) 
		{
//System.out.println("RealizeCompleteEvent");
	    if ((visual = mplayer.getVisualComponent()) != null) 
				add(visual, BorderLayout.CENTER);
	    
	    if ((control = mplayer.getControlPanelComponent()) != null) 
				add(control, BorderLayout.SOUTH);

// JUST UNCOMMENTED FOLLOWING LINE TO TEST RTP RECEPTION
	    mplayer.start();

			// Force screen to update itself.  Must be called explicitly because for some
			// reason the player is not getting automatically validated.
			this.revalidate();
		} 
		else if (ce instanceof EndOfMediaEvent) 
		{
			// Reset back to beginning if playing a local video file
		  mplayer.setMediaTime(new javax.media.Time(0));  
		}
		else if (ce instanceof StartEvent)  // Media is starting
		{
		//	System.out.println("StartEvent");
			
			// Turn off waiting sign
			VideoViewer.lblInfo.setText("");
		}
  }
  
  /**
   * ReceiveStreamListener
   */
  public synchronized void update(ReceiveStreamEvent evt) 
  {
		//RTPManager mgr = (RTPManager)evt.getSource();
		Participant participant = evt.getParticipant();	// could be null.
		ReceiveStream stream = evt.getReceiveStream();  // could be null.
	
		if (evt instanceof RemotePayloadChangeEvent) 
		{
	    System.err.println("  - Received an RTP PayloadChangeEvent.");
		  System.err.println("Sorry, cannot handle payload change.");
		}
	    
		else if (evt instanceof NewReceiveStreamEvent) 
		{
			System.out.println("NewReceiveStreamEvent recieved.");
			
			// We're being notified that a new RTP stream is available, so create and realize
			// player and notify loop that data was received
					
	    try 
	    {
				stream = ((NewReceiveStreamEvent)evt).getReceiveStream();
				DataSource ds = stream.getDataSource();

				// Find out the formats.
				RTPControl ctl = (RTPControl)ds.getControl("javax.media.rtp.RTPControl");
				if (ctl != null)
			    System.err.println("  - Recevied new RTP stream: " + ctl.getFormat());
				else
		    	System.err.println("  - Recevied new RTP stream");

				if (participant == null)
			    System.err.println("      The sender of this stream had yet to be identified.");
				else 
		    	System.err.println("      The stream comes from: " + participant.getCNAME()); 
		
					// create a player by passing datasource to the Media Manager
				mplayer = Manager.createPlayer(ds);
				if (mplayer == null)
				{
					System.err.println("Error creating media player.");
				  return;
				}
			
				mplayer.addControllerListener(this);
				mplayer.realize();
		
				// Notify loop that a new stream had arrived.
				synchronized (dataSync) 
				{
				  dataReceived = true;
				  dataSync.notifyAll();
				}
		
	    } 
	    catch (Exception e) 
	    {
				System.err.println("NewReceiveStreamEvent exception " + e.getMessage());
				return;
	    }
        
		}
		else if (evt instanceof StreamMappedEvent) 
		{
			System.err.println("StreamMappedEvent event");
	  /*   if (stream != null && stream.getDataSource() != null) {
		DataSource ds = stream.getDataSource();
		// Find out the formats.
		RTPControl ctl = (RTPControl)ds.getControl("javax.media.rtp.RTPControl");
		System.err.println("  - The previously unidentified stream ");
		if (ctl != null)
		    System.err.println("      " + ctl.getFormat());
		System.err.println("      had now been identified as sent by: " + participant.getCNAME());
	     }*/
		}
		else if (evt instanceof ByeEvent) 
		{
	    System.err.println("  - Got \"bye\" from: " + participant.getCNAME());
	     
	    // Stop the player but don't close it because it will be reused.
	    mplayer.stop();
			
			removePreviousManager();
	  }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -