JMF 录像程序


import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.media.ConfigureCompleteEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DataSink;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSourceException;
import javax.media.NoProcessorException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.Processor;
import javax.media.RealizeCompleteEvent;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;

public class VideoCapturer extends Frame implements ControllerListener {
Button videoCapturer;
boolean isInCapturing = false;
String url = DeviceConfig.VIDEO_DEVICE_URL;
DataSource source;
Player player = null;
DataSink datasink;
Processor processor=null;

public VideoCapturer() {
setBounds(100, 100, 300, 400);

/** 数据源 */
try {
source = Manager.createDataSource(new MediaLocator(url));

/** 处理器 */
player = Manager.createPlayer(source);
player.addControllerListener(this);
player.realize();
} catch (NoDataSourceException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

/** 录像按钮 */
videoCapturer = new Button("video capture");
videoCapturer.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {

try {
DataSource outsource = Manager.createCloneableDataSource(source);
processor = Manager.createProcessor(outsource);


processor.addControllerListener(new ControllerListener() {

@Override
public void controllerUpdate(ControllerEvent event) {
System.out.println(event.getClass());
if (event instanceof ConfigureCompleteEvent){

// 设置视频输出格式
processor.setContentDescriptor(new FileTypeDescriptor(
FileTypeDescriptor.QUICKTIME));

processor.realize();
} else if (event instanceof RealizeCompleteEvent) {
processor.prefetch();
} else if (event instanceof PrefetchCompleteEvent) {
processor.start();

String luxiangsavepath = "C:/capture/";
String luxiangsavename = "flv.quickname";


MediaLocator dest = new MediaLocator(new java.lang.String(
"file:///" + luxiangsavepath + luxiangsavename));

try {
datasink = Manager.createDataSink(processor.getDataOutput(), dest);

datasink.open();

datasink.start();
} catch (Exception e) {
e.printStackTrace();
}

}

}
});
processor.configure();




} catch (SecurityException e1) {

} catch (IOException e1) {
} catch (NoProcessorException e1) {

}

}
});



/** 停止录像按钮 **/
Button stopButton = new Button("stop capture");
add(stopButton, BorderLayout.NORTH);
stopButton.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
try {
System.out.println("close");
processor.close();
processor.deallocate();

datasink.stop();
datasink.close();
} catch (IOException e1) {
e1.printStackTrace();
}

}
});


Panel northPanel = new Panel();
add(northPanel, BorderLayout.NORTH);

northPanel.add(videoCapturer, BorderLayout.EAST);
northPanel.add(stopButton, BorderLayout.WEST);
}

public static void main(String[] args) {
VideoCapturer capturer = new VideoCapturer();
}

@Override
public void controllerUpdate(ControllerEvent event) {
System.out.println(event.getClass());

if (event instanceof RealizeCompleteEvent) {
player.prefetch();
} else if (event instanceof PrefetchCompleteEvent) {
player.start();

/** 显示player */
Component visualComponent = player.getVisualComponent();
add(visualComponent, BorderLayout.CENTER);
setVisible(true);
} else {

}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值