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

📄 device.java

📁 次代码实现了java对视频的截取
💻 JAVA
字号:
import java.util.*;
import java.net.*;
import java.lang.reflect.Method;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.media.*;
import javax.media.util.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.media.protocol.*;
import javax.media.bean.playerbean.*;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import com.sun.media.util.JMFI18N;
import com.sun.media.rtp.RTPSessionMgr;
import jmapps.ui.*;
import jmapps.util.*;
import jmapps.rtp.*;
import jmapps.jmstudio.*;
public class device extends Frame implements ControllerListener, ActionListener
{
	String		filename;
	JMAppsCfg    cfgJMApps = null;
	DataSource dataSource=null;
	MediaPlayer     mediaPlayer=null;
	RTPManager rtpMgrs[]=null;
	PushBufferStream pbss[] = null;
	int portBase=8800;             // 传输端口号
	 Processor processor = null;          

public device(String s1)
  	  {
      		  super(s1);        
      		  addWindowListener(new WindowAdapter()
      		  {
          	  public void windowClosing(WindowEvent we)
         	   {
              		  dispose();
              		  System.exit(0);
           		 }
       			 }); 

        MenuBar mb = new MenuBar();
        setMenuBar(mb);
        Menu fileMenu = new Menu("File");
        mb.add(fileMenu);
        
        MenuItem itemPlay = new MenuItem("capture");
        itemPlay.addActionListener(this);
        fileMenu.add(itemPlay);
	fileMenu.addSeparator();
	
	MenuItem itemPlay1 = new MenuItem("sendmedia");
        itemPlay1.addActionListener(this);
        fileMenu.add(itemPlay1);
    }
    public synchronized void controllerUpdate(ControllerEvent event)
    {
        System.out.println("Event: " + event);        
        if (event instanceof RealizeCompleteEvent)
        {
            Component comp;            
            if ((comp = mediaPlayer.getVisualComponent()) != null)
            {
                add("Center", comp);
            }else
                System.out.println("Unable to get visual component");            
            validate();
        }
    }
public void actionPerformed(ActionEvent ae)
    {
        String action = ae.getActionCommand().toString();
        if (action.equals("capture"))
        {
            play();
        }
	
	else if (action.equals("sendmedia"))
        {
            send();
        }
    }
void play(){
	CaptureDialog       dialogCapture=null;
	CaptureDeviceInfo   cdi=null;
	CaptureControlsDialog    dlgCaptureControls=null;
	String  	        nameCaptureDeviceVideo="";
	String		 	nameCaptureDeviceAudio="";
	dialogCapture = new CaptureDialog ( this, cfgJMApps);
        dialogCapture.show ();
	if (dialogCapture.getAction() == CaptureDialog.ACTION_CANCEL)
            return;
        cdi = dialogCapture.getAudioDevice();
        if ( cdi != null&&dialogCapture.isAudioDeviceUsed())
            nameCaptureDeviceAudio = cdi.getName();
        cdi = dialogCapture.getVideoDevice();
        if ( cdi != null&&dialogCapture.isVideoDeviceUsed())
            nameCaptureDeviceVideo = cdi.getName();
dataSource = JMFUtils.createCaptureDataSource ( nameCaptureDeviceAudio,dialogCapture.getAudioFormat(),nameCaptureDeviceVideo,dialogCapture.getVideoFormat());
if (dataSource != null){
            if (dataSource instanceof CaptureDevice&&dataSource instanceof PushBufferDataSource) {
                DataSource cdswrapper = new CDSWrapper((PushBufferDataSource)dataSource);
                dataSource = cdswrapper;
                try {
                    cdswrapper.connect();
                }
                catch (IOException ioe) {
                    dataSource = null;
                    nameCaptureDeviceAudio = null;
                    nameCaptureDeviceVideo = null;
                    MessageDialog.createErrorDialog ( this,JMFI18N.getResource("jmstudio.error.captureds") );
                }
    	    }
mediaPlayer = jmapps.util.JMFUtils.createMediaPlayer ( dataSource, (Frame)this );
open ( mediaPlayer, true );
            if ( dataSource != null ) {
            dlgCaptureControls = new CaptureControlsDialog (this, dataSource );
                if ( dlgCaptureControls.isEmpty() ) {
                    dlgCaptureControls = null;
                }
                else {
//                    dlgCaptureControls.setVisible ( true );
                }
            }
        }
        else {
            nameCaptureDeviceAudio = null;
            nameCaptureDeviceVideo = null;
            MessageDialog.createErrorDialog ( this,
                            JMFI18N.getResource("jmstudio.error.captureds") );
        }
}
public boolean open ( MediaPlayer mediaPlayer, boolean killPrevious ) {
        if ( mediaPlayer == null )
            return ( false );
        mediaPlayer.setPopupActive ( false );
        mediaPlayer.setControlPanelVisible ( false );
        mediaPlayer.addControllerListener ( this );
        mediaPlayer.realize();
	mediaPlayer.start();
        return ( true );
    }


public boolean send(){
String ipAddress="202.119.205.118";
 if (dataSource == null)
	return false;
else{
PushBufferDataSource pbds = (PushBufferDataSource)dataSource;
//processor = javax.media.Manager.createProcessor(dataSource);
//dataSource = processor.getDataOutput();   // 从处理器得到输出的数据源
pbss=pbds.getStreams();
rtpMgrs = new RTPManager[pbss.length];       // 为每个磁道产生一个RTP会话管理器
    for (int i = 0; i < pbss.length; i++) {
      try {
        rtpMgrs[i] = RTPManager.newInstance();
        int port = portBase + 2*i;                         // 每增加一个磁道,端口号加2
        InetAddress ipAddr = InetAddress.getByName(ipAddress);     // 得到发送目的地的IP地址
        SessionAddress localAddr = new SessionAddress( InetAddress.getLocalHost(),port);    // 得到本机的会话地址
                                                                // 这里传输端使用和接收目的端相同的端口号(实际上也可以不同)
        SessionAddress destAddr = new SessionAddress( ipAddr, port);          // 得到目的机器(接收端)的会话地址
        rtpMgrs[i].initialize( localAddr);                  // 将本机会话地址传给RTP管理器
        rtpMgrs[i].addTarget( destAddr);                    // 加入目的会话地址
        System.err.println( "Created RTP session: " + ipAddress + " " + port);
        SendStream sendStream = rtpMgrs[i].createSendStream(dataSource, i);           // 产生数据源的RTP传输流
        sendStream.start();                                // 开始RTP数据流发送
      }
      catch (Exception  e) {
        return false;
      }
}
return true;}
}

public static void main(String [] a){
device mvp = new device("MinimalVideoPlayer");        
	mvp.show();
        mvp.setSize(250,250);
        mvp.setLocation(250,300);
}      

}

⌨️ 快捷键说明

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