JMF(Java Media Framework)是Java平臺(tái)使用攝像頭、麥克風(fēng)等媒體設(shè)備的應(yīng)用程序框架,但到了2.1.1e就不再更新,在Windows 7 X64上還能正常運(yùn)行,只是安裝的界面讓你感覺(jué)回到了Windows98的時(shí)代。
不過(guò)年代久遠(yuǎn)的東西,雖然還能用,但可能會(huì)遇到一些奇怪的問(wèn)題,折騰了兩個(gè)月,發(fā)現(xiàn)了兩個(gè)比較大的問(wèn)題:
第一個(gè)是在Windows 7 x64上提示攝像頭初始化失敗的問(wèn)題。這個(gè)問(wèn)題很奇怪,電腦剛開(kāi)機(jī)的時(shí)候可以順利找到一次攝像頭并正常操作,但是第二次就會(huì)提示攝像頭初始化失敗。有人提出的解決方法是安裝一個(gè)叫ManyCamera的程序,這個(gè)程序可以把一個(gè)攝像頭供多個(gè)程序同時(shí)使用,其實(shí)就等于中間加了一層轉(zhuǎn)換,效果會(huì)有點(diǎn)差別,免費(fèi)版還會(huì)加上水印,要求比較高的人可能會(huì)不爽,但是目前找不到其他辦法。
第二個(gè)是在程序中找不到攝像頭,不光找不到攝像頭,其他媒體設(shè)備通通找不到,使用以下語(yǔ)句:
在Eclipse中運(yùn)行又能正常,導(dǎo)出成jar之后運(yùn)行就會(huì)找不到攝像頭。
原因在于找不到j(luò)mf.properities文件,該文件包含所有檢測(cè)到的媒體設(shè)備的信息,最簡(jiǎn)單的解決方法就是把JMF安裝目錄下lib子目錄中的jmf.properties文件復(fù)制到最后運(yùn)行的jar所在的目錄,不過(guò)如果攝像頭改過(guò)的話,重新檢測(cè)后要把新的文件復(fù)制到j(luò)ar目錄,因?yàn)闄z測(cè)到的媒體設(shè)備信息都會(huì)存放在JMF安裝目錄里面的jmf.properties文件里。
StackOverflow里面有個(gè)人對(duì)這個(gè)問(wèn)題解釋得比較清楚:
http://stackoverflow.com/questions/8768142/java-capturedevicemanagergetdevicelist-is-empty
雖然問(wèn)題解決了,但是還是不明白為何在Eclipse中可以正常運(yùn)行,導(dǎo)出jar后運(yùn)行卻找不到攝像頭,即使把JMF所有jar和lib目錄都加入系統(tǒng)的CLASSPATH環(huán)境變量里還是不行。
另外,JMF安裝程序會(huì)自動(dòng)把它的jar和lib目錄加入系統(tǒng)的%CLASSPATH%環(huán)境變量,但是如果你卸載了再重新安裝到其他目錄,并不會(huì)改變%CLASSPATH%的值,需要手動(dòng)修改。不過(guò)這個(gè)環(huán)境變量似乎沒(méi)啥用處。
最好不要把JMF安裝到默認(rèn)的Program Files目錄,可能會(huì)運(yùn)行不了,安裝到短目錄會(huì)比較保險(xiǎn),它似乎還是只認(rèn)Dos時(shí)代的8.3目錄結(jié)構(gòu),但偏偏又默認(rèn)安裝到Program Files里面。
不過(guò)年代久遠(yuǎn)的東西,雖然還能用,但可能會(huì)遇到一些奇怪的問(wèn)題,折騰了兩個(gè)月,發(fā)現(xiàn)了兩個(gè)比較大的問(wèn)題:
第一個(gè)是在Windows 7 x64上提示攝像頭初始化失敗的問(wèn)題。這個(gè)問(wèn)題很奇怪,電腦剛開(kāi)機(jī)的時(shí)候可以順利找到一次攝像頭并正常操作,但是第二次就會(huì)提示攝像頭初始化失敗。有人提出的解決方法是安裝一個(gè)叫ManyCamera的程序,這個(gè)程序可以把一個(gè)攝像頭供多個(gè)程序同時(shí)使用,其實(shí)就等于中間加了一層轉(zhuǎn)換,效果會(huì)有點(diǎn)差別,免費(fèi)版還會(huì)加上水印,要求比較高的人可能會(huì)不爽,但是目前找不到其他辦法。
第二個(gè)是在程序中找不到攝像頭,不光找不到攝像頭,其他媒體設(shè)備通通找不到,使用以下語(yǔ)句:
vector = CaptureDeviceManager.getDeviceList ( null )
按照文檔說(shuō)明是返回所有媒體設(shè)備,但每次vector都是null。在Eclipse中運(yùn)行又能正常,導(dǎo)出成jar之后運(yùn)行就會(huì)找不到攝像頭。
原因在于找不到j(luò)mf.properities文件,該文件包含所有檢測(cè)到的媒體設(shè)備的信息,最簡(jiǎn)單的解決方法就是把JMF安裝目錄下lib子目錄中的jmf.properties文件復(fù)制到最后運(yùn)行的jar所在的目錄,不過(guò)如果攝像頭改過(guò)的話,重新檢測(cè)后要把新的文件復(fù)制到j(luò)ar目錄,因?yàn)闄z測(cè)到的媒體設(shè)備信息都會(huì)存放在JMF安裝目錄里面的jmf.properties文件里。
StackOverflow里面有個(gè)人對(duì)這個(gè)問(wèn)題解釋得比較清楚:
http://stackoverflow.com/questions/8768142/java-capturedevicemanagergetdevicelist-is-empty
雖然問(wèn)題解決了,但是還是不明白為何在Eclipse中可以正常運(yùn)行,導(dǎo)出jar后運(yùn)行卻找不到攝像頭,即使把JMF所有jar和lib目錄都加入系統(tǒng)的CLASSPATH環(huán)境變量里還是不行。
另外,JMF安裝程序會(huì)自動(dòng)把它的jar和lib目錄加入系統(tǒng)的%CLASSPATH%環(huán)境變量,但是如果你卸載了再重新安裝到其他目錄,并不會(huì)改變%CLASSPATH%的值,需要手動(dòng)修改。不過(guò)這個(gè)環(huán)境變量似乎沒(méi)啥用處。
最好不要把JMF安裝到默認(rèn)的Program Files目錄,可能會(huì)運(yùn)行不了,安裝到短目錄會(huì)比較保險(xiǎn),它似乎還是只認(rèn)Dos時(shí)代的8.3目錄結(jié)構(gòu),但偏偏又默認(rèn)安裝到Program Files里面。