java实现摄像头调用,处理视频流
package com.xuggler;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JDialog;
import javax.swing.JButton;
import com.xuggle.xuggler.ICodec;
import com.xuggle.xuggler.IContainer;
import com.xuggle.xuggler.IContainerFormat;
import com.xuggle.xuggler.IError;
import com.xuggle.xuggler.IMetaData;
import com.xuggle.xuggler.IPacket;
import com.xuggle.xuggler.IPixelFormat;
import com.xuggle.xuggler.IStream;
import com.xuggle.xuggler.IStreamCoder;
import com.xuggle.xuggler.IVideoPicture;
import com.xuggle.xuggler.IVideoResampler;
import com.xuggle.xuggler.Utils;
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import javax.swing.JTextField;
public class WebCamDialog extends JDialog {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private static WebCamDialog instance = null;
public static WebCamDialog getInstance() {
if (instance == null) {
instance = new WebCamDialog(null);
instance.setModal(true);
instance.setLocationRelativeTo(null);
}
return instance;
}
private void doPackDialog() {
if (FORMAT_BIG.equals(usingFormat)) {
getPanelCenter().setPreferredSize(new Dimension(1280, 1024));
} else {
getPanelCenter().setPreferredSize(new Dimension(800, 600));
}
pack();
this.setLocationRelativeTo(null);
}
/**
* @param owner
*/
private WebCamDialog(Frame owner) {
super(owner);
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setContentPane(getJContentPane());
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setSize(new Dimension(521, 239));
this.setTitle("webcamdialog");
}
@Override
public void dispose() {
super.dispose();
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getPanelEast(), BorderLayout.EAST);
jContentPane.add(getPanelCenter(), BorderLayout.CENTER);
}
return jContentPane;
}
private File recentCaptureFile = null;
private JPanel panelEast = null;
private JButton jButtonCaptureAndReturn = null;
private JButton jButtonExit = null;
private JPanel panelCenter = null;
private JButton jButtonCapture = null;
private JButton jButtonOpenFolder = null;
private BufferedImage javaImage = null;
private Thread th = null; // @jve:decl-index=0:
public File init() {
doOpen();
this.setVisible(true);
return recentCaptureFile;
}
private void doOpen() {
doClose = false;
if (th != null && th.isAlive() && container != null && container.isOpened()) {
} else {
th = getNewThread();
th.start();
}
}
private String deviceName = "0"; // @jve:decl-index=0:
private String driverName = "vfwcap"