here is the code for MJPG video capture on ip camera

mac2022-06-30  18

http://bytes.com/topic/java/answers/714018-video-capture-using-jmf ————————————————————————————————————————————————————————————————       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();         }           }

 

转载于:https://www.cnblogs.com/cuizhf/archive/2012/01/04/2312207.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)