Autore Topic: problema jmf:webcam in java da interfacciare successivamente in android  (Letto 1091 volte)

Offline HyBriiD

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG-Optimus
  • Sistema operativo:
    Ubuntu 10.10 - Windows 7, XP
ciao ragazzi, come da titolo ho un problema nel visualizzare la webcam in un mio programma scritto in java con il jmf. da parecchi giorni sto cercando una soluzione ma non riesco a venirne a capo; il problema sostanzialmente è più di java che rispetto ad android, cui vorrò interfacciarmi successivamente. Per cui scusatemi se andrò un po fuori tema ma non so a chi altri rivolgermi, in quanto non ricevo risposte in altri forum nei quali ho espresso il problema. Spero quindi che qualcuno di voi sia in grado di aiutarmi visto che siete in larga parte dei programmatori professionisti. vorrei fare una breve introduzione al problema effettivo: ho cercato con successo ed ho trovato su internet molti tutorial sulla jmf, i quali forniscono esempi su come visualizzare il flusso della webcam su un oggetto di classe JFrame. Il problema è che in un dato esempio che vi mostrerò ricevo un NullPointerException dopo aver istanziato l'oggetto mentre in un altro esempio che alla fine ha come risultato lo stesso effetto del precedente ricevo un MalformedURLException. Aggiungo che ho scaricato JMFStudio il quale riesce a visualizzare la webcam correttamente. La cosa strana è che JMFStudio usa presso che le stesse righe di codice e tutti i tutorial si basano sulle sue API. Una nota che secondo me è significativa è il fatto che quando avvio quel programma il mio Windows 7 a 64 bit attiva la modalità di retrocompatibilità. Adesso vi faccio vedere due programmi che in teoria dovrebbero funzionare ma che mi danno errori strani (li ho segnalati nelle righe incriminate).


Codice (Java): [Seleziona]
import javax.media.ControllerAdapter;
import javax.media.RealizeCompleteEvent;


public class MyControllerListener extends ControllerAdapter{
   
   
    @Override
    public void realizeComplete(RealizeCompleteEvent event){
       
        ContenitoreManiglie.getMain().setComponentiVisuali();
    }

}

//altro file class

import java.awt.BorderLayout;
import java.awt.Component;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.swing.JFrame;


public class Main extends JFrame{
   
    private Player player=null;
    private MediaLocator mediaLocator=null;
    private Component comp=null;
    private MyControllerListener MyCL=new MyControllerListener();
   
   
    public boolean setMediaLocator(){
       
        System.out.println("setmedialocator");
        this.mediaLocator=new MediaLocator("vfw://0");
        if(this.mediaLocator!=null)return true;
        else return false;
       
    }        
   
    public void setPlayer() throws IOException, NoPlayerException{
        try{
        this.player=Manager.createPlayer(mediaLocator);
        this.player.start();     //<- NULL POINTER EXCEPTION
        }
        catch(Exception e){
            System.out.println("problema nel settaggio del player");
        }
    }
   
    public void setComponentiVisuali(){
       
        comp=player.getVisualComponent();
        add(comp,BorderLayout.NORTH);
        this.pack();
    }
   
    public void settaggioInferfaccia(){
       
        ContenitoreManiglie.setMain(this);
        setLayout(new BorderLayout());
       
    }
   
    public void settaggioPlayer() throws IOException, NoPlayerException{
       
        boolean mediaLoc=this.setMediaLocator();
        if(mediaLoc) {
            System.out.println("mediaLocator settato");
           
            this.setPlayer();
            this.player.addControllerListener(MyCL);        
        }
       
    }
   
    public Main() throws IOException, NoPlayerException{
        System.out.println("main");
        this.settaggioInferfaccia();
        this.settaggioPlayer();
        this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
       
    }
   
   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new Main().setVisible(true);
                } catch (IOException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                } catch (NoPlayerException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
}

//altro file class



/**
 *
 * @author santennio
 */

public final class ContenitoreManiglie {
   
    private static Main M;
   
    public static void setMain(Main m){
       
        ContenitoreManiglie.M=m;
       
    }
   
    public static Main getMain(){
        return ContenitoreManiglie.M;
       
    }

}

mentre il secondo programma

Codice (Java): [Seleziona]
import java.awt.BorderLayout;
import javax.media.*;
import javax.media.protocol.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import javax.media.control.FormatControl;
import javax.media.format.VideoFormat;



public class test {
       
        public static void main(String[] args){
                test t = new test();
                t.getCam();
        }
       
        public void getCam(){
        try{
 
                /* Grab the default web cam*/
                MediaLocator ml = new MediaLocator("vfw://0");  

                /* Create my data source */
                DataSource ds = Manager.createDataSource(ml);   //<--MalformedURLException unknow protocol: vfw
 
                requestFormatResolution(ds);
 
                /* Create & start my player */
                Player p = Manager.createRealizedPlayer(ds);

                p.start();
               
                Thread.currentThread().sleep(1000);

                /* code for creating a JFrame and adding the visual component to it */
                JFrame jfrm=new JFrame("Testing Webcam");
                                jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                if(p.getVisualComponent()!=null)jfrm.getContentPane().add(p.getVisualComponent());
                                if(p.getControlPanelComponent()!=null)jfrm.getContentPane().add
                                                (p.getControlPanelComponent(),BorderLayout.SOUTH);
                                jfrm.pack();
                                jfrm.setLocationRelativeTo(null);
                                jfrm.setVisible(true);
                                jfrm.setSize(320,240);

                               
                }catch(Exception e){
                e.printStackTrace();             
                }
        }  
       
       
               
        public boolean requestFormatResolution(DataSource ds) {
 
                if (ds instanceof CaptureDevice) {
                        FormatControl[] fcs = ((CaptureDevice) ds).getFormatControls();
                        for (FormatControl fc : fcs) {
                                Format[] formats = ((FormatControl) fc).getSupportedFormats();
                                for (Format format : formats) {
                                        if ((format instanceof VideoFormat) &&
                                                (((VideoFormat)format).getSize().getHeight() <= 240) &&
                                                (((VideoFormat)format).getSize().getWidth()  <= 320)) {
                                                        ((FormatControl) fc).setFormat(format);
                                                        return true;
                                        }
                                }
                        }
                }
                return false;
        }
       
       

}


ho importato i jar richiesti che sono customizer.jar, jmf.jar,mediaplayer.jar e multiplayer.jar.... la domanda è: perchè ricevo questi errori??

« Ultima modifica: 01 Ottobre 2011, 15:32:29 CEST da HyBriiD »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:problema jmf:webcam in java da interfacciare successivamente in android
« Risposta #1 il: 01 Ottobre 2011, 18:34:18 CEST »
0
Mi spiace, io non non sono in grado di aiutarti, Java lo uso solo per android.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline HyBriiD

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    LG-Optimus
  • Sistema operativo:
    Ubuntu 10.10 - Windows 7, XP
Re:problema jmf:webcam in java da interfacciare successivamente in android
« Risposta #2 il: 06 Ottobre 2011, 15:53:45 CEST »
0
dunque proverò con la jni ossia la java native interface... da li proverò a gestire la webcam grazie alla libreria OpenCv.h... vi terrò informati in quanto poi vorrei "inaugurare" l'app di android ed anche il programma per pc proprio in questo forum...