Player vidéo en java

Player vidéo en java - Java - Programmation

Marsh Posté le 03-06-2008 à 16:31:30    

:hello: Bien le bonjour :-)

 

J'espère que vous allez tous bien.

 

Je me permets de poster un message car j'ai besoin de votre aide  :??:

 

J'ai réalisé un player vidéo fonctionnel en java. Il possède un bouton play, pause, stop, la gestion du volume ainsi qu'une barre de progression pour le temps.

 

Jusque là, pas de souci :-) Cependant, je souhaiterais pouvoir afficher le temps courant et je suis complètement perdue. Faut-il utiliser un thread ? C'est ce que j'ai tenté de faire, mais comme j'ai beaucoup de mal avec cette technologie, et bien cela ne fonctionne guère.

 

C'est pour cette raison que je me permet de faire appel à vous. J'espère que vous pourrez m'aider car je suis vraiment embêtée :-(

 

D'avance, je vous remercie et vous souhaite une belle journée.

 

Voici mon code :

 
Code :
  1. import java.awt.BorderLayout;
  2. import java.awt.Component;
  3. import java.awt.FlowLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.awt.event.WindowAdapter;
  7. import java.awt.event.WindowEvent;
  8.  
  9. import javax.media.Controller;
  10. import javax.media.ControllerEvent;
  11. import javax.media.ControllerListener;
  12. import javax.media.DurationUpdateEvent;
  13. import javax.media.GainControl;
  14. import javax.media.Manager;
  15. import javax.media.MediaLocator;
  16. import javax.media.Player;
  17. import javax.media.PrefetchCompleteEvent;
  18. import javax.media.RealizeCompleteEvent;
  19. import javax.media.Time;
  20. import javax.swing.BorderFactory;
  21. import javax.swing.ImageIcon;
  22. import javax.swing.JButton;
  23. import javax.swing.JFrame;
  24. import javax.swing.JLabel;
  25. import javax.swing.JOptionPane;
  26. import javax.swing.JPanel;
  27. import javax.swing.JSlider;
  28. import javax.swing.JTextField;
  29. import javax.swing.event.ChangeEvent;
  30. import javax.swing.event.ChangeListener;
  31.  
  32. public class test extends JFrame implements ControllerListener, Runnable
  33. {
  34. // Attributs de la classe
  35. private JTextField fldAffichageDuree;
  36. private JTextField fldAffichagePosition;
  37. private JLabel lbVolume;
  38.    private JButton bPlay = null;
  39.    private JButton bPause = null;
  40.    private JButton bStop = null;
  41.    private JSlider sSlider;
  42.    private JSlider sVolume;
  43. private Player player;
  44. private String repertoire = "file:Vidéos/";
  45. private String urlFilm;
  46. private Time duree;
  47. private JPanel videoPanel;
  48. private float t0;
  49. private float t1;
  50. private boolean intervalle;
  51. protected GainControl gain = null;
  52. boolean running;
  53. static Thread t;
  54.  
  55.  
  56.  
  57. /**
  58. * WMediaPlayer : Constructeur qui permet de créer l'interface graphique
  59. *
  60. * @_nomFichier String  : Nom du fichier du film à visualiser
  61. * @_t0         float   : Temps (en secondes) depuis où l'on veut visualiser la vidéo
  62. * S'il est vide, voir depuis le début
  63. * @_t1         float   : Temps (en secondes) jusqu'où où l'on veut visualiser la vidéo
  64. * S'il est vide, voir depuis le début
  65. * @_intervalle boolean : Soit on visualise toute la vidéo, soit un intervalle
  66. */
  67. public test(String _nomFichier, float _t0, float _t1, boolean _intervalle)
  68. {
  69. // Appel du constructeur de JFrame
  70.        super();
  71.        
  72.        // Récupérer les paramètres
  73.        t0 = _t0;
  74.        t1 = _t1;
  75.        intervalle = _intervalle;
  76.  
  77.        // Vérifier que le nom du fichier passé en paramètre ne soit pas nul
  78.        // Si c'est en ordre, chargement du film
  79.        if (_nomFichier != null)
  80.         fChargerFilm(_nomFichier);
  81.  
  82.        // Evénement lors de la fermeture du player
  83.     addWindowListener
  84.     (
  85.         new WindowAdapter()
  86.         {
  87.          public void windowClosing(WindowEvent we)
  88.          {
  89.          // Fermer le player
  90.          if (player != null)
  91.          {
  92.          player.close();
  93.          }
  94.          }
  95.         }
  96.     );
  97. }
  98.  
  99.  
  100. /**
  101. * fChargerFilm : Cette méthode permet de charger le film passé en paramètre
  102. *
  103. * @_nomFichier String : Nom du fichier du film à visualiser
  104. */
  105. public void fChargerFilm(String _nomFichier)
  106. {
  107. // Définir l'URL en fonction du nom du fichier
  108. urlFilm = repertoire + _nomFichier + ".avi";
  109.  
  110. // Création du player
  111. try
  112. {
  113.    player = Manager.createPlayer(new MediaLocator(urlFilm));
  114.    player.addControllerListener(this);
  115.    
  116.    // Si la création du player est en ordre, attributs de la fenêtre
  117.        setLocation(400, 200);
  118.        setTitle("Player" );
  119.        setVisible(true);
  120.    
  121.    // Cette fonction permet au player d'acquérir toutes les informations
  122.    // et toutes les ressources qui lui sont nécessaires sur le média
  123.        JOptionPane.showMessageDialog(this,
  124.     "Acquésition des ressources et des informations média en cours. \nPatientez S'il vous plait. : ", "Information", JOptionPane.WARNING_MESSAGE);  
  125.    player.realize();
  126.    player.start();
  127.    //fGestionTemps();
  128. }
  129. catch (Exception error)
  130. {      
  131.    // Afficher un message d'erreur si nécessaire
  132. JOptionPane.showMessageDialog(this,
  133. "Erreur lors de la création du player !\nMessage d'erreur : " +error.getMessage(), "Attention", JOptionPane.WARNING_MESSAGE);  
  134.  
  135. return;
  136. }
  137. }
  138.  
  139.  
  140. /**
  141. * controllerUpdate : Cette fonction intercepte tous les événements en  
  142. * provenance du playser (gestionnaire d'événements)
  143. *
  144. * @_event ControllerEvent : Un événement est intervenu sur un des composants
  145. */
  146. public void controllerUpdate(ControllerEvent _event)
  147. {
  148. // Donner la durée du film
  149. if  (_event instanceof DurationUpdateEvent)
  150. {
  151. duree = ((DurationUpdateEvent) _event).getDuration();  
  152. }
  153.  
  154.    // Créer les composants et les événements
  155.        if (_event instanceof RealizeCompleteEvent )
  156.        {        
  157.            // Création des composants
  158.     bPlay   = new JButton(new ImageIcon ("img/play.png" ));
  159.            bPause = new JButton(new ImageIcon ("img/pause.png" ));
  160.            bStop        = new JButton(new ImageIcon ("img/stop.png" ));
  161.            fldAffichageDuree    = new JTextField();
  162.            fldAffichagePosition = new JTextField();
  163.            lbVolume = new JLabel("Volume" );
  164.                          
  165.            // Récupérer le temps du film pour spécifier la barre de progression
  166.            // et l'afficher
  167.            duree = player.getDuration();
  168.            sSlider = new JSlider(JSlider.HORIZONTAL,0,(int)(duree.getSeconds()),0);
  169.            sVolume = new JSlider(JSlider.HORIZONTAL,0,10,10);
  170.            
  171.            // Gestionnaire d'événement sur le slider
  172.            sSlider.addChangeListener
  173.            (
  174.                new ChangeListener()
  175.                {
  176.                 // Lorsque le curseur se déplace
  177. public void stateChanged(ChangeEvent arg0)
  178. {
  179. // Déplacer la position du film
  180. float l_tempCourant = sSlider.getValue();
  181. player.setMediaTime(new Time(l_tempCourant));
  182. }
  183. }
  184.            );
  185.            
  186.            // Paramètres de la barre de progression
  187.            sSlider.setMajorTickSpacing((int) duree.getSeconds()/10);
  188.            sSlider.setMinorTickSpacing(2);
  189.            sSlider.setPaintTicks(true);
  190.            sSlider.setBorder(BorderFactory.createEmptyBorder(0,0,10,0));          
  191.            
  192.            // Gestionnaire d'événement sur le slider du volume
  193.            sVolume.addChangeListener
  194.            (
  195.                new ChangeListener()
  196.                {
  197.                 // Lorsque le curseur se déplace
  198. public void stateChanged(ChangeEvent arg0)
  199. {
  200. // Dès que l'utilisateur modifie la position du slider
  201. // ==> modifier la valeur du volume en conséquence
  202. // Récupérer la valeur du slider (de 0 à 10)
  203. int l_valeurVolume = sVolume.getValue();
  204. // Le gain est compris entre 0 et 1, donc multiplication par 0.1
  205. gain.setLevel((float) (l_valeurVolume * 0.1));
  206. }
  207. }
  208.            );
  209.            
  210.            // Panel regroupant les informations pour le volume
  211.            JPanel pVolume = new JPanel();
  212.            pVolume.add(lbVolume);
  213.            pVolume.add(sVolume);
  214.            
  215.         // Panel regroupant les boutons
  216.         JPanel pBouton = new JPanel(new FlowLayout());
  217.         pBouton.add(bPlay);
  218.         pBouton.add(bPause);
  219.         pBouton.add(bStop);
  220.        
  221.         // Panel regroupant les afficheurs
  222.         JPanel pAfficheur = new JPanel(new BorderLayout());
  223.         pAfficheur.add(fldAffichageDuree, BorderLayout.NORTH);
  224.         pAfficheur.add(fldAffichagePosition, BorderLayout.CENTER);
  225.         pAfficheur.add(pVolume, BorderLayout.SOUTH);
  226.        
  227.         // Panel regroupant la barre de progression, les boutons et l'afficheur
  228.            JPanel pControle = new JPanel(new BorderLayout());
  229.            pControle.add(sSlider, BorderLayout.NORTH);
  230.            pControle.add(pAfficheur, BorderLayout.CENTER);
  231.            pControle.add(pBouton, BorderLayout.SOUTH);
  232.            
  233.            // Paramètres de l'afficheur
  234.            fldAffichageDuree.setEditable(false);
  235.            fldAffichagePosition.setEditable(false);
  236.            fldAffichageDuree.setText("Durée du film : "+(float)duree.getSeconds()/60 + " minutes" );
  237.            
  238.            if (videoPanel == null)
  239.            {
  240.             // Création du panel
  241.             videoPanel = new JPanel();
  242.                videoPanel.setLayout(new BorderLayout());
  243.                getContentPane().add(videoPanel, BorderLayout.CENTER);
  244.            }
  245.            else
  246.                videoPanel.removeAll();
  247.        
  248.            // Récupérer le composant contenant l'image provenant du player
  249.            Component vis = player.getVisualComponent();
  250.            if (vis != null)
  251.            {
  252.             // Ok donc ajout de l'aspect visuel du média
  253.             videoPanel.add(vis, BorderLayout.CENTER);
  254.             videoPanel.add(pControle, BorderLayout.SOUTH);
  255.             videoPanel.setVisible(true);
  256.                this.pack();
  257.            }
  258.  
  259.            // Evénements sur les boutons
  260.            // Bouton "play"
  261.            bPlay.addActionListener
  262.            (
  263.             new ActionListener()
  264.                {
  265.             public void actionPerformed(ActionEvent e)
  266.                    {
  267.             player.start();
  268.             // FAIRE QUE LE THREAD CONTINUE
  269.                    }
  270.                }
  271.            );
  272.            
  273.            // Bouton "pause"
  274.            bPause.addActionListener
  275.            (
  276.             new ActionListener()
  277.                {
  278.             public void actionPerformed(ActionEvent e)
  279.                    {
  280.             // METTRE LE THREAD EN PAUSE
  281.             try
  282.             {
  283. t.wait();
  284. }
  285.             catch (InterruptedException e1)
  286.             {
  287. e1.printStackTrace();
  288. }
  289.            
  290.             player.stop();
  291.             player.deallocate();
  292.                    }
  293.                }
  294.            );
  295.  
  296.            // Bouton "stop"
  297.            bStop.addActionListener
  298.            (
  299.             new ActionListener()
  300.                {
  301.             public void actionPerformed(ActionEvent e)
  302.                    {
  303.                         player.stop();
  304.                         player.deallocate();
  305.                         // Remettre la vidéo au début
  306.                         player.setMediaTime(new Time(0));
  307.                         // Remettre à la barre de progression à 0
  308.                         sSlider.setValue(0);
  309.                         if (player.getTargetState() < Player.Started)
  310.                         player.prefetch();
  311.                        
  312.                         // ARRETER LE THREAD
  313.                     }
  314.                }
  315.            );
  316.            
  317.            // Placer la vidéo à l'endroit approprié
  318.     player.setMediaTime(new Time(t0));
  319.     sSlider.setValue((int) t0);
  320.        }
  321.        
  322.        if (_event instanceof PrefetchCompleteEvent)
  323.        {
  324.         // Récupérer le gain du player
  325.         gain = (GainControl) player.getControl("javax.media.GainControl" );
  326.        }
  327. }
  328.  
  329. public static void main(String[] args)
  330. {
  331. //new test("Issco-35", 0, 0, false);
  332.        
  333.        t = new Thread(new test("Issco-35", 0, 0, false));
  334.        t.start();
  335. }
  336.  
  337.  
  338.  
  339. public void run()
  340. {
  341. // Etat du player
  342.     int state = player.getState();
  343.    
  344.        while (state != Controller.Started)
  345.        {
  346.         try
  347.         {
  348.         t.sleep(100);
  349.         state = player.getState();
  350.         }
  351.         catch( Exception e )
  352.         {
  353.         e.printStackTrace();
  354.         }
  355.        }
  356.  
  357.        while(t.isAlive())
  358.        {
  359. try
  360. {
  361. Time time = player.getMediaTime();
  362. state = player.getState();
  363. double seconds = time.getSeconds();
  364. if (seconds >= 0.0d)
  365. {
  366. System.out.println( "Time: " + seconds);
  367. }
  368. if (state != Controller.Started && state != Controller.Prefetching && state != Controller.Realizing )
  369. {
  370. running = false;
  371. }
  372. t.sleep(1000);
  373. }
  374. catch( Exception e )
  375. {
  376. e.printStackTrace();
  377. }
  378.        }
  379. }
  380. }


Message édité par Elmoricq le 03-06-2008 à 16:36:35
Reply

Marsh Posté le 03-06-2008 à 16:31:30   

Reply

Marsh Posté le 04-06-2008 à 15:16:02    

Problème résolu :D

Reply

Marsh Posté le 23-04-2013 à 00:49:53    

tu peux m'envoyer le code correcte svp ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed