JMF(Java Media Framework)是Java平臺使用攝像頭、麥克風等媒體設備的應用程序框架,但到了2.1.1e就不再更新,在Windows 7 X64上還能正常運行,只是安裝的界面讓你感覺回到了Windows98的時代。
不過年代久遠的東西,雖然還能用,但可能會遇到一些奇怪的問題,折騰了兩個月,發現了兩個比較大的問題:
第一個是在Windows 7 x64上提示攝像頭初始化失敗的問題。這個問題很奇怪,電腦剛開機的時候可以順利找到一次攝像頭并正常操作,但是第二次就會提示攝像頭初始化失敗。有人提出的解決方法是安裝一個叫ManyCamera的程序,這個程序可以把一個攝像頭供多個程序同時使用,其實就等于中間加了一層轉換,效果會有點差別,免費版還會加上水印,要求比較高的人可能會不爽,但是目前找不到其他辦法。
第二個是在程序中找不到攝像頭,不光找不到攝像頭,其他媒體設備通通找不到,使用以下語句:
vector = CaptureDeviceManager.getDeviceList ( null )
按照文檔說明是返回所有媒體設備,但每次vector都是null。
在Eclipse中運行又能正常,導出成jar之后運行就會找不到攝像頭。
原因在于找不到jmf.properities文件,該文件包含所有檢測到的媒體設備的信息,
最簡單的解決方法就是把JMF安裝目錄下lib子目錄中的jmf.properties文件復制到最后運行的jar所在的目錄,不過如果攝像頭改過的話,重新檢測后要把新的文件復制到jar目錄,因為檢測到的媒體設備信息都會存放在JMF安裝目錄里面的jmf.properties文件里。
雖然問題解決了,但是還是不明白為何在Eclipse中可以正常運行,導出jar后運行卻找不到攝像頭,即使把JMF所有jar和lib目錄都加入系統的CLASSPATH環境變量里還是不行。
另外,JMF安裝程序會自動把它的jar和lib目錄加入系統的%CLASSPATH%環境變量,但是如果你卸載了再重新安裝到其他目錄,并不會改變%CLASSPATH%的值,需要手動修改。不過這個環境變量似乎沒啥用處。
最好不要把JMF安裝到默認的Program Files目錄,可能會運行不了,安裝到短目錄會比較保險,它似乎還是只認Dos時代的8.3目錄結構,但偏偏又默認安裝到Program Files里面。