ça marche bien ton code pauline , seulement ma cam est chinoise et je sé pas que dois je ajouter a l'url (IP) au lieu de video/mjpeg..... , sinon y'a til un solution parallele JMF / DSJ/jipcam .????merci
ça marche bien ton code pauline , seulement ma cam est chinoise et je sé pas que dois je ajouter a l'url (IP) au lieu de video/mjpeg..... , sinon y'a til un solution parallele JMF / DSJ/jipcam .????merci
Oui ça marche bien , je pense que tu peux trouver l'url si tu connnais au moins la marque de la caméra. Voici des exemple pour les types de camera que j'utilise:
Axis = "/axis-cgi/mjpg/video.cgi";
Dlink = "/video/mjpg.cgi";
Heden = "/videostream.cgi";
Trendnet = "/cgi/mjpg.cgi";
Trendnet2 = "/cgi/mjpg/mjpg.cgi";
ça a l'air de changer en fonction du type de camera
Comme je l'ai dit dans ce fil, l'adresse n'est pas toujours la meme en fonction de la camera. Souvent, cette info se trouve dans la doc.
A défaut, le plus simple est de taper l'ip de la camera dans un browser. Souvent, ces cameras embarquent un serveur web et un site qui permet d'acceder au flux video. Il faut donc naviguer sur le site embarqué et regarder l'url utilisée pour le flux.
a+
merci pauline , hwoarang offete ma camera est une foscam ...... g utilisé snapshot.cgi pour lurl jpg et videostream.cgi pour mjpg , tt marche bien ..... sauf que j'ai pas compris a 100% le source je sais pas si vous pouvez le commenter un peu surtt sur la partie de readline et sa relation avec readmjpg ................ je sais que j'ai trop demandé , allé pleaaase
En fait, un flux mjpeg est constitué de plusieurs images jpeg. Pour chacune d'elles, il y a des informations sur l'image (par exemple sa taille) puis l'image elle meme. Dans notre cas, on cherche à afficher les images dans un JPanel. Autrement dit, à extraire les jpeg. Il faut donc faire des readline pour recupérer les informations puis, on peut lire la jpeg en elle meme.
Merci encore hrng mais je rencontre encore des difficultés avec readline , je crois que je suis pas tres habitué a la syntaxe , c pour ça que je vous pris autre fois quelqu'un me commente la partie de code de la fonction readline(); ........ et pourkoi on lapplique dans readmjpg avec des paramatres 2 4 et pour quoi avant et apres readjpg(); peace a vs
La fonction readline() permet de lire continuellement le flux mjpeg
On l'applique avec les paramètres 2 4 pour ignorer tout ce qui n'est pas image(les en tetes du flux). Pour un flux axis par exempleEn fait, un flux mjpeg est constitué de plusieurs images jpeg. Pour chacune d'elles, il y a des informations sur l'image (par exemple sa taille) puis l'image elle meme. Dans notre cas, on cherche à afficher les images dans un JPanel. Autrement dit, à extraire les jpeg. Il faut donc faire des readline pour recupérer les informations puis, on peut lire la jpeg en elle meme.
readLine(4, dis); //on ignore es 4 premières lignes
readJPG();//on lit l'image jpeg
readLine(1, dis);// on ignore la dernière ligne.
Parce que le flux reçu est de la forme
4 lignes en tete - image _ une ligne queue ,4 lignes en tete - image _ une ligne queue,4 lignes en tete - image _ une ligne queue,.......
Bonjour tout le monde , je reviens avec un nouveau petit probleme , j'ai beaucoup avancé sur ce sujet , j'ai fait la visualisation , enregistrement , detection de mouvements ... MAIS je n'arrive pas encore a visualiser deux camera (ou plus).... en meme temps , il me semble que comme la classe Axiscamera implemente runnable donc c peut etre un pbm de thread .... please je suis coincéé
La classe axisCamera étend également JPanel, si tu veux afficher 2 caméras , il suffit de créer 2 instances d'axis caméras et de lancer 2 threads différents.
C bon pauline75 merci pour la reponse , sa marche la visualisation de deux camera mais pas en creant instance de axiscamera et jframe ....... mais en dupliquant la classe elle meme (dans le workspace) donc c pas une solution standard genre : visualiser 2 3 4 n cameras ... quelqu'un have an idea
Moi j'instancie juste la classe Axiscamera à chaque fois que je veux ajouter une caméra et lui associe un thread, j'ai aucun problème je peux aller jusqu'à 9 caméras
Bonjour
Voila mon problème c'est que je dois lancer des requêtes de commande ptz à une caméra ip (foscam) via une application java. Pour me connecter pas de problème, j'arrive d'ailleurs à recevoir un flux vidéo de la cam.
Mais dès que je souhaite commander un déplacement via la cgi ptz, ca bug. Sur le site web de manipulation, je dois spécifier des id/mdp. Je les ai en ma possession mais je ne vois pas trop comment les associer à URLConnection.
Merci d'avance
il faut instancier 2 fois la classe axisCamera et associer un thread d'affichage à chaque instance, dupliquer la classe n'est pas une bonne solution. Imagine toi si tu as 100 caméras...
j'ai un camerea ip Planet ICA-100C (v2),je veux afficher le video de ma camera . j'essaie avec ce code il m'affiche qu'une image.y'a t_il quelq'un qui peut m'aider?
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 Camera_Axis extends JPanel implements Runnable {
public boolean useMJPGStream = true;
public String jpgURL="http://192.168.1.130/IMAGE.JPG";
public String mjpgURL="http://192.168.1.130/video.cgi";
private Image image=null;
public Dimension imageSize = null;
public boolean connected = false;
private boolean initCompleted = false;
HttpURLConnection huc=null;
Component parent;
DataInputStream dis;
/** Creates a new instance of AxisCamera */
public Camera_Axis() {
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 paint(Graphics g) { //used to set the image on the panel
if (image != null)
g.drawImage(image, 10, 10, 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() {
readLine(3,dis); //discard the first 3 line
readJPG();
readLine(2,dis);
}
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 run() {
while(true){
connect();
readStream();
}
}
public static void main(String[] args) {
JFrame jframe = new JFrame();
jframe.setSize(900, 900);
jframe.setVisible(true);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Camera_Axis axPanel = new Camera_Axis();
new Thread(axPanel).start();
jframe.getContentPane().add(axPanel);
jframe.pack();
jframe.show();
}
}
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager