-
March 6th, 2012, 08:23 AM
#1
Ip camera view
hello, I have to do for my end of studies project a program wich allow to connect to an ip camera and display a real time video. I've searched on many forums but I can't find a way out. the only code I found is the following but I can't make it work. There is a null pointer exception when it try to display what sees the camera. If there is any source code or tutorial I'll be thankful
Code:
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
public String mjpgURL="http://user:passWord@monIp:port/videostream.cgi";
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(mjpgURL);
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();
}
}
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|