Video capture using JMF

本文提供了一个使用Java Media Framework (JMF) 捕捉IP摄像头视频的示例代码,包括如何连接到IP摄像头,处理MJPEG格式的视频流,并将其转换为MPEG-4格式保存为图片。
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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值