Package datasoul.render.vlcj

Source Code of datasoul.render.vlcj.VlcjBackgroundFrame$MediaPlayerControl

/*
* Copyright 2012 Samuel Mello
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; version 2 or later of the License.
*
*   This program is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*   GNU General Public License for more details.
*
*/

package datasoul.render.vlcj;

import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JOptionPane;
import javax.swing.JWindow;

import uk.co.caprica.vlcj.player.MediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;

import com.sun.jna.Platform;

import datasoul.DatasoulMainForm;
import datasoul.config.BackgroundConfig;
import datasoul.config.ConfigObj;
import datasoul.render.ContentManager;
import datasoul.serviceitems.ServiceItemTable;
import datasoul.util.ObjectManager;

/**
*
* @author samuel
*/
public class VlcjBackgroundFrame extends javax.swing.JFrame {
   
    /**
   *
   */
  private static final long serialVersionUID = 8030486478069411461L;
 
  private MediaPlayerFactory factory;
    private EmbeddedMediaPlayer mediaPlayer;
    private boolean playingItem;
    private JWindow overlayWindow;
    private boolean handlingErrors;
   
    /**
     * Creates new form VlcjBackgroundFrame
     */
    public VlcjBackgroundFrame() {
        initComponents();
        DatasoulMainForm.setDatasoulIcon(this);
        String[] args;
        if (Platform.isMac()){
            args = new String[] {"--no-video-title-show", "--vout=macosx"};
        }else{
            args = new String[] {"--no-video-title-show"};
        }
        factory = new MediaPlayerFactory(args);
        mediaPlayer = factory.newEmbeddedMediaPlayer(null);
        mediaPlayer.addMediaPlayerEventListener(new MediaPlayerControl());
        Canvas c = new Canvas();
        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(c, BorderLayout.CENTER);
        c.setBackground(Color.black);
        mediaPlayer.setVideoSurface(factory.newVideoSurface(c));
    }
   
    public void handleErrors(){
        if (!handlingErrors){
            addWindowListener(new VlcjBackgroundFrameWindowAdapter());
            handlingErrors = true;
        }
    }

    public void setOverlay(JWindow win){
        overlayWindow = win;
    }
   
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setUndecorated(true);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void registerAsMain(){
        this.setBounds(ConfigObj.getActiveInstance().getMainOutputDeviceObj().getBounds());
        overlayWindow.setBounds(ConfigObj.getActiveInstance().getMainOutputDeviceObj().getBounds());
    }
       

    public void registerAsMonitor(){
        this.setBounds(ConfigObj.getActiveInstance().getMonitorOutputDeviceObj().getBounds());
        overlayWindow.setBounds(ConfigObj.getActiveInstance().getMonitorOutputDeviceObj().getBounds());
    }

    private String getLiveURL(){
        if (Platform.isLinux()){
            return "v4l2://";
        }
        if (Platform.isWindows()){
            return "dshow://";
        }
        if (Platform.isMac()){
            return "qtcapture://";
        }
        return null;
    }
   
    /*
     * This method is responsible for setting the appropriate background when a item stop playing
     */
    public void playBackground(){
        int mode = BackgroundConfig.getInstance().getModeAsInt();
        switch (mode){
            case BackgroundConfig.MODE_STATIC:
                mediaPlayer.stop();
                break;
            case BackgroundConfig.MODE_VIDEO:
                mediaPlayer.playMedia(BackgroundConfig.getInstance().getVideoFile(), "no-audio");
                break;
            case BackgroundConfig.MODE_LIVE:
                String url = getLiveURL();
                if (url != null){
                    mediaPlayer.playMedia(url, "no-audio");
                }
                break;
        }
    }
   
    /*
     * Called to play a Video Item
     */
    public void playVideoItem(String path){
        playingItem = true;
        if (BackgroundConfig.getInstance().getModeAsInt() == BackgroundConfig.MODE_STATIC){
            ContentManager.getInstance().setMainShowBackground(false);
        }
        ContentManager.getInstance().slideChange(-1);
        mediaPlayer.playMedia(path);
    }
   
    /*
     * Force stop for a video item
     */
    public void stopVideoItem(){
        if (playingItem){
            mediaPlayer.stop();
            playBackground();
        }
    }
   
    /*
     * Pause a Video Item
     */
    public void pauseVideoItem(){
        if (playingItem){
            mediaPlayer.pause();
        }
    }
   
    public void seekVideoItem(float position){
        if (playingItem){
            mediaPlayer.setPosition(position);
        }
    }
   
    private ServiceItemTable getLiveTable(){
        return ObjectManager.getInstance().getLivePanel().getLiveServiceItemTable();
    }
   
    /**
     * Called to clean up after video item finished
     */
    public void videoItemCompleted(){
        playingItem = false;
        if (BackgroundConfig.getInstance().getModeAsInt() == BackgroundConfig.MODE_STATIC){
            ContentManager.getInstance().setMainShowBackground(true);
        }
        ContentManager.getInstance().slideChange(-1);
        getLiveTable().notifyVideoEnd();
    }
   
    private class MediaPlayerControl extends MediaPlayerEventAdapter {

        @Override
        public void error(MediaPlayer mp) {
            JOptionPane.showMessageDialog(ObjectManager.getInstance().getDatasoulMainForm(),
                    java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("ERROR PLAYING VIDEO"), "Datasoul", JOptionPane.ERROR_MESSAGE);
        }

        @Override
        public void playing(MediaPlayer mp) {
            getLiveTable().videoPausedChanged(false);
        }

        @Override
        public void paused(MediaPlayer mp) {
            getLiveTable().videoPausedChanged(true);
        }

        @Override
        public void finished(MediaPlayer mp) {
            if (playingItem){
                videoItemCompleted();
                getLiveTable().videoPausedChanged(true);
            }
            playBackground();
        }

        @Override
        public void positionChanged(MediaPlayer mp, float f) {
            getLiveTable().videoPositionChanged(f);
        }

        @Override
        public void pausableChanged(MediaPlayer mp, int i) {
            getLiveTable().videoPausableChanged(i != 0);
        }

    }
   
   
    private class VlcjBackgroundFrameWindowAdapter extends WindowAdapter{
        @Override
        public void windowActivated(WindowEvent e) {
            overlayWindow.toFront();
        }
    }
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables
}
TOP

Related Classes of datasoul.render.vlcj.VlcjBackgroundFrame$MediaPlayerControl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.