Lire Flux video d'une camera IP HikVision sous Java

Fermé
JPrginfo Messages postés 4 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 21 septembre 2020 - 13 déc. 2018 à 19:01
JPrginfo Messages postés 4 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 21 septembre 2020 - 16 déc. 2018 à 21:34
Bonjour,
je veux lire le flux video d'une camera IP et l'affiche dans une JFrame, j'utilisé un code de lecture d'une camera Axis mais c'a n'a pas fonctionner pour moi.je me bloque dans l'erreur suivante :
Not a JPEG file: starts with 0x3c 0x68
voici le code :
package ConnectCam;

import java.net.*;
import com.sun.image.codec.jpeg.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;

public class AxisCamera extends JPanel implements Runnable {
public boolean useMJPGStream = true;
public String jpgURL="http://admin:12345@192.168.0.2/doc/page/login.asp?_1544621806992";
public String mjpgURL="http://admin:12345@192.168.0.2/doc/page/login.asp?_1544621806992";
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
  • @param parent_ */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 JOptionPane.showMessageDialog(this, e.getMessage());try{huc.disconnect();Thread.sleep(60);}catch(InterruptedException ie){ JOptionPane.showMessageDialog(this, e.getMessage()+"error0"); huc.disconnect();connect();}connect();}catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()+"error1");}} public void initDisplay(){ //setup the displayif (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(IOException e){ JOptionPane.showMessageDialog(this, e.getMessage()+"error2");}} @Overridepublic void paint(Graphics g) { //used to set the image on the panelif (image != null)g.drawImage(image, 0, 0, this);} public void readStream(){ //the basic method to continuously read the streamtry{if (useMJPGStream){while(true){readMJPGStream();parent.repaint();}}else{while(true){connect();readJPG();parent.repaint();disconnect(); }} }catch(Exception e){ JOptionPane.showMessageDialog(this, e.getMessage()+"error3");}}public void readMJPGStream(){ //preprocess the mjpg stream to remove the mjpg encapsulationreadLine(3,dis); //discard the first 3 linesreadJPG();readLine(2,dis); //discard the last two lines} public void readJPG(){ //read the embedded jpeg imagetry{JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(dis);image = decoder.decodeAsBufferedImage();}catch(ImageFormatException | IOException e){ JOptionPane.showMessageDialog(this, e.getMessage()); System.out.println(""+e.getMessage()); disconnect();}} public void readLine(int n, DataInputStream dis){ //used to strip out the header linesfor (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 thisbyte[] 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 likeif(t.equals(lineEnd)) end=true;}}catch(IOException e){ JOptionPane.showMessageDialog(this, e.getMessage()+"error5");} }@Overridepublic void 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);AxisCamera axPanel = new AxisCamera(jframe);new Thread(axPanel).start();jframe.getContentPane().add(axPanel);jframe.setBounds(200, 500, 900, 600);jframe.pack();jframe.setVisible(true);}}


l'erreur et sur : image = decoder.decodeAsBufferedImage();

si qu'il q'un a une idée SVP
A voir également:

2 réponses

abdel550 Messages postés 46 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 13 décembre 2018 44
13 déc. 2018 à 19:14
essaie de le deboguer sur visual studio il peut te donner des indices sur ton app
0
JPrginfo Messages postés 4 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 21 septembre 2020
16 déc. 2018 à 21:34
Bonjour,
j'ai réussi a résoudre ce problème Grace a la bibliothèque Opencv, un de mes problème est que le module de la camera que j'utilise ne prend pas en charge le Protocol HTTP.
pour cela j'ai procéder au Protocol RTSP pour ce connecter a la camera :

VideoCapture Video_IP = new VideoCapture("rtsp://admin:12345@192.168.0.2:554/h264");
0