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 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的使用相关推荐
- Java JMF 多媒体框架
Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节.JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求.在这篇文章中,我将向你介绍如何用很少 ...
- java jmf 视屏监控的核心代码_Java中利用JMF编写摄像头拍照程序_java
我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了.用于现场拍照,生成照片,主要用到java Media Framework(JMF). 首先到SUN下载最 ...
- java jmf 视屏监控的核心代码_JMF(Java Media Framework)使用摄像头
JMF(Java Media Framework)是Java平台使用摄像头.麦克风等媒体设备的应用程序框架,但到了2.1.1e就不再更新,在Windows 7 X64上还能正常运行,只是安装的界面让你 ...
- java jmf 教程_JMF入门(Java Media Framework)
JMF是SUN推出的用来提供给Java开发者使用Java开发视频与音频播放程序的开发库,JMF的推出已经有几年的历史了,目前最新的版本为 2.1.1e,这里我们来讲述使用Java的AWT组件来开发一个 ...
- java jmf获取图像_用JMF打开摄像头获取图像
今天学习用JAVA中的JMF来打开摄像头,这个小程序对我来说还是有点难度的.然后我在网上找的一些资料,网上的资料很多而且比较杂,对于我们新人来说,没有分辨能力,走了很多弯路.下面我把我的学习过程展示出 ...
- java jmf实现本地视频播放_Java的JMF实现视频播放器
java本地视频播放器 str; Thread mythread; Choice choice; Component visualCompoment,controlCompoment,progress ...
- java jmf播放mp3_关于jmf不能播放mp3的问题解决
想写个JAVA的MP3音乐管理器,使用JMF插件,但发现运行时总报一个异常: Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Ster ...
- java jmf播放视频_使用JMF实现java视频播放器
JMF这个多媒体开发框架太牛了,简单的几句代码就能实现一个视频播放器的开发,厉害,就是支持的格式少了一些,没关系,这个视频播放器可以播放mpg,avi,fvl等等,想播放其他的请开发自己的插件,下面将 ...
- java jmf mp3,java播发mp3(不用jmf)
java播放mp3(不用jmf) 帮一个小妹写一个播放mp3的代码,对于java不熟的我来说可真折腾. 网上好多代码都是用jmf的,需要单独安装,除了jar包,还依赖很多dll文件. 找了又找,终于找 ...
- java jmf获取图像_java利用jmf实现拍照功能
首先到SUN下载最新的JMF,然后安装.http://java.sun.com/products/java-media/jmf/index.jsp http://www.bt285.cn 然后,说一下 ...
最新文章
- AI可以在游戏里称霸,但是解决现实问题太难了
- IDC:2015年全球专用备份一体机市场稳健增长
- 浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题
- NUC1313 皇帝的金币
- 新鲜出炉:2021 编程语言排行榜~
- 数据库 - 交集、并集和补集
- 网络服务器是干什么用的
- c语言scanf输入无理数,简单C语言scanf输入问题
- FPGA音频录音,WM8731音频采集存储DDR3,基于米联客FDMA实现
- 薅当当羊毛的机会又!双!!叒!!!叕!!!来了
- Tracup|工作时节省时间的三个奇异但是有用的小妙招
- BroadcastReceiver插件化
- 常用的统计学指标及其含义
- [OHIF-Viewers]医疗数字阅片-医学影像-React/Redux 的好帮手Classnames
- Android开发之控制手机振动(Vibrator的使用)
- 关于css设置第n个元素
- 杨振宁与清华计算机系,我们都误会杨振宁了!看到清华给出的工资,才明白他有多伟大...
- 餐饮店开业活动策划如何做?引流促销营销怎么做?餐饮会员日周年庆方案
- Amazon Personalize 个性化效果评估,从准确性到多样性、新颖性和偶然性
- lqc_软件仓库部署及应用
热门文章
- lat_mem_rd 内存延迟测试工具原理,lmbench编译时llseek链接不到问题解决
- virtualBox安装centos7并实现宿主机、虚拟机、外网三网互通
- document.getElementById(“id”)与$(#id)的区别
- vs extension 监听键盘输入
- ubuntu 误使用dpkg --clear-selections修复
- 中北c语言程序设计,中北大学软件学2013届C语言程序设计实训题目.doc
- VuePress 开发技术文档网站,管理.md文件,生成静态网站
- 详解 input accept属性
- UTC时间与Beijing时间转换工具
- python牛顿法解非线性方程组_用牛顿迭代法解非线性方程组