- 浏览: 318598 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 287package com.fx.test; impor ... -
ftppool-demo
2018-05-24 09:16 274ftp pool demo -
java 遍历文件夹和文件
2018-03-28 11:39 418public static void trave ... -
java 流写入本地文件
2018-03-27 10:17 758private static void wr ... -
java 字符串转为流
2018-03-27 10:03 448public static Inpu ... -
ftputil + ftpclientPOOL
2018-03-22 14:39 349ftputil + ftpclientPOOL -
微信支付网上找的Demo
2017-06-22 17:58 264微信支付网上找的Demo,当时做支付时有些地方就参考了他,作者 ... -
Jsoup get post
2016-12-21 17:11 353package com.test; import ... -
java 面包屑导航
2016-10-24 15:08 436类似面包屑导航,抛砖引玉 后台维护一个访问路径的列表 ... -
获取n年前日期
2016-03-08 14:42 490/** * 获取n年前日期 ... -
httpclient访问需要登录才能访问的数据
2015-04-23 22:10 540package com.grkj.modules.tree ... -
jsp获取uri 以及绝对路径
2014-07-01 17:06 467得到从根路径到当前jsp页面的路径: request.ge ... -
JAVA导出PDF实例
2014-05-13 14:39 846一、直接导出成PDF Java代码 ... -
Java HTML直接导出PDF
2014-05-13 12:18 1136Java HTML直接导出PDF 对于java中如何从h ... -
java生成PDF
2014-05-13 12:11 437一、前言 在企业 ... -
linux下JAVA环境变量的设置
2014-03-21 14:05 493在终端中输入命令 vi /etc/profile.d/j ... -
Java读取Excel内容
2014-02-20 16:34 510所需jar 下后面 import java.io.B ... -
myeclipse9
2012-08-28 16:13 665import java.io.BufferedReader; ... -
java 打印
2012-08-07 18:03 894import java.awt.BasicStroke; ... -
java 数独游戏生成
2012-07-18 09:47 715/** * 数独程序 */ public c ...
相关推荐
java多媒体框架JMF2.1java多媒体框架JMF2.1java多媒体框架JMF2.1java多媒体框架JMF2.1java多媒体框架JMF2.1
java JMF的配置方法 文档, 适合初学者使用!!!!!!! 加油!!
java的JMF包和mp3播放插件,其中jmf包是全平台通用的
jmf例子,jmf例子,jmf例子,要去下载安装jmf
JMF  API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。  Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个...
利用java组件jmf编写的一个简单的音乐播放器
java (JMF)媒体框架包
NULL 博文链接:https://tzz6.iteye.com/blog/2280571
Java术语,意为Java媒体框架(JMF)。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。 JMF实际上是Java的一个类包。JMF 2.1.1技术提供了...
JMF的api java 多媒体技术应用。主要用在java开发视频通信方面。很难找到的哦
java jmf摄像头控件的运用
经典Java媒体框架JMF,可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件
可以搜索E盘里所有的MP3文件,将其播放,只要在控制台输入数字,就可以播放音乐,是学习java的JMF的简单示例。代码可运行。
jmf jar包
一个利用JMF实现的音乐盒,能够同步歌词显示和更换皮肤,仿酷我音乐盒
java 媒体处理方面的 java media framework 所需的jar包 引入后便可 jmf开发
NULL 博文链接:https://skymr.iteye.com/blog/1811000
java jmf api 英文版网页版的,希望对大家有用
Java术语,意为Java媒体框架(JMF)。该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。
如果你想编写能播放视频的Java程序,必须下载sun公司的JMF2.1,它为我们提供了编写多媒体必须的包:java.media