JAVA 因简洁而美丽,因有效而动人 善待JAVA这颗种子的人,必将得到她的福荫

JMF 编程 -- 转载(2)

上一篇 / 下一篇  2010-08-27 01:13:46 / 个人分类:java

作者:冯睿    本文选自:赛迪网  2002年09月29日  
 
创建一个Player对象


JMF编程中,最常见的工作就是创建一个Player对象。你可以通过Manager类的createPlayer()方法创建Player对象。Manager对象使用多媒体的URL或MediaLocator对象来创建Player对象。当你获得了一个Player对象后,你可以通过调用getVisualComponent()方法得到Player对象的图像部件(Visual Component,在图像部件上可以播放多媒体的图像)。然后将图像部件加入到应用程序或Applet的界面上。Player对象还包含一个控制面板,在上面可以控制媒体的播放、停止和暂停等。 

Player类中的很多方法只有在Player对象处于Realized的状态下才会被调用。为了保证Player对象已经到达了该状态,你需要使用Manager的createRealizePlayer()方法来获得Player对象。但是对于start()方法来说,你可以在Player对象到达Prefetched状态之前调用它,它可以自动将Player的状态转换到Started状态。 


截取多媒体数据


多媒体数据的截取是JMF程序中另一个非常重要的功能。你可以按照下面的步骤截取数据: 

● 通过查询CaptureDevieceManager获得你希望使用的截取设备。 

● 获得设备对应的CaptureDeviceInfo对象。 

● 从CaptureDeviecInfo对象中获得MediaLocator对象,然后用它创建一个DataSource对象。 

● 使用DataSource对象创建Player对象或Processor对象。 

● 调用start()方法,开始截取多媒体数据。 

你可以使用CaptureDeviceManager对象获得系统中可用的视频和音频截取设备。通过调用getDeviceList()方法你可以获得设备的列表。每个设备都对应一个CaptrueDeviceInfo对象。也可以通过调用CaptureDevieceManager对象的getDevice()方法来获得特定的CaptureDeviceInfo对象。在使用设备截取多媒体数据前,还需要从CaptureDeviceInfo对象中获得设备对应的MediaLocator对象。然后你可以直接使用MediaLocator来构造Player或Processor的实例,也可以用MediaLocator构造一个DataSource对象,然后将DataSource对象送入Player或Processor对象中。最后调用start()方法来截取多媒体数据。 


一个JMF例子


当你使用JMF进行编程以前,你需要安装JMF。同时在硬件上也有一些要求。由于本文的代码是在Windows 2000下编写和测试,因此文章中提到的操作系统需要的软件都是与Windows有关的。虽然Java是跨平台的,但是JMF是个例外??并不是所有的平台上都实现了JMF。 

硬件和软件要求 

硬件方面你需要与SoundBlaster兼容的声卡,芯片最好使用奔腾III以上的芯片。内存最好不小于64MB。同时你需要安装下面的软件: 

● Windows95/98,Windows NT 4.0, Windows2000或 WindowsXP。 

● JDK1.1.6或以上的Windows版本。 

● JMF类和动态库 

在Windows下安装JMF2.1 

当下载了JMF2.1以后,运行jmf-2_1_1b-windows-i586.exe。该程序会将JMF2.1安装到你指定的目录下。当安装成功后,你需要确认一下安装程序正确设定了CLASSPATH和PATH环境变量。在CLASSPATH中需要包含jmf.jar和sound.jar;在PATH中需要包含JMF动态库的路径。 


JMFRegistry


如果你希望使用视频和音频截取的设备,你需要确认安装了这些设备的驱动程序。除此之外,你还需要运行JMFRegistry应用程序。JMFRegistry可以向JMF注册新的数据源、媒体处理器、插件、视频和音频截取设备,然后你才能够在你的程序中使用它们。你只需要运行一次JMFRegistry就能注册系统中所有的视频和音频截取设备。 

当你运行了JMFRegistry后,会弹出图一所示的窗口: 






图一 通过JMFRegistry注册视频和音频截取设备


选择“Capture Devices”标签,然后按下“Detect Capture Devices”按钮,程序将自动检测出系统中的视频和音频截取设备。在左边的类表框中会列出所有检测到的设备的名称。在图一中我们看到JMFRegsitery发现了JavaSound audio capture、vfw:Logitech USB Video Camera:0和vfw:Microsoft WDM Image Capture (Win32):1。单击某个设备可以看到该设备支持的视频或音频格式。如果JMFRegistry无法检测到设备,有可能是没有正常安装设备的驱动程序。 


例子程序


由于JMF2.1比较复杂,我不可能在在例子中包含JMF2.1支持的所有功能。因此我选择了下面几个在JMF中比较常用的功能:播放多媒体、注册音频和视频截取设备、截取视频和音频。 

1.播放多媒体 

在JMF.java中有一个play()方法。该方法可以播放用户选择的多媒体文件。当播放多媒体文件时,你需要一个Player对象。在例子中,dualPlayer就是Player接口的实现对象。 

Player dualPlayer;
 


在Play()方法中,通过使用FileDialog获得媒体文件的路径和文件名,并保存在filename中。 

try {
    FileDialog fd = 
      new FileDialog(this, "Select File", FileDialog.LOAD);
    fd.show();
    String filename = fd.getDirectory() + fd.getFile();
    ...
  }
  catch (Exception e) {
    System.out.println(e.toString());
  }
 


然后你需要通过媒体管理器Manager间接创建一个Player对象。你可以使用Manager类的createPlayer()方法或者createProcessor()方法来获得一个Player对象或Processor对象。在play()方法中,我使用的是createPlayer()方法。 

dualPlayer = Manager.createPlayer
      (new MediaLocator("file:///" + filename));



TAG: JMF

 

评分:0

我来说两句

Open Toolbar