您好,登錄后才能下訂單哦!
今天學習用JAVA中的JMF來打開攝像頭,這個小程序對我來說還是有點難度的。然后我在網上找的一些資料,網上的資料很多而且比較雜,對于我們新人來說,沒有分辨能力,走了很多彎路。下面我把我的學習過程展示出來。
1.搭建環境
我的電腦是win7 64位的;然后在orcale 官網下載JDK (在百度搜索JDK下載)jdk-8u92-windows-i586.exe(JDK必須是32位的,至少在我電腦上是這樣的,我安裝64位的始終沒有成功,最后找出問題來就是JMF 是32位的,配套的JDK也必須是32位的。我是這樣理解的.呵呵);然后下載JMF(直接在百度搜索JMF下載,能直接跳轉到oracle官網的JMF下載,比直接在oracle官網上去找方便很多)jmf-2_1_1e-windows-i586.exe,JMF建議安裝在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 代表配置成功
然后就是JMF : 打開JMF安裝目錄下的jmfregistry.exe程序
安裝后都需要重新啟動電腦才可以用;會在桌面生成一個JMStudio的快捷方式,打開它
File > Capture 安裝成功會有音頻視頻等,然后就可以通過攝像頭看見自己了;到這里我們的運行環境就安裝好了,接下來我們就是寫代碼來調用攝像頭了;
3. 代碼
用記事本或者notepad++ 就可以的,notepad++ 有一個插件NppAStyle插件可以格式化java代碼。
JMF攝像頭基本原理及過程
獲取攝像頭信息 》 創建攝像頭和捕捉數據流 》 創建窗體及面板 》 把捕捉的數據流加載到窗體中播放
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變量。 player是media包中的一個類
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);
}
}
雖然這是一個比較簡單的小程序,但是我花了很多時間來弄,在這過程中也學會了一些東西,剛開始的時候什么都不會,陪伴我的還好有電腦,一些不懂的問題都是在google&百度上找的,以至于源碼也是。這是的第一篇博文,上述中肯定會有很多錯誤,歡迎大家指出;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。