JMF(Java Media Framework)是Java媒體框架,包含了許多用於處理多媒體的API可讓基於JAVA的應用實現音頻、視頻的捕捉、處理、播放、傳輸等功能。利用它,能夠實現音、視頻播放,網絡視頻聊天、視頻會議等功能。不說了,開講:html
一、下載地址:http://www.oracle.com/technetwork/java/javase/download-142937.html ,自從sun被oracle 收購後,網址都改爲oracle.com了,網上的 sun.com的網址都不對;我下載的版本是:jmf-2_1_1e-windows-i586java
二、安裝:按提示一步步安裝下去就能夠了,安裝後要重啓;安裝完畢後,在你的JDK安裝目錄\jre\lib\ext下,會多出兩個文件:jmf.jar和sound.jarwindows
三、測試攝像頭:安裝完畢後,在桌面會多一個"JMStudio"的快捷方式,運行它,點擊"File->Capture"菜單,若是啓動攝像頭成功,說明你安裝jmf成功。若是失敗的話,按網上的說法,必須是安裝32位的JDK才能夠,由於JMF只支持32位JDK。因爲我本機沒有安裝64位JDK,因此這點沒有驗證。網絡
四、編寫JAVA代碼打開電腦攝像頭,如下代碼也是從網上修改而來,可是必須作如下修改才運行正常:oracle
a、必須先初始化攝像頭、再設置Jframe的一些屬性並顯示,若是前後順序顛倒的話,則窗體上不會正確顯示攝像頭。(我本機64位win7 +jdk1.6 );框架
b、在eclipse中選擇jdk的時候,最好選擇安裝jmf時所識別的jdk,不然可能報錯。網上的解決方式:將jmf安裝目錄\lib目錄下的jmf.jar,sound.jar,mediaplayer.jar三個文件導入工程,目的是要引入該目錄下的jmf.propertieseclipse
ok,上代碼,我本機測試經過的:測試
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.Vector;this
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.swing.JFrame;視頻
public class CameraTest extends JFrame {
public CameraTest() throws Exception {
//先啓動攝像頭,再作後續的初始化窗體,可保證正確顯示攝像頭
initCapture();
//設置窗體的一些屬性
this.setTitle("CaptureTest");
this.setBounds(500, 100, 800, 500);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
/**
* 初始化攝像頭
*/
private void initCapture() throws Exception {
//獲取全部音頻、視頻設備
Vector<javax.media.CaptureDeviceInfo> deviceList = javax.media.CaptureDeviceManager.getDeviceList(null);
//獲取視頻設備,視頻設備以vfw打頭
CaptureDeviceInfo cameraDevice = null;
for(CaptureDeviceInfo cameraDeviceTmp :deviceList){
if (cameraDeviceTmp.getName().startsWith("vfw")) {
cameraDevice = cameraDeviceTmp;
break;
}
}
if(cameraDevice == null){
throw new Exception("找不到攝像頭設備");
}
//建立視頻播放器
MediaLocator ml = cameraDevice.getLocator();
Player player = Manager.createRealizedPlayer(ml);
if (player == null){
throw new Exception("建立攝像頭播放器失敗");
}
//播放視頻
player.start();
//將播放器加入窗體
Component comp = null;
if ((comp = player.getVisualComponent()) != null)
add(comp, BorderLayout.CENTER);
}
public static void main(String[] args) {
try {
CameraTest mc = new CameraTest(); } catch (Exception e) { e.printStackTrace(); } } }