JMF捕获技术(视频)
想要得到视频信号,首先应该先安装Java Media Framework2.1.1.e,并进行初始化,获得音频视频驱动.
JMF通过MediaLocator(类似URL的一种媒体信息定位)来确定视频,音频或者某个音频文件在计算机中的具体位置.例如视频为vfw:Microsoft WDM Image Capture(Win32):0,多媒体文件为 file:c:\\music\123.mp3.
知道了它的媒体信息的位置后,就可以构造一个播放器(MediaPlayer或有同样功能的Player),播放就可以了.
使用MediaPlayer的start方法就可以启动播放器了,隐藏了具体的播放细节.JMF播放器有它的生存周期,分别是Unrealized,Realizing,Realized,Prefetching,Prefetched Started.通过监听器来由JVM来控制各种状态的转换,通过realize方法使播放器达到Realized状态,一旦达到这个状态,监听器检测到,我们再使用prefetch方法达到Prefetched状态,然后再调用start方法播放,就可以完成播放任何媒体的功能了,简单吧!
捕获视频代码
class CaptureVideo extends Frame implements ControllerListener {
private CaptureDeviceInfo infor ;
private MediaLocator mediaLocator ;
private String url = “vfw:Microsoft WDM Image Capture (Win32):0”;
private Component com;
private Panel panel ;
MediaPlayer player;
public CaptureVideo() {
infor = CaptureDeviceManager.getDevice(url);
mediaLocator = infor.getLocator();
}
public void paly() {
try {
player = Manager.createPlayer(mediaLocator);//利用mediaLocator创建Player
player.addControllerListener(this);
player.realize();
} catch (NoPlayerException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
public void createComponent() {
setTitle("视频信号");
addWindowListener(new WinClose());
setBounds(100,100,200,200);
panel = new Panel();
if((com = player.getVisualComponent()) != null) {
panel.add(com);
}
add(panel);
setVisible(true);
}
public synchronized void controllerUpdate(ControllerEvent arg0) {
// TODO 自动生成方法存根
if(arg0 instanceof RealizeCompleteEvent) {
System.out.println("realized");
createComponent(); //将播放器添加到Panel上
player.prefetch();
}
if(arg0 instanceof PrefetchCompleteEvent) {
player.start();
System.out.println("prefetched");
}
}
}
public class test {
public static void main() {
CaptureVideo video = new CaptureVideo();
video.player();
}
}