`
wuzijingaip
  • 浏览: 329603 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java JMF的使用

阅读更多

一、jmf 开发环境的设置

下载jmf windows performace pack(我已经下载了,可直接下我提供的包)

http://java.sun.com/products/java-media/jmf/2.1.1/setup.html

安装



设置环境变量路径

set JMFHOME=C:\JMF2.1.1
set CLASSPATH=%JMFHOME%\lib\jmf.jar;%JMFHOME%\lib\sound.jar;.;%CLASSPATH%


二、播放器的例子代码(copy 到 Eclipse 、导包(可运行))


package test;


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Format;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.RGBFormat;
import javax.media.format.VideoFormat;
import javax.media.protocol.DataSource;
import javax.media.protocol.PushBufferDataSource;
import javax.media.util.BufferToImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;

import jmapps.jmstudio.CaptureDialog;
import jmapps.ui.PlayerFrame;
import jmapps.util.CDSWrapper;
import jmapps.util.JMFUtils;



public class Demo001 extends PlayerFrame {

	public Demo001() {
		super(null, "视频捕获窗口");
	}

	DataSource dataSource;

	private CaptureDeviceInfo infor;

	private MediaLocator mediaLocator;


	String str1 = "vfw:Logitech USB Video Camera:0";
	String str2 = "vfw:Microsoft WDM Image Capture (Win32):0"; 
	
	private String url = "vfw:Microsoft WDM Image Capture (Win32):0";

	private Component com;

	private JPanel panel;

	private int captureCount = 0;

	FrameGrabbingControl controlGrabber;

	public void play() {
		if (mediaPlayerCurrent.getState() != mediaPlayerCurrent.Started) {
			mediaPlayerCurrent.start();
		}
	}

	private void init() throws NoPlayerException, IOException {
		// setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		String nameCaptureDeviceAudio = null;
		String nameCaptureDeviceVideo = null;
		CaptureDialog dialogCapture = new CaptureDialog(this, null);
		dialogCapture.show();
		if (dialogCapture.getAction() == CaptureDialog.ACTION_CANCEL)
			return;
		CaptureDeviceInfo 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());
		DataSource cdswrapper = new CDSWrapper(
				(PushBufferDataSource) dataSource);
		dataSource = cdswrapper;
		dataSource.connect();
		open(dataSource);
		JPanel controlPanel = new JPanel();
		controlPanel.setName("controlPnael is here");
		add(BorderLayout.SOUTH, controlPanel);
		JButton capture = new JButton("Capture Image");
		capture.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				mediaPlayerCurrent.stop();
				Buffer bufferFrame;
				BufferToImage bufferToImage;
				Image image;
				BufferedImage bi;
				controlGrabber = (FrameGrabbingControl) mediaPlayerCurrent
						.getControl("javax.media.control.FrameGrabbingControl");
				bufferFrame = controlGrabber.grabFrame();
				bufferToImage = new BufferToImage((VideoFormat) bufferFrame
						.getFormat());
				image = bufferToImage.createImage(bufferFrame);

				File out = new File("capture" + (++captureCount) + ".png");
				try {
					bi = toBufferedImage(image);
					ImageIO.write(bi, "png", out);
				} catch (IOException e1) {
					e1.printStackTrace();
				}

				mediaPlayerCurrent.start();

			}
		});

		controlPanel.add(BorderLayout.CENTER, capture);

		JButton playStop = new JButton("stop");
		// add(BorderLayout.SOUTH,playControl);
		playStop.addActionListener(new ActionListener() {

			// @Override
			public void actionPerformed(ActionEvent arg0) {
				mediaPlayerCurrent.stop();

			}
		});
		controlPanel.add(BorderLayout.EAST, playStop);

		JButton playStart = new JButton("start");
		// add(BorderLayout.SOUTH,playControl);
		playStart.addActionListener(new ActionListener() {

			// @Override
			public void actionPerformed(ActionEvent arg0) {
				// mediaPlayerCurrent.stop();
				if (mediaPlayerCurrent.getState() != mediaPlayerCurrent.Started) {
					mediaPlayerCurrent.start();
				}
			}
		});
		controlPanel.add(BorderLayout.WEST, playStart);
		addWindowListener(new WindowAdapter() {

			// @Override
			public void windowClosing(WindowEvent e) {
				mediaPlayerCurrent.close();
				dataSource.disconnect();
				System.out.println("exit.....");
				System.exit(0);

			}
		});
	}

	public static boolean hasAlpha(Image image) {
		// If buffered image, the color model is readily available
		if (image instanceof BufferedImage) {
			BufferedImage bimage = (BufferedImage) image;
			return bimage.getColorModel().hasAlpha();
		}
		// Use a pixel grabber to retrieve the image's color model;
		// grabbing a single pixel is usually sufficient
		PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
		try {
			pg.grabPixels();
		} catch (InterruptedException e) {
		}

		// Get the image's color model
		ColorModel cm = pg.getColorModel();
		return cm.hasAlpha();
	}

	public static BufferedImage toBufferedImage(Image image) {
		if (image instanceof BufferedImage) {
			return (BufferedImage) image;
		}

		// This code ensures that all the pixels in the image are loaded
		image = new ImageIcon(image).getImage();

		// Determine if the image has transparent pixels; for this method's
		// implementation, see e661 Determining If an Image Has Transparent
		// Pixels
		boolean hasAlpha = hasAlpha(image);

		// Create a buffered image with a format that's compatible with the
		// screen
		BufferedImage bimage = null;
		GraphicsEnvironment ge = GraphicsEnvironment
				.getLocalGraphicsEnvironment();
		try {
			// Determine the type of transparency of the new buffered image
			int transparency = Transparency.OPAQUE;
			if (hasAlpha) {
				transparency = Transparency.BITMASK;
			}

			// Create the buffered image
			GraphicsDevice gs = ge.getDefaultScreenDevice();
			GraphicsConfiguration gc = gs.getDefaultConfiguration();
			bimage = gc.createCompatibleImage(image.getWidth(null), image
					.getHeight(null), transparency);
		} catch (HeadlessException e) {
			// The system does not have a screen
			System.err.println("The system does not have a screen!");
			System.exit(-1);
		}

		if (bimage == null) {
			// Create a buffered image using the default color model
			int type = BufferedImage.TYPE_INT_RGB;
			if (hasAlpha) {
				type = BufferedImage.TYPE_INT_ARGB;
			}
			bimage = new BufferedImage(image.getWidth(null), image
					.getHeight(null), type);
		}

		// Copy image to buffered image
		Graphics g = bimage.createGraphics();

		// Paint the image onto the buffered image
		g.drawImage(image, 0, 0, null);
		g.dispose();

		return bimage;
	}

	private MediaLocator autoDetect() {// 自动识别功能函数
		MediaLocator ml = null; // 视频采集设备对应的MediaLocator
		VideoFormat currentFormat = null;// 用户定制获得视频采集设备支持的格式
		Format setFormat = null;// 用户定制视频采集设备输出的格式
		Format[] videoFormats = null;// 视频采集设备支持的所有格式
		System.out.println(" AutoDetect for VFW");// VFW:微软的 Video for Windows
		// 获得当前所有设备列表
		Vector deviceList = CaptureDeviceManager.getDeviceList(null);
		CaptureDeviceInfo device = CaptureDeviceManager.getDevice(url); 
		if (deviceList != null) {
			// 根据设备列表,找出可用设备名称
			for (int i = 0; i < deviceList.size(); i++) {
				try {
					CaptureDeviceInfo di = (CaptureDeviceInfo) deviceList
							.elementAt(i);
					// 如果设备名称以vfw开头
					if (di.getName().startsWith("vfw:")) {
						// 获得所有支持RGB格式
						videoFormats = di.getFormats();
						for (int j = 0; j < videoFormats.length; j++) {
							// 我们只需要第一种RGB格式
							if (videoFormats[j] instanceof RGBFormat) {
								currentFormat = (RGBFormat) videoFormats[i];
								break;
							}
						}
						if (currentFormat == null) {
							System.err.println("Search For RGBFormat Failed");
							System.exit(-1);
						}
						// 通过设备,获得MediaLocator,这个很重要
						ml = di.getLocator();
					}
				} catch (Exception npe) {
					System.err.println("Unable to get Processor for device");
					System.exit(-1);
				}
			}
		} else {
			System.err.println("No Capture Device OK");
			System.exit(-1);
		}
		mediaLocator = ml;
		return ml;// 返回可用的设备medialocator
	}

	public static void main(String[] args) throws NoPlayerException,
			IOException {
		Demo001 demo = new Demo001();
		demo.setSize(100, 100);
		demo.autoDetect();
		demo.init();
		demo.play();
		demo.setVisible(true);
	}
}
分享到:
评论
5 楼 zxcv193188 2012-12-17  
感谢楼主  
4 楼 JoeBaby_ 2012-08-17  
非常感谢,看文档的时候觉得JMF好难的样子,但是看过代码后思路和概念清晰多了,嗨是代码更直观,非常感谢你的分享。我转载了你的文章并写明了出处
3 楼 androidzjb 2012-06-14  
谢谢你的分享, 
2 楼 wuzijingaip 2011-08-24  
下不了自然是网络问题,哈哈
1 楼 JingAi_jia 2011-08-24  
楼主,怎么下一半就下不了了?

相关推荐

    JAVA 使用JMF调用摄像头

    标题中的“JAVA 使用JMF调用摄像头”是指在Java编程环境中,通过Java Media Framework (JMF)这个开源框架来访问和操作计算机的摄像头设备。JMF是Java平台上的多媒体处理框架,它允许开发者处理音频、视频等多媒体...

    JMF下载包,java.media

    Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架。这个下载包包含了与`java.media`相关的组件,主要用于开发能够播放、捕获、处理和流化音频、视频的应用程序。下面将详细介绍JMF的核心功能、...

    java JMF音乐播放器

    Java JMF(Java Media Framework)音乐播放器是一个基于Java编程语言的多媒体应用程序,它利用了JMF库来处理音频和视频内容。Java JMF提供了一种标准的方式来集成、播放和控制多种媒体格式,使得开发者可以轻松地在...

    java的JMF包和mp3播放插件

    在Java中,由于JMF默认不支持MP3格式,因此需要额外的插件来处理这种广泛使用的音频格式。`mp3plugin.jar`文件就是这样一个插件,它扩展了JMF的功能,使得开发者能够在Java环境中流畅地播放MP3音乐。 JMF的工作原理...

    JMF.rar_java JMF_jmf

    这个“JMF.rar”压缩包包含了一份关于Java JMF的中文教程,旨在帮助开发者理解和使用这个强大的工具。下面将详细阐述JMF的主要概念、功能及其在Java开发中的应用。 JMF全称为Java Media Framework,它是由Sun ...

    java的JMF播放音乐示例

    总的来说,“java的JMF播放音乐示例”是一个基础的多媒体处理应用,它教导开发者如何在Java环境中使用JMF来播放音乐。通过这个示例,学习者可以了解到文件操作、用户输入处理以及多媒体框架的基本使用。然而,为了...

    JMF使用问题总结

    "JMF使用问题总结"这个主题主要聚焦于在使用JMF播放MP3文件时可能遇到的问题及其解决方法。 首先,让我们了解JMF的基本概念。JMF是一个可扩展的平台,提供了对多种多媒体格式的支持,包括音频和视频。它通过注册...

    java JMF的配置方法

    ### Java JMF的配置方法详解 #### 一、引言 随着互联网技术的快速发展与多媒体应用的日益普及,Java作为一种广泛使用的编程语言,其多媒体处理能力变得尤为重要。Java Media Framework (JMF)作为Sun Microsystems...

    JMF版Java音乐播放器

    **Java Media Framework (JMF) 是一种开源框架,专门用于处理多媒体内容,如音频和视频。在本项目中,"JMF版Java音乐播放器" 是一个基于Java Media Framework开发的音乐播放应用,旨在提供类似酷我音乐盒的用户体验...

    java 多媒体 JMF_api文档

    2. **注册服务提供者接口(SPI)**:JMF使用SPI机制来发现和加载支持的媒体格式。开发者可以通过实现`javax.media.Manager`中的`ServiceProvider`接口来添加对新媒体格式的支持。 3. **媒体播放**:`Player`接口是...

    java jmf摄像头控件的运用

    在"java jmf摄像头控件的运用"这个主题中,我们将深入探讨如何使用JMF来控制和操作摄像头。 首先,JMF允许开发者在Java应用程序中集成媒体播放、录制以及流媒体功能。它提供了对多种媒体格式的支持,并且可以通过...

    Java_JMF的使用

    需要注意的是,在使用JMF时,应当确保所使用的Java虚拟机(JVM)版本和操作系统与JMF兼容。此外,JMF可能不会在所有操作系统上都能完美运行,特别是对于较新的操作系统版本,可能需要额外的配置或更新。 通过理解和...

    Java用JMF拍照

    在“Java用JMF拍照”的主题下,我们将深入探讨如何在Windows 7环境下安装JMF,以及如何使用Java通过JMF来捕获摄像头图像。 首先,让我们了解JMF的安装过程: 1. **下载JMF**: 需要从Oracle官方网站或者第三方可靠...

    经典Java媒体框架JMF

    ### 经典Java媒体框架JMF详解 #### JMF简介 Java Media Framework(简称JMF)是Sun Microsystems为Java平台开发的一个多媒体框架。它提供了一套API,使得开发者能够在Java Applet或应用程序中轻松地播放多种格式的...

    java JMF 所需 Jar包

    7. **引入JMF开发**: 要在Java项目中使用JMF,首先需要将这些Jar包添加到项目的类路径中。然后,通过导入相应的类和接口,如`javax.media.Manager`和`javax.media.Player`,可以创建并控制媒体播放器。此外,还需要...

    java (JMF)媒体框架包

    Java Media Framework(JMF,Java 媒体框架)是Java平台上的一个开源组件,用于处理音频、视频和多媒体数据。这个框架允许开发者播放、捕获、处理和流化多种媒体格式。在Java应用程序中集成多媒体功能时,JMF扮演着...

    java多媒体框架JMF2.1.java多媒体框架JMF2.1

    7. **跨平台性**:作为Java的一部分,JMF具有良好的跨平台兼容性,可以在运行Java的任何操作系统上使用,如Windows、Linux和Mac OS。 在安装的文件“jmf-2_1_1e-windows-i586.exe”中,包含了JMF2.1的Windows 32位...

    JMF.rar_java JMF

    JMF&nbsp API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。&nbsp Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个...

    基于JMF的MP3播放器

    【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放MP3格式的音乐文件。这个播放器不仅具备基础的播放功能,如播放、暂停、停止和音量控制,还支持列表播放,用户可以...

Global site tag (gtag.js) - Google Analytics