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

📄 jmfmediaplayer.java

📁 是一个java 写的一个播放器 支持多种格式播放
💻 JAVA
字号:
package capture1;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Format;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.media.format.VideoFormat;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.util.*;
import javax.sql.*;
/**
 * 用Java的JMF实现一个媒体播放器,可以播放音频和视频
 */
public class JMFMediaPlayer extends JFrame implements ActionListener,
		ControllerListener, ItemListener {
	// JMF的播放器
	Player player;
	// 播放器的视频组件和控制组件
	Component vedioComponent; 
	Component controlComponent;
	Component audioComponent;
	DataSource[] dataSources = new DataSource[2];
	private String url = "vfw:Microsoft WDM Image Capture (Win32):0"; 
	private String url2 = "vfw:Aomg USB PC Camera #2";
	private CaptureDeviceInfo info;
	private MediaLocator medialocator;

	// 标示是否是第一次打开播放器
	boolean first = true;
	// 标示是否需要循环
	boolean loop = false;
	// 文件当前目录
	String currentDirectory;

	// 构造方法
	public JMFMediaPlayer(String title) {
		super(title);
		addWindowListener(new WindowAdapter() {
			
			public void windowClosing(WindowEvent e){
				// 用户点击窗口系统菜单的关闭按钮
				// 调用dispose以执行windowClosed
				System.out.println("windowClosing");
				dispose();
			}
			public void windowClosed(WindowEvent e){
				if (player != null){
					// 关闭JMF播放器对象
					System.out.println("windowClosed");
					player.close();
				}
				System.exit(0);
			}
		});
		// 创建播放器的菜单
		JMenu fileMenu = new JMenu("文件");
		JMenuItem openMemuItem = new JMenuItem("打开");
		openMemuItem.addActionListener(this);
		fileMenu.add(openMemuItem);
		// 添加一个分割条
		fileMenu.addSeparator();
		// 创建一个复选框菜单项
		JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
		loopMenuItem.addItemListener(this);
		fileMenu.add(loopMenuItem);
		fileMenu.addSeparator();
		JMenuItem exitMemuItem = new JMenuItem("退出");
		exitMemuItem.addActionListener(this);
		fileMenu.add(exitMemuItem);
		fileMenu.addSeparator();
		JMenuItem captureMenuItem = new JMenuItem("捕获视频源");
		captureMenuItem.addActionListener(this);
		fileMenu.add(captureMenuItem);
		
		
		
		JMenuBar menuBar = new JMenuBar();
		menuBar.add(fileMenu);
		this.setJMenuBar(menuBar);
		this.setSize(200, 200);
		
		try {
			// 设置界面的外观,为系统外观
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			SwingUtilities.updateComponentTreeUI(this);
		} catch (Exception e) {
			e.printStackTrace();
		}
		this.setVisible(true);
	}

	/**
	 * 实现了ActionListener接口,处理组件的活动事件
	 */
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("退出")) {
			// 调用dispose以便执行windowClosed
			dispose();
			return;
		}
		if(e.getActionCommand().equals("捕获视频源")){
			info = CaptureDeviceManager.getDevice(url);
			medialocator = info.getLocator();
			try{
			System.out.println("before createPlayer");
			player = Manager.createPlayer(medialocator);
			System.out.println("after createPlayer");
			}catch(java.io.IOException e3){
				e3.printStackTrace();
			}catch(NoPlayerException e3){
				e3.printStackTrace();
			}
			player.addControllerListener(this);
//			Component comp=player.getVisualComponent();
/*			if(player.getVisualComponent()!=null){
				System.out.println("getVisualComponent()!=null");
//				this.getContentPane().add(comp);
			}
			System.out.println("getVisualComponent()=null");*/
			player.start();
			return;
		}
		FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
		fileDialog.setDirectory(currentDirectory);
		System.out.println(currentDirectory);
		fileDialog.setVisible(true);
		// 如果用户放弃选择文件,则返回
		if (fileDialog.getFile() == null){
			return;
		}
		currentDirectory = fileDialog.getDirectory();
		if (player != null){
			// 关闭已经存在JMF播放器对象
			player.close();
		}


		try {
			// 创建一个打开选择文件的播放器
			player = Manager.createPlayer(new MediaLocator("file:"
					+ fileDialog.getDirectory() + fileDialog.getFile()));
//			System.out.print(fileDialog.getDirectory());
		} catch (java.io.IOException e2) {
			System.out.println(e2);
			return;
		} catch (NoPlayerException e2) {
			System.out.println("不能找到播放器.");
			return;
		}
		if (player == null) {
			System.out.println("无法创建播放器.");
			return;
		}
		first = false;
		this.setTitle(fileDialog.getFile());
		// 播放器的控制事件处理
		player.addControllerListener(this);
		// 预读文件内容
		player.prefetch();
	}
	/**
	 * 实现ControllerListener接口的方法,处理播放器的控制事件
	 */
	public void controllerUpdate(ControllerEvent e) {
		// 调用player.close()时ControllerClosedEvent事件出现。
		// 如果存在视觉部件,则该部件应该拆除(为一致起见,
		// 我们对控制面板部件也执行同样的操作)
		if (e instanceof ControllerClosedEvent) {
			if (vedioComponent != null) {
				this.getContentPane().remove(vedioComponent);
				this.vedioComponent = null;
			}
			if (controlComponent != null) {
				this.getContentPane().remove(controlComponent);
				this.controlComponent = null;
			}
			return;
		}
		// 如果是媒体文件到达尾部事件
		if (e instanceof EndOfMediaEvent) {
			if (loop) {
				// 如果允许循环,则重新开始播放
				player.setMediaTime(new Time(0));
				player.start();
			}
			return;
		}
		// 如果是播放器预读事件
		if (e instanceof PrefetchCompleteEvent) {
			// 启动播放器
			player.start();
			return;
		}
		// 如果是文件打开完全事件,则显示视频组件和控制器组件
		if (e instanceof RealizeCompleteEvent) {
			System.out.println("RealizeCompleteEvent");
			vedioComponent = player.getVisualComponent();
/*			dataSources[0] =
		          Manager.createDataSource(player.getLocator());*/
			if (vedioComponent != null){
				this.getContentPane().add(vedioComponent);
			}
			controlComponent = player.getControlPanelComponent();
			if (controlComponent != null){
				this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
			}
			this.pack();
		}
	}
	
	// 处理“循环”复选框菜单项的点击事件
	public void itemStateChanged(ItemEvent e) {
		loop = !loop;
	}

	public static void main(String[] args){
		new JMFMediaPlayer("JMF媒体播放器");
	}
}

⌨️ 快捷键说明

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