show three live video in one window...

Hi,I need show three live video from three ip cameras in only one window... how can I do this? I never use video in java, can any one help me? thanks,
[171 byte] By [nurvasia] at [2007-10-3 4:25:55]
# 1

I use this code and run ok, but I have too an sony磗 cameras so I need the url for them BUT I CAN碩 FIND IT!!! Can any one help me? my cameras are: sony SNC-CS50P

Thanks

/*

* AxisCamera.java

*

* Created on March 12, 2004, 2:53 PM

*/

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.*;

/**

*

* @author David E. Mireles, Ph.D.

*/

public class AxisCamera extends JPanel implements Runnable {

public boolean useMJPGStream = false;

public String jpgURL =

"http://192.168.11.15/axis-cgi/jpg/image.cgi?resolution=352x240";

public String mjpgURL =

"http://192.168.11.15/axis-cgi/mjpg/video.cgi?resolution=352x240";

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 disconnect() {

try {

if (connected) {

dis.close();

connected = false;

}

} 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 static void main(String[] args) {

JFrame jframe = new JFrame();

//jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

AxisCamera axPanel = new AxisCamera(jframe);

new Thread(axPanel).start();

jframe.getContentPane().add(axPanel);

jframe.pack();

jframe.show();

}

public void paint(Graphics g) { //used to set the image on the panel

if (image != null)

g.drawImage(image, 0, 0, this);

}

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();

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 readMJPGStream() { //preprocess the mjpg stream to remove the mjpg encapsulation

readLine(3, dis); //discard the first 3 lines

readJPG();

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

}

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 run() {

connect();

readStream();

}

}

nurvasia at 2007-7-14 22:28:32 > top of Java-index,Security,Cryptography...
# 2
Folow the link in http://forum.java.sun.com/thread.jspa?threadID=751893It may help with the multiple video part of your problem
StefanMarica at 2007-7-14 22:28:32 > top of Java-index,Security,Cryptography...
# 3
I碼m trayining do this, no get good results...But I need the url to get jpg image of a sony磗 camera and I can?!!in the axis is:" http://192.168.11.15/axis-cgi/jpg/image.cgi?resolution=352x240"but in the SONY? anyone know?thanks!!
nurvasia at 2007-7-14 22:28:32 > top of Java-index,Security,Cryptography...
# 4

ok, I get the correct url to the sony camera. I am trying show two cameras at time, so I use two threads to get the images, but I don磘 know how draw them without blinking my window!!!

I use this new class:

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 AxisCamera_V1 extends JPanel implements Runnable {

private AxisCamera AxisCamera_1;

private AxisCamera AxisCamera_2;

///////////////////////////////////////

public boolean useMJPGStream = false;

public String jpgURL = "http://192.168.11.16/axis-cgi/jpg/image.cgi?resolution=352x240";

DataInputStream dis;

public Image image = null;

public Dimension imageSize = null;

public boolean connected = false;

private boolean initCompleted = false;

HttpURLConnection huc = null;

Component parent;

private JPanel ivjCam1 = null;

private JPanel ivjCam2 = null;

/**

* Constructor

*/

/* AVISO: ESTE M蒚ODO SE REGENERAR? */

public AxisCamera_V1() {

super();

initialize();

}

public void connect() {

try {

URL u = new URL(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 disconnect() {

try {

if (connected) {

dis.close();

connected = false;

}

} catch (Exception e) {

;

}

}

/**

*

*/

/* AVISO: ESTE M蒚ODO SE REGENERAR? */

private static void getBuilderData() {

/*V1.1

**start of data**

D0CB838494G88G88GC001ADB5GGGGGGGGGGGG8CGGGE2F5E9ECE4E5F2A0E4E1F4E13D9AEDD0D457B5CDC94AB436039D1B528CCD49D703562436B1D3137203E41CB613B80D19410436B6B50DCDF40ACA9B53C9B3B4F3E197A58684144628AC6E4AC2C408E2E49ACBE82BE8A600082B2C38AAAAEFF79F70E03F58FD300BA0745CFB5FF97BD8F6215890E70E6F5DF34F3D67631EF36EB9EFA1257B1273F2F2CB894949A34A3FCFF288392D061037AFB5F890175861B0904DBF93C089B9DC2E07E7

8A4C9D9FF7980A497176FC982742F845CD07E1973C6FA449A57A037092034F6AEAC2B2BF4DE91A1ECFEB8B72594A46ED6385705C8E10863835GF5D64A5FB97E01024F0771F6651DC2CEAEA1CB994D220A8FB4F8D921CBD61E47AFD01A0971B2E5BE9B701426947087AE0477FC17C9F7C743B1E55CB5BF05ECFE36D4D7C8F9E976C708D756AED61EC61214CB8D21A34FEEB3423351B2507BEF0BFFC8348B0176A13FA4B4B41C88C9011302DB748B57BB0F14F5D239D6D66433B5042C05FD388CAF94B6AABC968C24

1066E37D7931E4686E643C63BA43B294178C1454DF24FB27B01B52F54BE1BE9B00734C9AC71EA120FB0B513E3A1F52AE0177E7G56DCC4D97E75A14AE29B7DA9F94B7E092EA806AC0DB6AE03539616252BB2E14BEEF63EAF3652B3CA063965G99G59GE5179C06C6003D4C2F6637D037BAE117CFFA5DEE2F67044F5764F27A4FF81D228B5E41FCF6D9411D979DDE3F13906EBB2BAAEA234803E03DB459EF42E7FD1160D9AFBE7FA811650FF4F9D1F4DB3A6AFDDD1F3247582530EEDCAFFF9B55AB89704BGD682

2C83483F8C3EF599757ACD4B511974EA7148225FA338BA066CBE41AFB78DC9AE2768D774FBF4FCBA7D2281DF17BA6BF55CAEA9C735F6D97D58B15D56A8F6D91DE2501D3A4C6D51F5B9EC974E7B4D183C47AECFBD8F962F17299FDE2C20FE18G6FB90A0FF23C4070EBB5F86E636B195F5271E61833DDC13F35EDC79D5A74771362A37F0C2AC3625307F429D738BC69D7A24F363D1D668C5285FE8AD08F508660820887C86A42732DEABD7CBF7A2DC5F336FC6D6FDA5F072798127DC20BA7A08B9E0758A9C032303B

44GD1E85635D2596D1356EDE07164G9E1F0B9EC8A8326475406E10DC4011821C66AF2DA51446AF32D92B649601015BC7F05FF7DAF74253A584648BBE27A00BE18ABE3F65B43565305089BB4286701E59C5ED1E49F2D6AA3CE7GF0DB0D1E25383A2B8EC373D5344BD7CE6F0067E9F0EC515550F0CAF2D0B1847F88729FED2339C49C96BD72A951A7FA1C7092D066EEEFFBB7EC179E2FAAF3BC435398B9890287D47CB75BCAB89E7650DA99676FE67302AC7BA57B10ACF60832ACF9FA436B6FE53284A605DF00A8

B1EE21BE5685FA49GF12AFE9F1E5929512F4D6B9D9872D96949A9F6AA1820B6C9847AA5D7711E3BDAC16F3D742B68279BED6827278A9FA1352BBE099EEBCFC879D9D739FF66DF0B0C35DE36E71847267D36A87115FEB5FA5C4D96B80F7C0AE8BCF4DF407E94385D7FF00E5A3D8E74ED83F0DDC33B5B4F98F93CB5898191A36C2C9FCECCF4063D0C535A5AE37B58757668BEA636C77731017669FDA8509E4D07785C0DF6FA37F8039E0DCFCE346FE0B16C7108CCE8F58961F544C6AB35056411640B1233D714BB24

9BA26464EB5437F4E66ADBF1701EF88DFDA9D8013EE43E311024DD5F9175BECBFC6808AECB71A17D7530AFF119EEBBCBEDAE3AC4B7986A24F748A3F37C1DAC3E953C12DFC216683463966A0F836208C2F73BE58B21F944B5A42A3AAD915E23B676CBEEB8AA9A30CAADD7B1212D654CA09F2D7B1A61598540576632FAE8D2B1257ACCF98715C9865AF800646B68B36FD8F6EBE2D5F11613DE170B1BDEBD13BF1EAB26E7A88E8E09100AE9B01FD6757873399D91F31D0ACEFC7E6DF3D4A717A68FAC3BCEF55AE346FA

0B5E939CF70461B6C1B00D68715EBDD32C2DBD1D0103D14F0FC236F2EE455D11F7D6071565E1409F6FC65D074EEB735409C0406B105815201C459B5554662CDE6D9706055021C0907C3A212155A2408ADEB3FE0365B29A7B56EE2C99F5BAEA6BF9B0FE90A0D565E76E186AAB559D5B6059A37983D06BB845905A6CF087551D5EC18A9AEB330F3536C8DBD39E5396690A8D56CD31454BFB289CFA41E178C0C05996F514E8EC81F5A4DC393DF0D2A80F4D2A633E2B0C3B2CF9683B84F35F37A630362995149EC38867

D62BB0B54F729AA6486C55A7709AA6CF455F4E70E39ABC2FED5EE5F8BACE00394D825E3569FB29DEB63B4350E7C73D7E3127D0231745ABF9E4D527D7775078737A25DE492356948C87D5B4CBC87C3EDA484EB884FB4E836038B798AE9946CBD55C4A9C0A4B00F1169D6F1C1BBA0AABF5B88CE6876262992E9E46B695D7240BF6EF28716E185D9DD59AC14FF99C1816C75EAC760FF627F17B7DEAAFBD2B10BA7EAD9B0FA874BBC95A843339CF98240E136020F6FB095912520D411853EDA3DB187F0FF80760400EBB

A91D09E08ECC873ACC00D2409FF072BA02476C0F03B45774C04187215A61939D24CC24EBDF4F413571C01F84108A309AA05B09BCF79D247999F26791BEDEFFC599FF4CF370133A489CCC79BAE17F90G27F949980DA681669F94114F4689AAEB0F608A505861F11D9C54467531ED6618F11DAA7233DD29BC17EF2D4B65F171B0413EB63F8772DC8F5A64C8B72D5755BCF6C8884A8D8D1F7BA5E713505B46AC4CF359A60267906A41DCE648E17DAF0C1F81D85303F7EA288A7B5F45BF381FB456C76F4557D877695E

6A61F216750673D0B3743F1CE7E1AE723441FCC2AF45FDCABF1ECC723392786F90BC793CFB52BC4DDB55C4BB7F7DC973D45E93DB3473AFCC1A4F532C673ABDD7093AE5BF3704389E2F0A792DA3C351A9DBF95ADEBC1CDBEB9BA8663A25687315BD6B7B501EE6A335278B46F1GC9FD786D21480434CBD5DA1F1552E642D8AF811D04F9AE594072870CAD9266396E329AF8F68A7DCAC77519D3123DFED684825262777AC43FBC42316CF6D6F2825456330CFB3E6EE73738EE732C57713BE0BE73C31F446F029C95FF

8F430FE970BC96AAF2B09662E1AED3355D8B65B4BEAD7DD0B7834481A4812482E47423AD97165511997AD62B5757864533CB53D2F17DF6645E5A37052736224FADFDF291D9F667EB396F4570394CFE6EEB85837C1915FEB817BE39FECE16FF9AE14E86B08630GA085A0EDG757BD3D9AD570F3A4389D9969CFD2CA2C165BAA5B198C653A42A780A9EF5CB073D5681E48F046F19E2D72C7BBD11793C5995F9F677B1FC1DAB726C8E9A716C9AE1AE5905F7E42989796B5DD03BG543A43BC0F3BE371FFF4AB5D4F6A

0E647F887BC6526D0E64BFECC57EAE18DB69C63BBD4476D77B9C9EC64ABD3758C0F38A6DC9A441A55DE0E5E48790FAFA396C5F215BA9B1102CF92F4E196ECE7EFF0173E81AD39EDC7FDF17476EA7DFA90F5ECF3EDE9E3D1F5CD0BEFDBF79E6F96CFEB23BDC5BCF7218D8E422E7D36F01FC89A0834483A4F970DC3F3EEFBF0F07A8317099B418A73D6C8B140C7C5D46583A4A46193FDB5DB4521A5F6E15E52F1B6E0F782F9A69F949DE9FC3AA5FF50C54C6D02276491C943F6B98699D6092FB981A571F4B75D827AE

73E0CDDAD0C8F1ABE03CC6455D359DEBD73D97F1F945D83B9E70E23C5DEB8C7B69431A77BA635C7BEC4B1C7260BA571850DEA1558EBE935AEB1E0A331851DECBD45C3315E82FF455DE0B7607ED741866FD4CBA77767A761C7260BE7793D3EC3FFF42B4335FBF4DECAB023FDAC7FCA2477D42447A011E1E002846578AD3310AEB89D83C8109E6D35EABEC50E33DE876E1BDDDD1C87730FB7D6C43A66F959A8A318EBF86F49600B800C4G5AF7F11A255B11E689601F814882508FF29A67A025A9ABBE2550148DCE3D

DF705E50A9D087B427G7E2E0CED03613B054BEFB5217C0B87D10E6F1AD00E34C1AEEB86BCB387F9FF48E9C64CC82377F3D94B60D96767B4DC56D7AAD156E67FD4D9F59132F6810D4F9F16B54E9F16155BF5EB2136CF61F7233D90FFD7C820F278314748B3D612295FCA8E71C3E9E878CCF674094EA66508882FF9979522ADC8GEB5E8C367FB198DBG7AGB85F555B71CE3E8DF04B8248B7FF6FEEB22537B9A9781DEDCA6B2870B297A12FAC155779A23A678199EC8CE0133196BF43F2A15D5F8738FD4C960475

C67CDF56FF2261D2E47AFB2E013692CACD77CA8156F4E5BFFC001CFA69355C8A9223261379F9B58E05FB240C3B13CC7C9C86CCD34F61A9931E038CEB968F216C5E8A54F36D906A79BD769BD159B0589220ED98EDFA1F99ED6A84DC52B06E315E0CFB248F639E3BAAA9EDC150E1B083B48611F6C7955A4A9A1C2D2D3EC6FF56D472D7DF61CCF5733CE034EF9A43B32EAB0F9873F5BF1AF1DDA4701A310D79E1CAB032163C4070CB031135644B05E863B4EA3B905E953F5FFEEB7DD356AD2E2BAE3AB5FDFF4EE2A4BE

94296F738C3FA094292F2D8875CD06B97D886AFB3ED84B3F8F70E3A353FF5362B1747C956DF71162FB366B10DFA4FD0232DF52C864774EA7EBE8DEDC8978CC00629BD063GB482D8817AG46G92GD2G52G52815681E483940CBA8CC6007AD175F716EA9A6431FAED65438AAB9A7D827F5E48ED7051343F47477671CFE7DC975D47659957C5BF739216971AC7A34FFC8F43DBC7A34F7C018ABC73EE18DBBE0AE77E307956FC7571DBDC37F1566B38DEF7315CF6E0ACD25F858CDFBF96292F219275BD8EF38F0E

213E3B2A347C73EFC20E3CB93D0F53BFG5211341D747B1264F1C99E68B558AF572ACE67A91972FEC5733E36F06EEB4A3FFD89BCD69405F5DA25F93FD6B4773C03F34A037789922BA56AEEF29F62B88F43B5ABB81E230C9FD15DF9FEF96EA02D2522669768C8DB214CB9EB6F979D32D568D5577C32A6F6ED3E2AE6665A7C651A68BD695A1A29BD697A1A68BD69269AEDCF4AF11BEBE8ED508BB95126527DD545DDD2F16F30BDA96E2264147BD43C3EF61B02EF96A9C344EF2B25F285994E26600AB438CB8A2E3416

768620F21F570FEBF757526F7ABD124B454786C6A3F9205DD06D313F164AA879840D5C9F2A38CB2A8F6DB207FD5628F9DF98756FG3ED87FFD7ACB60B13FB22C53BD1A770A4A39675DB827BCF8AC9E2A1A9A1FC72B3471497B8C212A00285F77180BF2FCD928B00CC797A57C6FC1534B289FAF5EC07282FED2046D49219666E8EB060FB668DEFDC017CB74ADE48B8F3C9622275153C272D8F035909D84DE087EE15224FF01C1B29E0943FA29FAC2DBAF3DF5C7DE4C5F116246795D14B89ED9AFD56D237A2783BEEB

9CEB1E61F21A20E265248E3760F24902EB600447C973D35308AC063F57556C237B8710C61964F39F6F23F277EB567C97D0CB8788414812CB5E8EGG28ABGGD0CB818294G94G88G88GC001ADB5414812CB5E8EGG28ABGG8CGGGGGGGGGGGGGGGGGE2F5E9ECE4E5F2A0E4E1F4E1D0CB8586GGGG81G81GBAGGG988FGGGG

**end of data**/

}

/**

* Devolver el valor de la propiedad Cam1.

* @return javax.swing.JPanel

*/

/* AVISO: ESTE M蒚ODO SE REGENERAR? */

private javax.swing.JPanel getCam1() {

if (ivjCam1 == null) {

try {

ivjCam1 = new javax.swing.JPanel();

ivjCam1.setName("Cam1");

ivjCam1.setOpaque(false);

ivjCam1.setBorder(new javax.swing.border.EtchedBorder());

ivjCam1.setLayout(new java.awt.CardLayout());

// user code begin {1}

// user code end

} catch (java.lang.Throwable ivjExc) {

// user code begin {2}

// user code end

handleException(ivjExc);

}

}

return ivjCam1;

}

/**

* Devolver el valor de la propiedad Cam2.

* @return javax.swing.JPanel

*/

/* AVISO: ESTE M蒚ODO SE REGENERAR? */

private javax.swing.JPanel getCam2() {

if (ivjCam2 == null) {

try {

ivjCam2 = new javax.swing.JPanel();

ivjCam2.setName("Cam2");

ivjCam2.setOpaque(false);

ivjCam2.setBorder(new javax.swing.border.EtchedBorder());

ivjCam2.setLayout(new java.awt.CardLayout());

// user code begin {1}

// user code end

} catch (java.lang.Throwable ivjExc) {

// user code begin {2}

// user code end

handleException(ivjExc);

}

}

return ivjCam2;

}

/**

* M閠odo al que se llama siempre que el componente lanza una excepci髇.

* @param exception java.lang.Throwable

*/

private void handleException(java.lang.Throwable exception) {

/* Elimine el comentario de las l韓eas siguientes para imprimir en la salida est醤dar las excepciones no capturadas */

// System.out.println(" EXCEPCI覰 NO CAPTURADA ");

// exception.printStackTrace(System.out);

}

public void initDisplay() { //setup the display

readJPG();

disconnect();

/*imageSize = new Dimension(image.getWidth(this), image.getHeight(this));

setPreferredSize(imageSize);

parent.setSize(imageSize);

parent.validate();

*/

initCompleted = true;

}

/**

* Inicializar la clase.

*/

/* AVISO: ESTE M蒚ODO SE REGENERAR? */

private void initialize() {

try {

// user code begin {1}

// user code end

setName("AxisCamera_V1");

setOpaque(false);

setLayout(new java.awt.GridBagLayout());

setSize(800, 392);

java.awt.GridBagConstraints constraintsCam1 = new java.awt.GridBagConstraints();

constraintsCam1.gridx = 0; constraintsCam1.gridy = 0;

constraintsCam1.fill = java.awt.GridBagConstraints.BOTH;

constraintsCam1.weightx = 1.0;

constraintsCam1.weighty = 1.0;

add(getCam1(), constraintsCam1);

java.awt.GridBagConstraints constraintsCam2 = new java.awt.GridBagConstraints();

constraintsCam2.gridx = 1; constraintsCam2.gridy = 0;

constraintsCam2.fill = java.awt.GridBagConstraints.BOTH;

constraintsCam2.weightx = 1.0;

constraintsCam2.weighty = 1.0;

add(getCam2(), constraintsCam2);

} catch (java.lang.Throwable ivjExc) {

handleException(ivjExc);

}

// user code begin {2}

AxisCamera_1 = new AxisCamera(getCam1(), "http://192.168.11.16/axis-cgi/jpg/image.cgi?resolution=352x240");

AxisCamera_2 = new AxisCamera(getCam2(), "http://192.168.11.12/oneshotimage.jpg");

new Thread(AxisCamera_1).start();

new Thread(AxisCamera_2).start();

// user code end

}

public static void main(String[] args) {

try {

JFrame frame = new JFrame();

AxisCamera_V1 aAxisCamera_V1;

aAxisCamera_V1 = new AxisCamera_V1();

frame.setContentPane(aAxisCamera_V1);

frame.setSize(aAxisCamera_V1.getSize());

frame.addWindowListener(new java.awt.event.WindowAdapter() {

public void windowClosing(java.awt.event.WindowEvent e) {

System.exit(0);

};

});

frame.show();

java.awt.Insets insets = frame.getInsets();

frame.setSize(frame.getWidth() + insets.left + insets.right, frame.getHeight() + insets.top + insets.bottom);

frame.setVisible(true);

} catch (Throwable exception) {

System.err.println("Se ha producido una excepci髇 en main() de javax.swing.JPanel");

exception.printStackTrace(System.out);

}

}

public void paint(Graphics g) { //used to set the image on the panel

if (AxisCamera_1.image != null) getCam1().getGraphics().drawImage(AxisCamera_1.image, 0, 0, getCam1());

if (AxisCamera_2.image != null) getCam2().getGraphics().drawImage(AxisCamera_2.image, 0, 0, getCam2());

repaint();

}

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();

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 readStream() { //the basic method to continuously read the stream

try {

while (true) {

connect();

readJPG();

parent.repaint();

disconnect();

}

} catch (Exception e) {

;

}

}

public void run() {

connect();

readStream();

}

public void update(Graphics g) {

paint(g);

}

}

nurvasia at 2007-7-14 22:28:32 > top of Java-index,Security,Cryptography...