15/1/10

Reproductor de videos en java: Los controles - 3ra parte

TERCERA PARTE
CONTROLES DE REPRODUCCION DE LA API DE JAVA MEDIA FRAMEWORK


En esta tercera parte del video tutorial "Reproductor de videos en java" se introducen los controles de reproduccion PLAY, STOP, MUTE, asi como el control de volumen, todo esto haciendo uso de las herramientas graficas de netbeans.





La clase paneldevideo.java modificada:


import java.awt.Component;
import java.awt.Dimension;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;

/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */

//la clase se extiende de un Jpanel para heredar sus atributos
public class paneldevideo extends javax.swing.JPanel{
private Player mediaPlayer;
private Component video;

    //como datos de entrada tenemos
    //URL la url del archivo a reproducir
    //Las dimensiones del contenedor que tendra el reproductor
    public paneldevideo(URL url, Dimension d){
        try {
            // se forzara el uso de componentes  de render ligero
            Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true);
            mediaPlayer = Manager.createRealizedPlayer(url);
            //ahora se declara un Component adecuado para el uso en una GUI
            video = mediaPlayer.getVisualComponent();
            // añadimos al componente las dimensiones del contenedor            
            video.setSize(d);                        
            add(video);                        
            //control de excepciones            
        } catch (IOException ex) {
            Logger.getLogger(paneldevideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoPlayerException ex) {
            Logger.getLogger(paneldevideo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (CannotRealizeException ex) {
            Logger.getLogger(paneldevideo.class.getName()).log(Level.SEVERE, null, ex);
        }       
    }
    
    //volumen
    public float getvolumen(){
        return mediaPlayer.getGainControl().getLevel();
    }
    //coloca un valor float correspondiente al volumen
    public void setvolumen(float volumen){
        mediaPlayer.getGainControl().setLevel(volumen);
    }
    
    //control de MUTE
    public void MUTE(){
        if(mediaPlayer.getGainControl().getMute())
        {
            mediaPlayer.getGainControl().setMute(false);
        }
        else
        {
            mediaPlayer.getGainControl().setMute(true);
        }      
    }
    
    //controlde PLAY y STOP
    public void STOP(){
        mediaPlayer.stop();
        video.hide();
    }
    
    public void PLAY(){
        mediaPlayer.start();
        video.show();
    }  
}



  1. La Interfaz
  2. Introduccion a la API JMF

10 comentarios:

  1. y como es un media player que reprodusca audio y video en un solo programa con lista

    ResponderEliminar
  2. Sabes que cuando cambio el tamaño durante la reproduccion el video se pierde (el sonido se escucha pero la imagen no se ve), ¿como podria arreglar eso?

    ResponderEliminar
  3. el que busca encuentra :)

    http://jc-mouse.blogspot.com/2010/03/respuesta-redimensionar-el-video-en-jmf.html

    ResponderEliminar
  4. Hola,

    Primero de todo felicitarte por el blog. Estos posts sobre JMF me están ayudando muchísimo.

    El problema que tengo es que si ejecuto el reproductor en linux no funciona el control del volumen ni el mute. ¿Alguien sabe como se puede solucionar esto?

    ResponderEliminar
  5. en linux ni idea hermano, se me frego la maquina donde tenia linux y hasta ahora no lo arreglo :)

    ResponderEliminar
  6. Hola brother te felicito por el blog q es too un exito..queria hacerte una consulta loq pasa sq m descargue dela pagina de sun el jmf pero en la q esta en zip y ahi tiene 4 archivos jar, las cuales las pongo en mi proyecto de reproductor de video pero al compilar me salen errores:S..

    Unable to handle format: MPEG, 320x240, FrameRate=25.0, Length=115200
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at reproductorjava.paneldevideo.(paneldevideo.java:35)
    at reproductorjava.reproductor.jButton2ActionPerformed(reproductor.java:246)
    at reproductorjava.reproductor.access$400(reproductor.java:10)
    at reproductorjava.reproductor$6.actionPerformed(reproductor.java:135)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6503)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6268)
    at java.awt.Container.processEvent(Container.java:2213)
    at java.awt.Component.dispatchEventImpl(Component.java:4859)
    at java.awt.Container.dispatchEventImpl(Container.java:2271)
    at java.awt.Component.dispatchEvent(Component.java:4685)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4816)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4476)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4406)
    at java.awt.Container.dispatchEventImpl(Container.java:2257)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4685)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

    ResponderEliminar
  7. funciona muy bien. Tengo un caso especial, ya que necesito reproducir el mismo video que dura 15 segundos cada 2 minutos, y veo que la memoria que consume cada vez q lo reproduce se incrementa de forma descomunal, inicia con 50MB y cuando llega a más de 800MB el programa colapsa, y adicional al video, la aplicacion hace consultas a BD access. Como puedo solucionar esto al compilarlo en un .jar???

    Agradezco la colaboración.

    ResponderEliminar
  8. Si es solo un video debes cargarlo en memoria una vez y utilization las veces que quieres, e ll consumo de memoria tambien se debe al formato del video.
    Para alternar la reproduccion usa hilos y timer

    :)

    ResponderEliminar
  9. Hombre tengo un problema, no me reproduce ningún formato... :( me aparece este error

    Unable to handle format: MPEG, 320x240, FrameRate=25.0, Length=115200
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException


    ME podrías colaborar por favorr??? :) Te lo agradezco jc Mouse.

    ResponderEliminar
  10. Tengo este mismo error
    Unable to handle format: MP42, 266x400, FrameRate=30.0, Length=319200 0 extra bytes
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at prueba.panelvideo.(panelvideo.java:38)
    at prueba.video.jButton2ActionPerformed(video.java:200)
    at prueba.video.access$000(video.java:18)
    at prueba.video$2.actionPerformed(video.java:104)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
    at java.awt.EventQueue.access$300(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:706)
    at java.awt.EventQueue$3.run(EventQueue.java:704)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.awt.EventQueue$4.run(EventQueue.java:718)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    Podrías ayudarme por favor !!! :( mi correo es johaferr182@gmail.com

    ResponderEliminar