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

📄 jmstudio.java

📁 java 开发的sip软电话 源码 jain sip
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package net.java.mais.media.jmf;

/*
 * @(#)JMStudio.java	1.43 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Image;
import java.awt.MenuShortcut;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Vector;

import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Codec;
import javax.media.Control;
import javax.media.Controller;
import javax.media.Format;
import javax.media.PlugInManager;
import javax.media.PrefetchCompleteEvent;
import javax.media.Processor;
import javax.media.RealizeCompleteEvent;
import javax.media.bean.playerbean.MediaPlayer;
import javax.media.control.FormatControl;
import javax.media.control.FrameGrabbingControl;
import javax.media.control.TrackControl;
import javax.media.format.AudioFormat;
import javax.media.format.FormatChangeEvent;
import javax.media.format.VideoFormat;
import javax.media.protocol.CaptureDevice;
import javax.media.protocol.DataSource;
import javax.media.protocol.PushBufferDataSource;
import javax.media.rtp.RTPStream;
import javax.media.rtp.ReceiveStream;
import javax.media.rtp.ReceiveStreamListener;
import javax.media.rtp.SendStream;
import javax.media.rtp.SessionAddress;
import javax.media.rtp.event.NewReceiveStreamEvent;
import javax.media.rtp.event.ReceiveStreamEvent;
import javax.media.util.BufferToImage;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

import com.sun.media.rtp.RTPSessionMgr;
import com.sun.media.util.JMFI18N;

import jmapps.jmstudio.AboutDialog;
import jmapps.jmstudio.CaptureControlsDialog;
import jmapps.jmstudio.CaptureDialog;
import jmapps.jmstudio.OpenRtpDialog;
import jmapps.jmstudio.OpenUrlDialog;
import jmapps.jmstudio.SaveAsDialog;
import jmapps.jmstudio.TransmitWizard;
import jmapps.rtp.SessionControlDialog;
import jmapps.rtp.TransmissionStatsDialog;
import jmapps.ui.ImageArea;
import jmapps.ui.JMDialog;
import jmapps.ui.MessageDialog;
import jmapps.ui.SnapFrame;
import jmapps.util.CDSWrapper;
import jmapps.util.JMAppsCfg;


public class JMStudio extends PlayerFrame implements ItemListener,
                                    ReceiveStreamListener {

    private JMenu                    menuRecentUrl;
    private JMenu                    menuAE;
    private JMenu                    menuVE;
    private JMenuItem                menuFileClose;
    private JMenuItem                menuFileExport;
    private JMenuItem                menuCapture;
    private JCheckBoxMenuItem        menuAutoPlay;
    private JCheckBoxMenuItem        menuAutoLoop;
    private JCheckBoxMenuItem        menuKeepAspect;
    private JMenuItem                menuFullScreen;
    private JMenuItem                menuSnapShot;
    private JMenuItem                menuPlugins;
    private JMenuItem                menuCaptureControl;
    private JMenuItem                menuRtpSessionControl;
    private JMenuItem                menuTransmissionStats;

    private Dimension               dimFrameSizeBeforeFullScreen = null;
    private Window                  windowFullScreen = null;
    private MouseListener           listenerMouseFullScreen;

    private Control                 controlPlugins = null;
    private Component               componentPlugins = null;
    private FrameGrabbingControl    controlGrabber = null;

    private JFileChooser            dlgOpenFile = null;
    private JMFRegistry             jmfRegistry = null;

    private Vector                  vectorRtpFrames = null;
    private SnapFrame               frameSnap = null;
    private TransmissionStatsDialog dlgTransmissionStats = null;
    private SessionControlDialog    dlgSessionControl = null;

    private String                  strOptionalTitle = "";
    private DataSource              dataSourceCurrent = null;
    private String                  nameCaptureDeviceAudio = null;
    private String                  nameCaptureDeviceVideo = null;
    private String                  audioEffect = null;
    private String                  videoEffect = null;
    private CaptureControlsDialog   dlgCaptureControls = null;

    private RTPSessionMgr           mngrSessionRtp = null;
    private Vector                  vectorMngrSessions = null;
    private Vector                  vectorStreams = null;
    private Vector                  vectorStreamLabels = null;

    boolean killed = false;
    boolean recvRTP = false;

    public static final String APPNAME = JMFI18N.getResource ( "jmstudio.appname" );

    private static final String MENU_FILE                   = JMFI18N.getResource ( "jmstudio.menu.file" );
    private static final String MENU_FILE_NEWWINDOW         = JMFI18N.getResource ( "jmstudio.menu.file.newwindow" );
    private static final String MENU_FILE_OPENFILE          = JMFI18N.getResource ( "jmstudio.menu.file.openfile" );
    private static final String MENU_FILE_OPENURL           = JMFI18N.getResource ( "jmstudio.menu.file.openurl" );
    private static final String MENU_FILE_OPENRTP           = JMFI18N.getResource ( "jmstudio.menu.file.openrtp" );
    private static final String MENU_FILE_CAPTURE           = JMFI18N.getResource ( "jmstudio.menu.file.capture" );
    private static final String MENU_FILE_RECENTURL         = JMFI18N.getResource ( "jmstudio.menu.file.recent" );
    private static final String MENU_FILE_CLOSE             = JMFI18N.getResource ( "jmstudio.menu.file.close" );
    private static final String MENU_FILE_EXPORT            = JMFI18N.getResource ( "jmstudio.menu.file.export" );
    private static final String MENU_FILE_TRANSMIT          = JMFI18N.getResource ( "jmstudio.menu.file.transmit" );
    private static final String MENU_FILE_PREFERENCES       = JMFI18N.getResource ( "jmstudio.menu.file.preferences" );
    private static final String MENU_FILE_EXIT              = JMFI18N.getResource ( "jmstudio.menu.file.exit" );

    private static final String MENU_PLAYER                 = JMFI18N.getResource ( "jmstudio.menu.player" );
    private static final String MENU_PLAYER_AUTOPLAY        = JMFI18N.getResource ( "jmstudio.menu.player.autoplay" );
    private static final String MENU_PLAYER_AUTOLOOP        = JMFI18N.getResource ( "jmstudio.menu.player.autoloop" );
    private static final String MENU_PLAYER_KEEPASPECT      = JMFI18N.getResource ( "jmstudio.menu.player.keepaspect" );
    private static final String MENU_PLAYER_FULLSCREEN      = JMFI18N.getResource ( "jmstudio.menu.player.fullscreen" );
    private static final String MENU_PLAYER_SNAPSHOT        = JMFI18N.getResource ( "jmstudio.menu.player.snapshot" );
    private static final String MENU_PLAYER_PLUGINS         = JMFI18N.getResource ( "jmstudio.menu.player.plugins" );
    private static final String MENU_PLAYER_CAPTURE         = JMFI18N.getResource ( "jmstudio.menu.player.capturecontrols" );
    private static final String MENU_PLAYER_RTPSESSION      = JMFI18N.getResource ( "jmstudio.menu.player.rtpsession" );
    private static final String MENU_PLAYER_TRANSMISSION    = JMFI18N.getResource ( "jmstudio.menu.player.transmission" );

    private static final String MENU_HELP                   = JMFI18N.getResource ( "jmstudio.menu.help");
    private static final String MENU_HELP_ABOUT             = JMFI18N.getResource ( "jmstudio.menu.help.about");

    private static Vector       vectorFrames = new Vector (); // keeps count of all open JMStudio frames
    private static JMAppsCfg    cfgJMApps = null;
    private static double       dDefaultScale = 1.0;


    public JMStudio () {
        super ( null, APPNAME );
        updateMenu ();
    killed = false;
    recvRTP = false;
    }

    public void addNotify () {
        super.addNotify ();
    }

    public void pack () {
        super.pack ();
    }

    protected void initFrame () {
        createMenu ();
        super.initFrame ();
    }

    /**
     * The metho is created in order to simplify porting SUN's JMStudio from
     * awt to Swing.
     * @param title String
     * @param shortcut MenuShortcut
     * @return JMenuItem
     */
    private JMenuItem createMenuItem(String title, MenuShortcut shortcut)
    {
        JMenuItem item = new JMenuItem(title);
        item.setAccelerator(KeyStroke.getKeyStroke(shortcut.getKey(),
            KeyEvent.CTRL_MASK));
        return item;
    }


    private void createMenu () {
        JMenuBar         menu;
        JMenu            menuFile;
        JMenu            menuPlayer;
        JMenu            menuHelp;
        MenuShortcut    shortcut;
        JMenuItem        itemMenu;
        Vector          vector;
        boolean         boolValue;


        menu = new JMenuBar ();
        this.setJMenuBar ( menu );

        // menu File
        menuFile = new JMenu ( MENU_FILE );
        menu.add ( menuFile );

        shortcut = new MenuShortcut ( KeyEvent.VK_N );
        itemMenu = createMenuItem( MENU_FILE_NEWWINDOW, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        shortcut = new MenuShortcut ( KeyEvent.VK_O );
        itemMenu = createMenuItem( MENU_FILE_OPENFILE, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        shortcut = new MenuShortcut ( KeyEvent.VK_U );
        itemMenu = createMenuItem( MENU_FILE_OPENURL, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        shortcut = new MenuShortcut ( KeyEvent.VK_R );
        itemMenu = createMenuItem( MENU_FILE_OPENRTP, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        shortcut = new MenuShortcut ( KeyEvent.VK_P );
        menuCapture = createMenuItem( MENU_FILE_CAPTURE, shortcut );
        menuCapture.addActionListener ( this );
        menuFile.add ( menuCapture );
        vector = CaptureDeviceManager.getDeviceList ( null );
        if ( vector == null  ||  vector.size() < 1 )
            menuCapture.setEnabled ( false );
        else
            menuCapture.setEnabled ( true );

        menuRecentUrl = new JMenu ( MENU_FILE_RECENTURL );
        updateRecentUrlMenu ();
        menuFile.add ( menuRecentUrl );

        shortcut = new MenuShortcut ( KeyEvent.VK_W );
        menuFileClose = createMenuItem( MENU_FILE_CLOSE, shortcut );
        menuFileClose.addActionListener ( this );
        menuFile.add ( menuFileClose );

        menuFile.addSeparator ();

        shortcut = new MenuShortcut ( KeyEvent.VK_E );
        menuFileExport = createMenuItem( MENU_FILE_EXPORT, shortcut );
        menuFileExport.addActionListener ( this );
        menuFile.add ( menuFileExport );

        shortcut = new MenuShortcut ( KeyEvent.VK_T );
        itemMenu = createMenuItem( MENU_FILE_TRANSMIT, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        menuFile.addSeparator ();

        itemMenu = new JMenuItem ( MENU_FILE_PREFERENCES );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        shortcut = new MenuShortcut ( KeyEvent.VK_X );
        itemMenu = createMenuItem( MENU_FILE_EXIT, shortcut );
        itemMenu.addActionListener ( this );
        menuFile.add ( itemMenu );

        // menu Player
        menuPlayer = new JMenu ( MENU_PLAYER );
        menu.add ( menuPlayer );
        // It's a funny thing that we have to make this kind of a call at all,
        // less in this particular place. But if we don't do that here,
        // Windows will screw up the frame insets and therefore the layout.
        this.addNotify ();

        if ( cfgJMApps != null )
            boolValue = cfgJMApps.getAutoPlay ();
        else
            boolValue = false;
        menuAutoPlay = new JCheckBoxMenuItem( MENU_PLAYER_AUTOPLAY, boolValue );
        menuAutoPlay.addItemListener ( this );
        menuPlayer.add ( menuAutoPlay );

        if ( cfgJMApps != null )
            boolValue = cfgJMApps.getAutoLoop ();
        else
            boolValue = true;
        menuAutoLoop = new JCheckBoxMenuItem( MENU_PLAYER_AUTOLOOP, boolValue );
        menuAutoLoop.addItemListener ( this );
        menuPlayer.add ( menuAutoLoop );

        if ( cfgJMApps != null )
            boolValue = cfgJMApps.getKeepAspectRatio ();
        else
            boolValue = false;
        menuKeepAspect = new JCheckBoxMenuItem( MENU_PLAYER_KEEPASPECT, boolValue );
        menuKeepAspect.addItemListener ( this );
        menuPlayer.add ( menuKeepAspect );

        menuPlayer.addSeparator ();

        shortcut = new MenuShortcut ( KeyEvent.VK_F );
        menuFullScreen = createMenuItem( MENU_PLAYER_FULLSCREEN, shortcut );
        menuFullScreen.addActionListener ( this );
        menuPlayer.add ( menuFullScreen );

        shortcut = new MenuShortcut ( KeyEvent.VK_S );
        menuSnapShot = createMenuItem(MENU_PLAYER_SNAPSHOT, shortcut );
        menuSnapShot.addActionListener ( this );
        menuPlayer.add ( menuSnapShot );

        menuPlayer.addSeparator ();

//        shortcut = new MenuShortcut ( KeyEvent.VK_V );
        menuPlugins = new JMenuItem ( MENU_PLAYER_PLUGINS /*, shortcut*/ );
        menuPlugins.addActionListener ( this );
        menuPlayer.add ( menuPlugins );

//        shortcut = new MenuShortcut ( KeyEvent.VK_A );
        menuCaptureControl = new JMenuItem ( MENU_PLAYER_CAPTURE /*, shortcut*/ );
        menuCaptureControl.addActionListener ( this );
        menuPlayer.add ( menuCaptureControl );

//        shortcut = new MenuShortcut ( KeyEvent.VK_I );
        menuRtpSessionControl = new JMenuItem ( MENU_PLAYER_RTPSESSION /*, shortcut*/ );
        menuRtpSessionControl.addActionListener ( this );
        menuPlayer.add ( menuRtpSessionControl );

//        shortcut = new MenuShortcut ( KeyEvent.VK_M );
        menuTransmissionStats = new JMenuItem ( MENU_PLAYER_TRANSMISSION /*, shortcut*/ );
        menuTransmissionStats.addActionListener ( this );
        menuPlayer.add ( menuTransmissionStats );

    // Add effects menus
    menuPlayer.addSeparator();
    Vector videoEffects = getEffectList(new VideoFormat(null));
    Vector audioEffects = getEffectList(new AudioFormat(null));
    if (videoEffects.size() > 0) {
        menuVE = new JMenu("Insert Video Effect");
        fillEffectList(menuVE, videoEffects);
        menuPlayer.add(menuVE);
    }
    if (audioEffects.size() > 0) {
        menuAE = new JMenu("Insert Audio Effect");
        fillEffectList(menuAE, audioEffects);
        menuPlayer.add(menuAE);
    }
        // menu Help
        menuHelp = new JMenu ( MENU_HELP );
        menu.add ( menuHelp );

        shortcut = new MenuShortcut ( KeyEvent.VK_H );
        itemMenu = createMenuItem ( MENU_HELP_ABOUT, shortcut );
        itemMenu.addActionListener ( this );
        menuHelp.add ( itemMenu );
    }

    public void actionPerformed ( ActionEvent event ) {
        String      strCmd;
        Object      objSource;
        String      nameUrl;
        Frame       frame;
        Component   component;


        strCmd = event.getActionCommand ();
        objSource = event.getSource ();
        if ( strCmd == null  &&  objSource instanceof JMenuItem )
            strCmd = ((JMenuItem)objSource).getActionCommand ();

        if ( strCmd == null )
            return;

        if ( strCmd.equals(MENU_FILE_NEWWINDOW) ) {
            createNewFrame ();
        }
        else if ( strCmd.equals(MENU_FILE_OPENFILE) ) {
            openFile ();

⌨️ 快捷键说明

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