IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

[JMF] 2 webcams simultanément


Sujet :

Multimédia Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut [JMF] 2 webcams simultanément
    Bonjour!

    J'utilise depuis peu l'API JMF pour réaliser une application Swing lisant 2 (ou plus) streams en simultané issus de webcams.

    OS sur lequel doit tourner l'application : Windows (Rrrr...)
    Deux webcams : Logitech C300 et Logitech QuickCam Orbit/Sphere AF

    J'arrive à afficher le flux d'une webcam grâce à ces lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MediaLocator mediaSource = new MediaLocator ("vfw:Microsoft WDM Image Capture (Win32):0");
    DataSource dataSource = (DataSource) Manager.createDataSource(mediaSource);            
    player = Manager.createRealizedPlayer(dataSource);			
    video = (HeavyComponent) player.getVisualComponent();
    if(null!=video) add(video,BorderLayout.WEST);
    Mais pour deux webcams JMF Registry ne détecte qu'un seul device, le même que celui utilisé pour une webcam : "vfw:Microsoft WDM Image Capture (Win32):0".

    Quelqu'un sait-il comment :
    • identifier plusieurs webcams sous windows en passant par le protocole VFW/WDM ou un autre ?
    • lire deux streams vidéos simultanément issus de webcams, sous windows et en utilisant une autre méthode, API/framework ou autre chose que Java (avec des perfs raisonnables) afin de réexploiter plusieurs de ses frames ?

  2. #2
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut
    Je viens de trouver une solution sur ce site :
    dsj - DirectShow <> Java wrapper

    Pour ceux que ça intéresse, voici une classe rapidement codée testant l'API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    import de.humatic.dsj.DSCapture; 
    import de.humatic.dsj.DSFilterInfo; 
     
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage; 
    import java.beans.PropertyChangeEvent;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Webcam implements java.beans.PropertyChangeListener, Runnable{ 
        private DSCapture dsc = null, dsc2 = null; 
        private WebcamPanel wp1,wp2;    
     
        public WebcamPanel getWp1() {
    		return wp1;
    	}
     
    	public WebcamPanel getWp2() {
    		return wp2;
    	}
     
    	public Webcam(){ 
        	DSFilterInfo[][] qD = DSCapture.queryDevices();    	
        	DSFilterInfo dNR = DSFilterInfo.doNotRender();
     
            dsc = new DSCapture(0, qD[0][0], false, dNR, this); 
            dsc2 = new DSCapture(0, qD[0][1], false, dNR, this);
     
            wp1 = new WebcamPanel(); 
            wp2 = new WebcamPanel();
        }
     
        public BufferedImage getImageFromFirstWebcam(){ 
            return dsc.getImage(); 
        } 
     
        public BufferedImage getImageFromSecondWebcam(){ 
            return dsc2.getImage(); 
        } 
     
        public void propertyChange(PropertyChangeEvent evt){} 
     
        @Override
    	public void run() {
    		while(true){
    			wp1.setImage(getImageFromFirstWebcam());
    	    	wp2.setImage(getImageFromSecondWebcam());
     
    	    	wp1.updatePanelAndRepaint();
    	    	wp2.updatePanelAndRepaint();
     
    	    	// to avoid jerky images
    	    	try {
    				Thread.sleep(10);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
     
        public class WebcamPanel extends JPanel{
     
    		private static final long serialVersionUID = 5882379168162897487L;
    		private BufferedImage image;		
     
    		public BufferedImage getImage() {
    			return image;
    		}
     
    		public void setImage(BufferedImage image) {
    			this.image = image;
    		}
     
    		public WebcamPanel(){
    			setPreferredSize(new Dimension(320,240));
    		}
     
    		public void paint(Graphics g){
    			g.drawImage(image, 0, 0, null);
    		}
     
    		public void updatePanelAndRepaint() {
    			setImage(image);
    			repaint();
    			updateUI();
    		}
     
        }
     
        public static void main(String[] args){
        	Webcam w = new Webcam();
        	JFrame f = new JFrame("2 webcams");
        	Webcam.WebcamPanel p1 = w.getWp1();
        	Webcam.WebcamPanel p2 = w.getWp2();
     
        	FlowLayout layout = new FlowLayout();
        	f.setLayout(layout);    	
     
        	p1.setVisible(true); p2.setVisible(true);    	
        	f.add(p1); f.add(p2);
     
        	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        	f.pack();
        	f.setVisible(true);
     
        	Thread thread = new Thread(w);
        	thread.start();
        }
     
    }

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 28
    Par défaut
    Citation Envoyé par seith Voir le message
    Je viens de trouver une solution sur ce site :
    dsj - DirectShow <> Java wrapper

    Pour ceux que ça intéresse, voici une classe rapidement codée testant l'API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    import de.humatic.dsj.DSCapture; 
    import de.humatic.dsj.DSFilterInfo; 
     
    import java.awt.Dimension;
    import java.awt.FlowLayout;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage; 
    import java.beans.PropertyChangeEvent;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Webcam implements java.beans.PropertyChangeListener, Runnable{ 
        private DSCapture dsc = null, dsc2 = null; 
        private WebcamPanel wp1,wp2;    
     
        public WebcamPanel getWp1() {
    		return wp1;
    	}
     
    	public WebcamPanel getWp2() {
    		return wp2;
    	}
     
    	public Webcam(){ 
        	DSFilterInfo[][] qD = DSCapture.queryDevices();    	
        	DSFilterInfo dNR = DSFilterInfo.doNotRender();
     
            dsc = new DSCapture(0, qD[0][0], false, dNR, this); 
            dsc2 = new DSCapture(0, qD[0][1], false, dNR, this);
     
            wp1 = new WebcamPanel(); 
            wp2 = new WebcamPanel();
        }
     
        public BufferedImage getImageFromFirstWebcam(){ 
            return dsc.getImage(); 
        } 
     
        public BufferedImage getImageFromSecondWebcam(){ 
            return dsc2.getImage(); 
        } 
     
        public void propertyChange(PropertyChangeEvent evt){} 
     
        @Override
    	public void run() {
    		while(true){
    			wp1.setImage(getImageFromFirstWebcam());
    	    	wp2.setImage(getImageFromSecondWebcam());
     
    	    	wp1.updatePanelAndRepaint();
    	    	wp2.updatePanelAndRepaint();
     
    	    	// to avoid jerky images
    	    	try {
    				Thread.sleep(10);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
     
        public class WebcamPanel extends JPanel{
     
    		private static final long serialVersionUID = 5882379168162897487L;
    		private BufferedImage image;		
     
    		public BufferedImage getImage() {
    			return image;
    		}
     
    		public void setImage(BufferedImage image) {
    			this.image = image;
    		}
     
    		public WebcamPanel(){
    			setPreferredSize(new Dimension(320,240));
    		}
     
    		public void paint(Graphics g){
    			g.drawImage(image, 0, 0, null);
    		}
     
    		public void updatePanelAndRepaint() {
    			setImage(image);
    			repaint();
    			updateUI();
    		}
     
        }
     
        public static void main(String[] args){
        	Webcam w = new Webcam();
        	JFrame f = new JFrame("2 webcams");
        	Webcam.WebcamPanel p1 = w.getWp1();
        	Webcam.WebcamPanel p2 = w.getWp2();
     
        	FlowLayout layout = new FlowLayout();
        	f.setLayout(layout);    	
     
        	p1.setVisible(true); p2.setVisible(true);    	
        	f.add(p1); f.add(p2);
     
        	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        	f.pack();
        	f.setVisible(true);
     
        	Thread thread = new Thread(w);
        	thread.start();
        }
     
    }

    bonjouir pouvez vous nous aider sil vous plait pour faire un streaming en combinant le DSJ et le RTSP ou bien en général

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/03/2014, 12h18
  2. [JMF] Capture Webcam & createRealizedPlayer
    Par plut0nium dans le forum Multimédia
    Réponses: 4
    Dernier message: 09/03/2011, 15h31
  3. Connexion JMF a webcam Integrée
    Par enty01 dans le forum Multimédia
    Réponses: 1
    Dernier message: 04/12/2010, 03h07
  4. [JMF]Webcam
    Par Goldocrack dans le forum Multimédia
    Réponses: 3
    Dernier message: 22/07/2005, 14h56
  5. [JMF] webcam non détectée
    Par Goldocrack dans le forum Multimédia
    Réponses: 3
    Dernier message: 17/07/2005, 00h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo