热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用JAVA中的JMF来打开摄像头

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

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

1.搭建环境

   我的电脑是win7 64位的;然后在orcale 官网下载JDK  (在百度搜索JDK下载)jdk-8u92-windows-i586.exeJDK必须是32位的,至少在我电脑上是这样的,我安装64位的始终没有成功,最后找出问题来就是JMF 32位的,配套的JDK也必须是32位的。我是这样理解的.呵呵);然后下载JMF(直接在百度搜索JMF下载,能直接跳转到oracle官网的JMF下载,比直接在oracle官网上去找方便很多)jmf-2_1_1e-windows-i586.exeJMF建议安装在jdk下,这样免去了配置环境变量。

2.环境配置与测试

   JDK和JMF安装完毕,然后就是JDK环境变量配置,依次打开:计算机右键属性>高级系统设置>环境变量>系统变量  1)新建JAVA_HOME变量  就是刚才jdk的安装路径D:\Application\java\jdk1.6.0_25 

2)PATH变量   %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin  

3)CLASSPATH变量  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径)    检验:WIN+R  >  CMD   >  javac   java  java -version  代表配置成功  

wKiom1d5412zMZtWAACoU6kBoOI884.png-wh_50

   然后就是JMF  : 打开JMF安装目录下的jmfregistry.exe程序

wKioL1d5417QpM8pAAD-UOMk1WI555.png-wh_50

        

 

   安装后都需要重新启动电脑才可以用;会在桌面生成一个JMStudio的快捷方式,打开它

File > Capture   安装成功会有音频视频等,然后就可以通过摄像头看见自己了;到这里我们的运行环境就安装好了,接下来我们就是写代码来调用摄像头了;

 

3.代码部分

   用记事本或者notepad++  就可以的,notepad++ 有一个插件NppAStyle插件可以格式化java代码。

JMF摄像头基本原理及过程:

 

 1)获取摄像头信息

 2)创建摄像头和捕捉数据流

 3)创建窗体及面板

 4)把捕捉的数据流加载到窗体中播放

import java.awt.BorderLayout;

import java.awt.Component;

import javax.media.*;//包含所有media代码

import javax.swing.JFrame; //通过JFrame来创建窗体

import javax.swing.JPanel; //一个容器类

public class Camera extends JFrame { //继承窗体的框架

public  static Player player = null; //定义一个player变量。 playermedia包中的一个类

private CaptureDeviceInfo deviceInfo = null;   //定义管理器的截取设备注册信息

private MediaLocator mediaLocator = null;

private Component compOnent= null;

private JPanel vedioPanel = null;

String   str = "vfw:Microsoft WDM Image Capture (Win32):0";    //获取本地摄像头的字符串

public Camera() {

init();

}

public void init() {

deviceInfo = CaptureDeviceManager.getDevice(str);  //根据字符串获取采集设备(摄像头)的引用

mediaLocator = deviceInfo.getLocator(); //从CaptureDevicesInfo对象中获取MediaLocator对象,然后用它来创建一个DataSource数据源对象;

//获取采集设备的定位器的引用,需要根据此引用来创建视频播放器

 

try {

player = Manager.createRealizedPlayer(mediaLocator);// 利用mediaLocator 获取一个player ,创建一个player对象

compOnent= player.getVisualComponent(); //player 对象的图像部件,在此部件上可以播放多媒体图像

if (component != null) {

/*

  设置窗体的一些属性

  */

vedioPanel = new JPanel();//面板容器

vedioPanel.add(component, BorderLayout.NORTH);

 

this.add(vedioPanel);

this.pack();    // 自动分配窗体大小

this.setResizable(false);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);  //设置窗体的关闭

this.setVisible(true);

player.start();  //播放捕获来的数据流

}

} catch(Exception e) {

e.printStackTrace();

}

}

 

public static void main(String[] args) {//主函数

new Camera();

}

}

了把这个东西搞懂,我把这个程序拆分开了。一部分一部分的弄清楚。这是一个设备信息获取的小程序。因为这个程序会用到摄像头,所以第一步就是获取。

import javax.media.*;//导入媒体库

public class INFO {

   public static void main(String[] args) {

CaptureDeviceInfo deviceInfo = null;

String   str2   =   "vfw:Microsoft WDM Image Capture (Win32):0";    //获取本地摄像头的字符串

deviceInfo = CaptureDeviceManager.getDevice(str2);

System.out.println("本地摄像头的信息:"+deviceInfo);

}

}

 

     窗体的创建:将获取的视频流添加到窗体中,显示出来。

import java.awt.Frame;

public class frame{

    public static void main(String args[]){

        Frame fr = new Frame("窗口的创建");

        fr.setSize(600,500);//设置大小

        fr.setVisible(true);//设置窗口可见性

    }

}

 

 

     虽然这是一个比较简单的小程序,但是对于我这么一个初学者来说,真的是困难重重。因此我花了很多时间来弄这个程序。在这过程中也学会了一些东西,刚开始的时候什么都不会,陪伴我的还好有电脑,一些不懂的问题就在网上找的。以至于源码也是。上述中肯定会有很多不足,欢迎大家指出。

 

推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java值传递机制的说明及示例代码
    本文对Java值传递机制进行了详细说明,包括形参和实参的定义和传递方式,以及通过示例代码展示了交换值的方法。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有