0 Replies Latest reply: Sep 4, 2009 4:55 PM by 843807 RSS

    help with ip cam

    843807
      Hi,
      i don't know if this goes here....i would like to capture video and if it is also posible sound from ip camera (i have D-link DCS-920), i tried this code to capture video but didn't work

      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.;
      import java.applet.;

      public class AxisCamera extends Applet implements Runnable
      {
      public boolean useMJPGStream = true;
      String appletToLoad;
      Thread appletThread;

      //Following commented on 07/08/2006
      //URL for Axis 2420
      //public String jpgURL="http://your-ip-here/axis-cgi/jpg/image.cgi?resolution=352x240";
      //public String mjpgURL="http://your-ip-here/axis-cgi/mjpg/video.cgi?resolution=352x240";

      //Following 3-lines added on 07/08/2006
      //URL for D-Link DCS-900
      public String jpgURL = "http://192.168.0.20/IMAGE.JPG";
      public String mjpgURL = "http://192.168.0.20/video.cgi";

      DataInputStream dis;
      private Image image=null;
      public Dimension imageSize = null;
      public boolean connected = false;
      private boolean initCompleted = false;
      HttpURLConnection huc=null;
      Component parent;

      /* Creates a new instance of AxisCamera /
      /*public AxisCamera (Component parent_)
      {
      parent = parent_;
      }/

      public void connect()
      {
      try
      {
      URL u = new URL(useMJPGStream?mjpgURL:jpgURL);
      huc = (HttpURLConnection) u.openConnection();
      System.out.println(huc.getContentType());
      InputStream is = huc.getInputStream();
      connected = true;
      BufferedInputStream bis = new BufferedInputStream(is);
      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 init()
      {
      System.out.println("Starting Applet");
      appletToLoad = getParameter("appletToLoad");
      setBackground(Color.white);
      }

      public void paint(Graphics g)
      {
      //used to set the image on the panel
      if (image != null)
      g.drawImage(image, 0, 0, this);
      }

      /public void run()
      {
      try {

      connect();
      readStream();

      Class appletClass = Class.forName(appletToLoad);
      Applet realApplet = (Applet)appletClass.newInstance();
      //realApplet.setStub(this);
      setLayout( new GridLayout(1,0));
      add(realApplet);
      realApplet.init();
      realApplet.start();
      }
      catch (Exception e) {
      System.out.println( e );
      }
      validate();
      }/

      public void start()
      {
      appletThread = new Thread(this);
      appletThread.start();
      }

      public void stop()
      {
      appletThread.stop();
      appletThread = null;
      }


      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

      //Following commented on 07/08/2006
      //readLine(3,dis); //discard the first 3 lines

      //Following added on 07/08/2006
      readLine(4, dis); //discard the first 4 lines for D-Link DCS-900

      readJPG();
      readLine(2,dis); //discard the last two lines
      }

      public void readJPG()
      {
      //read the embedded jpeg image
      try
      {
      JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);
      image = decoder.decodeAsBufferedImage();
      }
      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();
      System.out.println("lineEndBytes....."+lineEndBytes);
      byte[] byteBuf = new byte[lineEndBytes.length];
      System.out.println("byteBuf......."+byteBuf);

      while(!end)
      {
      //dis.read(byteBuf,0,lineEndBytes.length);
      String t = "";
      if(byteBuf != null)
      {
      dis.read(byteBuf,0,lineEndBytes.length);
      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()
      {
      connect();
      readStream();
      }

      /public static void main(String[] args)
      {
      JFrame jframe = new JFrame();
      jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      AxisCamera axPanel = new AxisCamera();
      AxisCamera axPanel = new AxisCamera(jframe);
      new Thread(axPanel).start();
      jframe.getContentPane().add(axPanel);
      jframe.pack();
      jframe.show();
      }/
      }

      I think the problem is in the method conect cause huc.getContentType() is null, or may be it's the username and pass you are asked when you put the ip in a browser. I don't know what to do, somebody help me plizzzzzzzzz?

      thanks a lot