This discussion is archived
0 Replies Latest reply: Sep 4, 2009 2:55 PM by 843807 RSS

help with ip cam

843807 Newbie
Currently Being Moderated
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