程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JMF捕獲音頻和視頻(二)

JMF捕獲音頻和視頻(二)

編輯:關於JAVA

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved