Video capture using JMF

http://bytes.com/topic/java/answers/714018-video-capture-using-jmf


————————————————————————————————————————————————————————————————————

Hello guys,
I am working on a IP camera for many days.But i am unable to capture the video with the JMF coding. Please provide me correct JMF coding.Please help in out.


Thanks in advance.
hi,

i m also doing same things. and i have one code that capture MJPEG video format and they store all jpeg file , but i want in MPEG-4 video format so if u have any idea then give me reply....

here is the code for MJPG video capture on ip camera
 

     import java.net.*;
    import com.sun.image.codec.jpeg.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*;
     
     
    public class AxisCamera1 extends JPanel implements Runnable
    {
        public boolean useMJPGStream = true//still image set to false
        
//streaming set to true
        public String jpgURL="http://192.168.0.36/axis-cgi/jpg/image.cgi?resolution=352x288";
        public String mjpgURL="http://192.168.0.36/mjpg/video.mjpg";//"http://192.168.1.198/mjpg/video.mjpg";
        DataInputStream dis;
        private BufferedImage image=null;
        int counter=0;
     
        public Dimension imageSize = null;
        public boolean connected = false;
        private boolean initCompleted = false;
        HttpURLConnection huc=null;
        Component parent;
     
        /** Creates a new instance of AxisCamera1 */
        public AxisCamera1(Component parent_) {
        parent = parent_;
        }
     
        public static Image getScaledInstanceAWT(BufferedImage source, double factor) {
        int w = (int) (source.getWidth() * factor);
        int h = (int) (source.getHeight() * factor);
        return source.getScaledInstance(w, h, Image.SCALE_SMOOTH);
        }
     
        public static BufferedImage toBufferedImage(Image image) {
        new ImageIcon(image); //load image
        int w = image.getWidth(null);
        int h = image.getHeight(null);
        BufferedImage bimage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_INDEXED);
        //BufferedImage bimage = getDefaultConfiguration().createCompatibleImage(w, h, Transparency.OPAQUE);
        Graphics2D g = bimage.createGraphics();
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return bimage;
        }
     
        public void connect()
        {
            try
            {
                URL u = new URL(useMJPGStream?mjpgURL:jpgURL);
                huc = (HttpURLConnection) u.openConnection();
                //System.out.println("huc="+huc);
                System.out.println(huc.getInputStream());
                InputStream is = huc.getInputStream();
                //System.out.println("is="+is);
                connected = true;
                BufferedInputStream bis = new BufferedInputStream(is);
                //System.out.println("bis="+bis);
                dis= new DataInputStream(bis);
                if (!initCompleted) initDisplay();
            }
            catch(IOException e)
            { //incase no connection exists wait and try again, instead of printing the error
     
                try
                {
                    huc.disconnect();
                    Thread.sleep(60);
                }
                catch(InterruptedException ie)
                {
                    //huc.disconnect();connect();
                }
                //connect();
            }
            catch(Exception e){;}
        }
     
        public void initDisplay()
        { //setup the display
            if (useMJPGStream)readMJPGStream();
            else
            {
                readJPG();
                disconnect();
            }
            imageSize = new Dimension(image.getWidth(this), image.getHeight(this));
            setPreferredSize(imageSize);
            parent.setSize(imageSize);
            parent.validate();
            initCompleted = true;
        }
     
        public void disconnect(){
        try{
        if(connected){
        dis.close();
        connected = false;
        }
        }catch(Exception e){;}
        }
     
        public void paint(Graphics g) { //used to set the image on the panel
        if (image != null)
        g.drawImage(image, 0, 0, this);
        }
     
        public void readStream(){ //the basic method to continuously read the stream
        try{
        if (useMJPGStream){
        while(true){
        readMJPGStream();
        parent.repaint();
        }
        }
        else{
        while(true){
        connect();
        readJPG();
        parent.repaint();
        disconnect();
     
        }
        }
     
        }catch(Exception e){;}
        }
     
     
        public void readMJPGStream(){ //preprocess the mjpg stream to remove the mjpg encapsulation
        readLine(4,dis); //discard the first 3 lines
        readJPG();
        readLine(1,dis); //discard the last two lines
        }
     
        public void readJPG(){ //read the embedded jpeg image
        try{
        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
        image = decoder.decodeAsBufferedImage();
     
        String s="a"+counter+".jpg";
        counter++;
        String filename="c:\\find_stillset\\"+s;
        System.out.println(filename);
     
        BufferedImage smaller = toBufferedImage(getScaledInstanceAWT(image, 1.0/3.0));//scalling image size
     
        try {
        OutputStream out = new FileOutputStream(filename);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(smaller);
        out.close();
        } catch (Exception e) {
        System.out.println(e);
        }
     
        }catch(Exception e){e.printStackTrace();disconnect();}
        }
     
        public void readLine(int n, DataInputStream dis){ //used to strip out the header lines
        for (int i=0; i<n;i++){
        readLine(dis);
        }
        }
     
        public void readLine(DataInputStream dis){
        try{
        boolean end = false;
        String lineEnd = "\n"; //assumes that the end of the line is marked with this
        byte[] lineEndBytes = lineEnd.getBytes();
        byte[] byteBuf = new byte[lineEndBytes.length];
     
        while(!end){
        dis.read(byteBuf,0,lineEndBytes.length);
        String t = new String(byteBuf);
        System.out.print(t); //uncomment if you want to see what the lines actually look like
        if(t.equals(lineEnd)) end=true;
        }
        }catch(Exception e){e.printStackTrace();}
     
     
        }
        public void run() {
            System.out.println("in Run...................");
            connect();
            readStream();
        }
     
        public static void main(String[] args) {
     
            //System.setProperty("http.proxyHost","proxy.tp.edu.sg");
        
//    System.setProperty("http.proxyPort","80");
        JFrame jframe = new JFrame();
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        AxisCamera1 axPanel = new AxisCamera1(jframe);
        new Thread(axPanel).start();
        jframe.getContentPane().add(axPanel);
        jframe.pack();
        jframe.show();
        }
     
    }
Swathi Nagaraj

re: Video capture using JMF

To display the image into panel i am using this code.
Graphics g = e.Graphics;
g.DrawImage(BufferImage, 0, 0);
g.Dispose();

please help me why g.DrawImage is used and about all those parameters.

——————————————————————————————————
傲轩游戏网
原文地址:https://www.cnblogs.com/cuizhf/p/2318649.html