6.關於視頻捕獲
6.1VFW(Video for Windows)
在闡述如何識別視頻采集設備之前,我們先引入VFW概念:
VFW 是Microsoft公司為開發Windows平台下的視頻應用程序提供的軟件工具包,提供了一系列應用程序編程接口(API),用戶可以通過它們很方便地實現視頻捕獲、視頻編輯及視頻播放等通用功能,還可利用回調函數開發更復雜的視頻應用程序。它的特點是播放視頻時不需要專用的硬件設備,而且應用靈活,可以滿足視頻應用程序開發的需要。Windows操作系統自身就攜帶了VFW,系統安裝時,會自動安裝VFW的相關組件。
下表為VFW的功能模塊
模塊 功能 AVICAP.DLL 包含執行視頻捕獲的函數,它給AVI文件的I/O處理和視頻、音頻設備驅動程序提供一個高級接口 MSVIDEO.DLL 包含一套特殊的DrawDib函數,用來處理屏幕上的視頻操作 MCIAVI.DRV 包括對VFW的MCI命令解釋器的驅動程序 AVIFILE.DLL 包含由標准多媒體I/O(mmio)函數提供的更高的命令,用來訪問.AVI文件 ICM 壓縮管理器,用於管理的視頻壓縮/解壓縮的編譯碼器(Codec) ACM 音頻壓縮管理器,提供與ICM相似的服務,適用於波形音頻
6.2 JMF和VFW的關系:
注意以下代碼:
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
device = CaptureDeviceManager.getDevice(str2);
medialocator = device.getLocator();
只要是vfw開頭的設備信息,就能為JMF架構識別並加以使用。可以編寫代碼來識別此設備。
在JMF中,當使用了 Detect Capture Devices以後,可以發現在Capture Devices多了一個設備名稱:
6.3一個識別類代碼及分析
private MediaLocator autoDetect(){//自動識別功能函數
MediaLocator ml = null; //視頻采集設備對應的MediaLocator
VideoFormat currentFormat = null;//用戶定制獲得視頻采集設備支持的格式
Format setFormat = null;//用戶定制視頻采集設備輸出的格式
Format[] videoFormats = null;//視頻采集設備支持的所有格式
System.out.println(" AutoDetect for VFW");
//獲得當前所有設備列表
Vector deviceList = CaptureDeviceManager.getDeviceList( null );
if( deviceList != null ){
//根據設備列表,找出可用設備名稱
for( int i=0; i<deviceList.size(); i++ ){
try{
CaptureDeviceInfo di=( CaptureDeviceInfo )deviceList.elementAt(i);
//如果設備名稱以vfw開頭
if( di.getName().startsWith("vfw:") ){
//獲得所有支持RGB格式
videoFormats = di.getFormats();
for( int j=0; j<videoFormats.length; j++ ){
//我們只需要第一種RGB格式
if( videoFormats[j] instanceof RGBFormat ){
currentFormat = ( RGBFormat )videoFormats[i];
break;
}
}
if( currentFormat == null ) {
System.err.println("Search For RGBFormat Failed");
System.exit( -1 );
}
//通過設備,獲得MediaLocator,這個很重要
ml = di.getLocator();
}
}
catch ( Exception npe ) {
System.err.println( "Unable to get Processor for device");
System.exit(-1);
}
}
}
else {
System.err.println( "No Capture Device OK");
System.exit(-1);
}
return ml;//返回可用的設備medialocator
}
6.4檢測到視頻采集設備的參數屬性
本文出自 “子 孑” 博客,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/25477