望有这方面经验的人交流一下心得
一、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 jmf.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 JMFDemo extends PlayerFrame {

public JMFDemo() {

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 {

JMFDemo demo = new JMFDemo();

demo.setSize(100, 100);

demo.autoDetect();

demo.init();

demo.play();

demo.setVisible(true);

}

}

代码下载:JMF_demo.rar (9.1 MB)

原文链接:http://wuzijingaip.iteye.com/blog/537168

Java JMF的使用相关推荐

  1. Java JMF 多媒体框架

    Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节.JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求.在这篇文章中,我将向你介绍如何用很少 ...

  2. java jmf 视屏监控的核心代码_Java中利用JMF编写摄像头拍照程序_java

    我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了.用于现场拍照,生成照片,主要用到java Media Framework(JMF). 首先到SUN下载最 ...

  3. java jmf 视屏监控的核心代码_JMF(Java Media Framework)使用摄像头

    JMF(Java Media Framework)是Java平台使用摄像头.麦克风等媒体设备的应用程序框架,但到了2.1.1e就不再更新,在Windows 7 X64上还能正常运行,只是安装的界面让你 ...

  4. java jmf 教程_JMF入门(Java Media Framework)

    JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库,JMF的推出已经有几年的历史了,目前最新的版本为 2.1.1e,这里我们来讲述使用Java的AWT组件来开发一个 ...

  5. java jmf获取图像_用JMF打开摄像头获取图像

    今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程展示出 ...

  6. java jmf实现本地视频播放_Java的JMF实现视频播放器

    java本地视频播放器 str; Thread mythread; Choice choice; Component visualCompoment,controlCompoment,progress ...

  7. java jmf播放mp3_关于jmf不能播放mp3的问题解决

    想写个JAVA的MP3音乐管理器,使用JMF插件,但发现运行时总报一个异常: Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Ster ...

  8. java jmf播放视频_使用JMF实现java视频播放器

    JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将 ...

  9. java jmf mp3,java播发mp3(不用jmf)

    java播放mp3(不用jmf) 帮一个小妹写一个播放mp3的代码,对于java不熟的我来说可真折腾. 网上好多代码都是用jmf的,需要单独安装,除了jar包,还依赖很多dll文件. 找了又找,终于找 ...

  10. java jmf获取图像_java利用jmf实现拍照功能

    首先到SUN下载最新的JMF,然后安装.http://java.sun.com/products/java-media/jmf/index.jsp http://www.bt285.cn 然后,说一下 ...

最新文章

  1. AI可以在游戏里称霸,但是解决现实问题太难了
  2. IDC:2015年全球专用备份一体机市场稳健增长
  3. 浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题
  4. NUC1313 皇帝的金币
  5. 新鲜出炉:2021 编程语言排行榜~
  6. 数据库 - 交集、并集和补集
  7. 网络服务器是干什么用的
  8. c语言scanf输入无理数,简单C语言scanf输入问题
  9. FPGA音频录音,WM8731音频采集存储DDR3,基于米联客FDMA实现
  10. 薅当当羊毛的机会又!双!!叒!!!叕!!!来了
  11. Tracup|工作时节省时间的三个奇异但是有用的小妙招
  12. BroadcastReceiver插件化
  13. 常用的统计学指标及其含义
  14. [OHIF-Viewers]医疗数字阅片-医学影像-React/Redux 的好帮手Classnames
  15. Android开发之控制手机振动(Vibrator的使用)
  16. 关于css设置第n个元素
  17. 杨振宁与清华计算机系,我们都误会杨振宁了!看到清华给出的工资,才明白他有多伟大...
  18. 餐饮店开业活动策划如何做?引流促销营销怎么做?餐饮会员日周年庆方案
  19. Amazon Personalize 个性化效果评估,从准确性到多样性、新颖性和偶然性
  20. lqc_软件仓库部署及应用

热门文章

  1. lat_mem_rd 内存延迟测试工具原理,lmbench编译时llseek链接不到问题解决
  2. virtualBox安装centos7并实现宿主机、虚拟机、外网三网互通
  3. document.getElementById(“id”)与$(#id)的区别
  4. vs extension 监听键盘输入
  5. ubuntu 误使用dpkg --clear-selections修复
  6. 中北c语言程序设计,中北大学软件学2013届C语言程序设计实训题目.doc
  7. VuePress 开发技术文档网站,管理.md文件,生成静态网站
  8. 详解 input accept属性
  9. UTC时间与Beijing时间转换工具
  10. python牛顿法解非线性方程组_用牛顿迭代法解非线性方程组