- 浏览: 295831 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
狂盗一枝梅:
...
POI 实现合并单元格以及列自适应宽度 -
fireinjava:
补充一点:要在写完所有单元格后再调用自适应这个方法。
for ...
POI 实现合并单元格以及列自适应宽度 -
a114d:
还自带广告,哈哈,这个文件现在怎么不能下载,只是在线浏览呢?
使用ant部署eclipse开发的web工程到tomcat -
唐敬原:
非常感谢,很好!!!!!!!!!!
使用pinyin4j获取汉字拼音首字母或全拼 -
心之野海:
我的一个都检测不出来
JMF捕获摄像头数据存入本地磁盘(java 多媒体)
首先需要说明的是JMF是个什么东西?这个简单问下百度,在百度里输入JMF后看百度百科就很清楚了,我就不啰嗦了,啰嗦也没人家说的好。哈哈
接下来就说它的安装了,我下载的是2.1.1e版本的,在windows安装直接默认就行了。下载去官网(google里输入JMF)。
下来就说正事了,功能就说用电脑本机上的摄像头采集数据然后存放成视频文件就ok了
好了看代码
先是启动类
public class MainClass { /** * 程序运行入口 * @param args */ public static void main(String[] args) { MainFrame frmMain = new MainFrame(); try { //设置主窗体的样式 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); SwingUtilities.updateComponentTreeUI(frmMain); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } //设置窗口位于屏幕中央 frmMain.setLocationRelativeTo(null); frmMain.setVisible(true); } }
再就是主窗体了,都有注释,就不再多做解释了
public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; private CaptureDeviceInfo captureDevice; private Component visualComponent; private Processor processor; private Player player; private DataSink fileWriter; private FormatControl formatControl; private JPanel pnlVideo = new JPanel(new BorderLayout()); JPanel contentPane; JPanel pnlControl = new JPanel(); JButton btnStart = new JButton("开始采集"); JButton btnStop = new JButton("停止采集"); JFileChooser fileChooser = new JFileChooser(); public MainFrame() { super("视频采集软件"); try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); SwingUtilities.updateComponentTreeUI(this); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } catch (InstantiationException e1) { e1.printStackTrace(); } catch (IllegalAccessException e1) { e1.printStackTrace(); } catch (UnsupportedLookAndFeelException e1) { e1.printStackTrace(); } contentPane = (JPanel) this.getContentPane(); //获得视频设备信息 this.captureDevice = getCaptureDeviceInfo(); // try { //获得数据源 DataSource source = Manager.createDataSource(captureDevice.getLocator()); //克隆数据源 DataSource cloneableSource = Manager.createCloneableDataSource(source); //创建player player = Manager.createRealizedPlayer(((SourceCloneable)cloneableSource).createClone()); //获取默认格式,我这里是RGB formatControl = (FormatControl) player.getControl("javax.media.control.FormatControl"); Format defaultFormat = formatControl.getFormat(); //设置输出文件的格式,这里是avi FileTypeDescriptor outputType = new FileTypeDescriptor(FileTypeDescriptor.MSVIDEO); ProcessorModel processorModel = new ProcessorModel(cloneableSource, new Format[]{ defaultFormat }, outputType); //创建一个处理器 processor = Manager.createRealizedProcessor(processorModel); } catch (Exception e) { processException(e); } //展示图形的swing组件 visualComponent = player.getVisualComponent(); if (visualComponent!=null) { pnlVideo.add(visualComponent); contentPane.add(pnlVideo); } // btnStop.setEnabled(false); pnlControl.add(btnStart); pnlControl.add(btnStop); contentPane.add("South", pnlControl); //点击开始事件 btnStart.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { start(); } }); btnStop.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { stop(); } }); // pack(); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); } /** * 点击开始采集 */ private void start() { String locatorString = getLocatorString(); if(locatorString==null) { return; } //开始采集不可用 btnStart.setEnabled(false); //从处理器中拿到数据源 DataSource source = processor.getDataOutput(); MediaLocator dest = new MediaLocator( locatorString ); try { //本地文件传输 fileWriter = Manager.createDataSink(source, dest); fileWriter.open(); fileWriter.start(); } catch (Exception e) { processException(e); } processor.start(); player.start(); btnStop.setEnabled(true); } private void stop() { btnStop.setEnabled(false); //停止捕获 player.stop(); processor.stop(); try { fileWriter.stop(); fileWriter.close(); } catch (IOException e) { processException(e); } btnStart.setEnabled(true); } private void processException(Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(this, e.toString(), "错误", JOptionPane.ERROR_MESSAGE); System.exit(0); } /** * 构建输出路径的URL * @return */ private String getLocatorString() { if( JFileChooser.APPROVE_OPTION != fileChooser.showSaveDialog(this)) { return null; } File file = fileChooser.getSelectedFile(); if (file==null) { return null; } String locatorString = file.getAbsolutePath(); if( !locatorString.endsWith(".avi" )) { locatorString += ".avi"; } locatorString = "file://" + locatorString; return locatorString; } /** * 获得截取视频的设备信息 * @return 设备信息 */ private CaptureDeviceInfo getCaptureDeviceInfo() { //定义视频格式 Format videoFormat = new VideoFormat(VideoFormat.YUV); @SuppressWarnings("unchecked") //获得满足条件的视频设备列表 Vector<CaptureDeviceInfo> deviceList = CaptureDeviceManager.getDeviceList(videoFormat); if(deviceList.size()<1) { JOptionPane.showMessageDialog(this, "未检测到视频输入设备。", "错误", JOptionPane.ERROR_MESSAGE); System.exit(0); } String[] deviceNames = new String[deviceList.size()]; for (int i = 0; i < deviceList.size(); i ++ ) { deviceNames[i] = deviceList.get(i).getName(); } String deviceName = (String) JOptionPane.showInputDialog(this, "请选择视频输入设备", "请选择", JOptionPane.QUESTION_MESSAGE, null, deviceNames, deviceNames[0]); if (deviceName==null) { System.exit(0); } // CaptureDeviceInfo captureDevice; for (int i = 0; i < deviceList.size(); i ++ ) { captureDevice = deviceList.get(i); if( deviceName.equals(captureDevice.getName()) ) { return captureDevice; } } return null; } }
ok,经过测试OK,以作记录!最后将程序和JMF安装包附上。
- JMF_CaptureVedio.7z (6.7 KB)
- 下载次数: 443
- jmf-2_1_1e-windows-i586.7z (5 MB)
- 下载次数: 256
评论
4 楼
心之野海
2014-05-10
我的一个都检测不出来
3 楼
心之野海
2014-05-09
怎么下载不了呀,楼主
2 楼
chikk
2013-02-06
请教楼主请教楼主请教楼主
1 楼
chikk
2013-02-06
我的摄像头有两个,但为什么设备数只能检测到一个?
发表评论
-
poi 合并重复单元格以及冻结行列
2014-10-31 11:49 2117在实际开发中,我们经常会遇到Excel的合并重复单元格,如 ... -
freemark 工具类
2014-06-12 21:42 1259freemark工具类,根据传入的数据模型,生成对应的模板文 ... -
J2EE 文件下载工具类
2014-06-12 21:20 879一个简单的下载类,在此记录 package com.sgc ... -
POI生成Excel工具类
2014-06-12 21:07 1956废话不说,直接上代码 package com.sgcc. ... -
XML生成实体对象
2014-06-12 21:05 1586在此记录一个xml的工具类,该类可以读取xml文件,存入磁盘 ... -
POI 实现合并单元格以及列自适应宽度
2012-07-27 13:32 70889POI是apache提供的一个读写Excel文档的开源组件 ... -
java 获取外网地址
2012-03-09 11:25 3595在项目中,我们有时需要获取外网的地址,这里指的地址是公网的 ... -
Eclipse 3.6.2 反编译插件jad的配置说明
2012-01-18 11:27 16651.将jad.exe文件放入java的bin目录下,如: ... -
关于java反射的一点应用
2011-10-28 16:32 1359这里记录我在项目中写的一个小应用,用在了数据库的帮助类中,用于 ... -
eclipse中工程右键点击validate后处理方法
2011-02-24 15:16 2025当在eclipse中的工程中点击了validate后,大篇的红 ... -
java设计模式之外观模式
2010-12-17 11:16 1621这一节说说外观模式,这个模式还是很简单的,平时也许我们都用上了 ... -
java设计模式之工厂模式
2010-12-17 10:33 911这一节就说下工厂模式,实例代码的构建环境是学习雷锋同志的优良品 ... -
java设计模式之代理模式
2010-12-16 16:43 1136这一节说说代理模式,我的代码的模拟场景是追MM,感兴趣吧,块看 ... -
java设计模式之策略模式
2010-12-16 16:27 1158这一节主要说明下策略模式的使用。同样,我们模拟计算器的场景。和 ... -
java设计模式之简单工厂模式
2010-12-16 16:17 1284为什么要用设计模式,这个我就不说了,原因很简单,因为它就是“美 ... -
使用pinyin4j获取汉字拼音首字母或全拼
2010-11-19 13:14 15287pinyin4j是一个开源项目,使用它可以很容易的获取汉字的拼 ... -
java swing 定时任务小工具(java窗体样式可改变)
2010-10-09 13:31 4509最近以来,由于一直比较闲,所以有时间干一些事情,所以就有了这个 ... -
java连接access数据库,采用相对路径
2010-10-08 14:32 1849二话不说。就是java如何连接access数据库,为什么要写这 ... -
dom4j对XML文件的操作
2010-09-28 12:58 1582XML(Extensible Markup Language) ... -
java中路径的获取方式总结
2010-09-27 18:13 1207得到classpath和当前类的绝对路径的一些方法获得CLAS ...
相关推荐
总的来说,JMF捕获摄像头的示例是一个了解Java中多媒体处理的好起点,特别是对于那些需要在老版本Java环境中工作的开发者。然而,随着技术的进步,考虑使用更新的库和框架可能会带来更好的性能和兼容性。
尽管JMF有一定的学习曲线,但它仍然是理解Java多媒体编程的一个重要切入点。开发者需要熟悉JMF的API,理解如何查找、控制和处理来自摄像头的数据,才能成功实现这样的程序。同时,也要注意随着技术的发展,选择更...
JMF是Java平台上的多媒体处理框架,它允许开发者处理音频、视频等多媒体数据,包括捕获、播放、编码和解码等操作。 首先,要理解JMF的基本概念。JMF是一种服务提供者接口(SPI),它定义了处理多媒体数据的一系列...
### Java中利用JMF编写摄像头拍照程序实例 #### 背景与介绍 在现代软件开发中,多媒体处理是一项非常重要的技术。Java Media Framework (JMF) 是Sun ...希望本文能帮助你在Java多媒体编程领域迈出坚实的一步。
### JAVA读取摄像头...通过上述分析,我们可以看到通过 JMF 在 Java 中实现摄像头捕获和图像处理等功能的具体实现方法和技术细节。这不仅适用于开发桌面应用,还可以扩展应用于服务器端或其他复杂的多媒体处理场景。
Java多媒体框架JMF(Java Media Framework)是Sun Microsystems公司开发的一个开源框架,主要用于处理音频、视频和流媒体数据。JMF2.1是这个框架的一个版本,它为Java开发者提供了在应用程序中集成多媒体功能的能力...
Java Media Framework (JMF) 是一个开源的Java平台框架,用于处理多媒体数据,包括音频、视频和流媒体。在这个“jmf调用摄像头成功例子”中,我们将深入探讨如何使用JMF来访问和捕获来自计算机摄像头的视频流。这个...
Java Media Framework (JMF) 是Java平台上的多媒体处理框架,它提供了对音频、视频捕获和播放的支持。在调用摄像头方面,JMF提供了一个名为`CaptureDevice`的接口,通过这个接口可以获取摄像头设备并进行视频流的...
1. 示例代码:演示如何使用JMF API捕获摄像头视频和麦克风音频。 2. 讲解文档:解释代码的工作原理和关键步骤。 3. 测试用例:用于验证代码功能的实例。 4. 运行脚本:可能包含启动和停止捕获及播放的命令。 学习和...
JMF捕获音频和视频.wps
总的来说,Java利用JMF编写摄像头拍照程序涉及到的主要知识点有:JMF框架的使用,摄像头设备的管理和访问,视频帧的捕获,图像数据的转换以及文件的保存操作。虽然JMF已经过时,但理解这些基本概念对于学习其他...
总的来说,"java jmf摄像头控件的运用"涉及到Java编程、多媒体处理、摄像头操作等多个技术领域,是学习和实践Java多媒体应用的好起点。通过学习和实践,开发者能够构建自己的摄像头控制应用程序,满足各种多媒体需求...
1. **Java Media Framework (JMF)**: JMF是Java平台的标准组件,用于处理多媒体数据,包括音频和视频。在Java中捕获摄像头图像时,JMF是一个常用的框架,它提供了一个接口来注册和管理不同的媒体源,如摄像头。 2. ...
JMF 是一个开源平台,允许开发者创建、播放和捕获多种媒体数据,而JavaFX则包含更现代和丰富的UI组件,其中包括对多媒体的支持。 1. **使用Java Media Framework (JMF)** JMF 提供了API来访问和控制多媒体设备,如...
学习和理解这个示例,对于熟悉Java多媒体编程和JMF的使用至关重要。它可以帮助开发者了解如何在Java环境中集成摄像头功能,为后续的多媒体应用开发打下基础。同时,也可以借此机会研究如何扩展此示例,实现网络传输...
1. **JMF介绍**:JMF是一个开源的API,由Sun Microsystems开发,用于在Java应用程序中实现多媒体播放、捕获和处理。它支持多种媒体格式,包括音频、视频和流媒体。 2. **摄像头识别**:JMF提供了接口和类,可以用来...