- 浏览: 331345 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (299)
- 私人 (3)
- linux (22)
- web service (1)
- java applet (1)
- java (41)
- c# (1)
- socket (1)
- android (10)
- htc (1)
- root (1)
- ftp (3)
- 系统备份 (0)
- jquery (3)
- 图表 (1)
- 实用 (4)
- web (9)
- css (3)
- java applet mplayer (1)
- mplayer (4)
- javascript (8)
- eclipse (1)
- 正则表达式 (1)
- jmf (1)
- tomcat (6)
- 驱动 (1)
- 嵌入式 (1)
- usb (3)
- ffmpeg (1)
- player (1)
- encode (1)
- ajax (1)
- 单纯形复法 (1)
- rom (1)
- ndk (1)
- 打印 (1)
- vs2010 (2)
- myeclipse注册机 (1)
- c++ (5)
- capture (0)
- 串口 (1)
- windows (2)
- mingw (1)
- 网卡 (1)
- 绿色版 (1)
- cywin (1)
- x264 (1)
- 恢复文件 (1)
- servlet init 连数据库 (1)
- 51 单片机 (1)
- 操作系统 (1)
- vlc (3)
- 网线 (1)
- CListBox (1)
- mfc (1)
- setTimer (1)
- 分屏 (1)
- 供求信息 (1)
- 导航 (1)
- 批处理 (1)
- dos (1)
- mysql (5)
- MySQL新建用户 (1)
- demo (1)
- vc (1)
- webservice (1)
- 书签 (1)
- 浏览器 (1)
- spring mvc (1)
- excel (1)
- VPN (0)
- sql (1)
- pdf (3)
- arp (1)
- jsp (2)
- IE (1)
- html (1)
- test (3)
- httpclient (1)
- spring mvc 上传 (1)
- easyui (1)
- mybatis (1)
- spring (1)
- 微信 (1)
- weixin (2)
- pay (2)
- maven (2)
- fastdfs (2)
- ELK (2)
- logstash (1)
- rocketMQ (0)
- jmeter (0)
- 测试 (0)
- softether (0)
- util (0)
最新评论
-
ice24:
ftp client applet -
wuzijingaip:
499700647 写道你好,看了您的文章《ftp clien ...
ftp client applet -
zxcv193188:
感谢楼主
java JMF的使用 -
499700647:
你好,看了您的文章《ftp client aplet》很受启发 ...
ftp client applet -
JoeBaby_:
非常感谢,看文档的时候觉得JMF好难的样子,但是看过代码后思路 ...
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); } }
- JMF_demo.rar (9.1 MB)
- 下载次数: 3469
评论
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 线程池
2018-08-07 11:26 327package com.fx.test; impor ... -
ftppool-demo
2018-05-24 09:16 322ftp pool demo -
java 遍历文件夹和文件
2018-03-28 11:39 472public static void trave ... -
java 流写入本地文件
2018-03-27 10:17 818private static void wr ... -
java 字符串转为流
2018-03-27 10:03 486public static Inpu ... -
ftputil + ftpclientPOOL
2018-03-22 14:39 390ftputil + ftpclientPOOL -
微信支付网上找的Demo
2017-06-22 17:58 316微信支付网上找的Demo,当时做支付时有些地方就参考了他,作者 ... -
Jsoup get post
2016-12-21 17:11 384package com.test; import ... -
java 面包屑导航
2016-10-24 15:08 481类似面包屑导航,抛砖引玉 后台维护一个访问路径的列表 ... -
获取n年前日期
2016-03-08 14:42 518/** * 获取n年前日期 ... -
httpclient访问需要登录才能访问的数据
2015-04-23 22:10 577package com.grkj.modules.tree ... -
jsp获取uri 以及绝对路径
2014-07-01 17:06 516得到从根路径到当前jsp页面的路径: request.ge ... -
JAVA导出PDF实例
2014-05-13 14:39 889一、直接导出成PDF Java代码 ... -
Java HTML直接导出PDF
2014-05-13 12:18 1223Java HTML直接导出PDF 对于java中如何从h ... -
java生成PDF
2014-05-13 12:11 478一、前言 在企业 ... -
linux下JAVA环境变量的设置
2014-03-21 14:05 537在终端中输入命令 vi /etc/profile.d/j ... -
Java读取Excel内容
2014-02-20 16:34 544所需jar 下后面 import java.io.B ... -
myeclipse9
2012-08-28 16:13 696import java.io.BufferedReader; ... -
java 打印
2012-08-07 18:03 928import java.awt.BasicStroke; ... -
java 数独游戏生成
2012-07-18 09:47 761/** * 数独程序 */ public c ...
相关推荐
标题中的“JAVA 使用JMF调用摄像头”是指在Java编程环境中,通过Java Media Framework (JMF)这个开源框架来访问和操作计算机的摄像头设备。JMF是Java平台上的多媒体处理框架,它允许开发者处理音频、视频等多媒体...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架。这个下载包包含了与`java.media`相关的组件,主要用于开发能够播放、捕获、处理和流化音频、视频的应用程序。下面将详细介绍JMF的核心功能、...
Java JMF(Java Media Framework)音乐播放器是一个基于Java编程语言的多媒体应用程序,它利用了JMF库来处理音频和视频内容。Java JMF提供了一种标准的方式来集成、播放和控制多种媒体格式,使得开发者可以轻松地在...
在Java中,由于JMF默认不支持MP3格式,因此需要额外的插件来处理这种广泛使用的音频格式。`mp3plugin.jar`文件就是这样一个插件,它扩展了JMF的功能,使得开发者能够在Java环境中流畅地播放MP3音乐。 JMF的工作原理...
这个“JMF.rar”压缩包包含了一份关于Java JMF的中文教程,旨在帮助开发者理解和使用这个强大的工具。下面将详细阐述JMF的主要概念、功能及其在Java开发中的应用。 JMF全称为Java Media Framework,它是由Sun ...
总的来说,“java的JMF播放音乐示例”是一个基础的多媒体处理应用,它教导开发者如何在Java环境中使用JMF来播放音乐。通过这个示例,学习者可以了解到文件操作、用户输入处理以及多媒体框架的基本使用。然而,为了...
"JMF使用问题总结"这个主题主要聚焦于在使用JMF播放MP3文件时可能遇到的问题及其解决方法。 首先,让我们了解JMF的基本概念。JMF是一个可扩展的平台,提供了对多种多媒体格式的支持,包括音频和视频。它通过注册...
**Java Media Framework (JMF) 是一种开源框架,专门用于处理多媒体内容,如音频和视频。在本项目中,"JMF版Java音乐播放器" 是一个基于Java Media Framework开发的音乐播放应用,旨在提供类似酷我音乐盒的用户体验...
2. **注册服务提供者接口(SPI)**:JMF使用SPI机制来发现和加载支持的媒体格式。开发者可以通过实现`javax.media.Manager`中的`ServiceProvider`接口来添加对新媒体格式的支持。 3. **媒体播放**:`Player`接口是...
在"java jmf摄像头控件的运用"这个主题中,我们将深入探讨如何使用JMF来控制和操作摄像头。 首先,JMF允许开发者在Java应用程序中集成媒体播放、录制以及流媒体功能。它提供了对多种媒体格式的支持,并且可以通过...
需要注意的是,在使用JMF时,应当确保所使用的Java虚拟机(JVM)版本和操作系统与JMF兼容。此外,JMF可能不会在所有操作系统上都能完美运行,特别是对于较新的操作系统版本,可能需要额外的配置或更新。 通过理解和...
在“Java用JMF拍照”的主题下,我们将深入探讨如何在Windows 7环境下安装JMF,以及如何使用Java通过JMF来捕获摄像头图像。 首先,让我们了解JMF的安装过程: 1. **下载JMF**: 需要从Oracle官方网站或者第三方可靠...
### 经典Java媒体框架JMF详解 #### JMF简介 Java Media Framework(简称JMF)是Sun Microsystems为Java平台开发的一个多媒体框架。它提供了一套API,使得开发者能够在Java Applet或应用程序中轻松地播放多种格式的...
7. **引入JMF开发**: 要在Java项目中使用JMF,首先需要将这些Jar包添加到项目的类路径中。然后,通过导入相应的类和接口,如`javax.media.Manager`和`javax.media.Player`,可以创建并控制媒体播放器。此外,还需要...
Java Media Framework(JMF,Java 媒体框架)是Java平台上的一个开源组件,用于处理音频、视频和多媒体数据。这个框架允许开发者播放、捕获、处理和流化多种媒体格式。在Java应用程序中集成多媒体功能时,JMF扮演着...
7. **跨平台性**:作为Java的一部分,JMF具有良好的跨平台兼容性,可以在运行Java的任何操作系统上使用,如Windows、Linux和Mac OS。 在安装的文件“jmf-2_1_1e-windows-i586.exe”中,包含了JMF2.1的Windows 32位...
JMF  API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。  Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个...
【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放MP3格式的音乐文件。这个播放器不仅具备基础的播放功能,如播放、暂停、停止和音量控制,还支持列表播放,用户可以...