天天看点

JMF示例(一)

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

import java.lang.String;

import java.net.URL;

import java.net.MalformedURLException;

import java.io.File;

import java.io.IOException;

import java.util.Properties;

import javax.media.*;

import com.sun.media.*;

/**

  * This is a Java Applet that demonstrates how to create a simple

  * media player with a media event listener. It will play the

  * media clip right away and continuously loop.

  * 

  * <!-- Sample HTML

  * <applet code=TVApplet width=587 height=510>

  * <param name=file value="sun.avi">

  * </applet>

  * -->

  */

public class TVApplet extends Applet implements ControllerListener 

{

    private String fileToPlay = "";//要播放的文件(完整的路径名称)

    // media Player

    Player player = null;//播放器

    // component in which video is playing

    Component visualComponent = null;//可视组件

    // controls gain, position, start, stop

    Component controlComponent = null;//控制组件

    // displays progress during download

    Component progressBar = null;//进度条

long CachingSize = 0L;  

    Panel panel = null;

    Panel vPanel = null;

    int controlPanelHeight = 0;

    Image [] showmeImage = null;

    Image [] zoomImageUp = null;

    Image [] zoomImageDn = null;

    CPanel cPanel = null;

    ZoomButton zoomButton;

    final int [] VLEFT = {59, 120};

    final int [] VTOP  = {33, 67};

    final int [] VRIGHT = {59 + 175, 120 + 351};

    final int [] VBOTTOM = {173, 67 + 287 + 11};

    final int [] WIDTH = {176, 352};

    final int [] HEIGHT = {138, 288};

    final int HALF = 0;//小屏

    final int FULL = 1;//全屏

    int tSize = 0;

    /**

     * Read the applet file parameter and create the media 

     * player.

     */

    public void init() 

    {

    setLayout(null);

    setBackground(Color.white);

    cPanel = new CPanel( );

    add(cPanel);

    // Figure out what size to use

    // The applet tag takes an optional parameter "SIZE" whose value

    // can be "half" or "full"

    // Eg. <param name=size value=half>

    String szSize = "full" ;//getParameter("SIZE");

    //屏幕一般是1024*768

    if (Toolkit.getDefaultToolkit().getScreenSize().getWidth() > 800)

        tSize = 1;

    else

        tSize = 0;

    if (szSize != null)

        if (szSize.toLowerCase().equals("full"))

            tSize = 1;

        else if (szSize.toLowerCase().equals("half"))

            tSize = 0;

    }

    cPanel.setBounds(VLEFT[tSize], VTOP[tSize], WIDTH[tSize], HEIGHT[tSize]);//设置播放器上部分的窗口矩阵的位置

    // Get the images

    showmeImage = new Image[FULL + 1];

    zoomImageUp = new Image[FULL + 1];

    zoomImageDn = new Image[FULL + 1];

    showmeImage[HALF] = getImage(getDocumentBase(), "ShowMeS2.jpg");

    showmeImage[FULL] = getImage(getDocumentBase(), "ShowMeS.jpg");

    zoomImageUp[HALF] = getImage(getDocumentBase(), "InUp.gif");

    zoomImageDn[HALF] = getImage(getDocumentBase(), "InDn.gif");

    zoomImageUp[FULL] = getImage(getDocumentBase(), "OutUp.gif");

    zoomImageDn[FULL] = getImage(getDocumentBase(), "OutDn.gif");

    addZoomButton();

    // URL for our media file

    URL url = null;

    this.fileToPlay = "d://rr.mp3";

    File fileToPlay = new File(this.fileToPlay);

    try 

        // Create an url from the file name and the url to the

        // document containing this applet.

        if ((url = fileToPlay.toURL()) == null)

        Fatal("Can't build URL for " + this.fileToPlay);

        // Create an instance of a player for this media

        try 

        {

            player = Manager.createPlayer(url);//创建播放器

        } 

        catch (NoPlayerException e) 

        System.out.println(e);

        Fatal("Could not create player for " + url);

        }

        // Add ourselves as a listener for a player's events

        player.addControllerListener(this);//为播放器事件增加监听者 

    catch (MalformedURLException e) 

        Fatal("Invalid media file URL!");

    catch (IOException e) 

        Fatal("IO exception creating player for " + url);

}

     * Start media file playback. This function is called the

     * first time that the Applet runs and every

     * time the user re-enters the page.

    public void start() 

        if (player != null)

            player.realize();

     * Stop media file playback and release resource before

     * leaving the page.

    public void stop() 

            player.stop();

            player.deallocate();

    public void destroy() 

        player.close();

    public void paint(Graphics g) 

    if (showmeImage[tSize] != null)

        g.drawImage(showmeImage[tSize], 0, 0, this);

    super.paint(g);

    public synchronized void reSize() 

    cPanel.setBounds(VLEFT[tSize], VTOP[tSize], WIDTH[tSize], HEIGHT[tSize]);

    if (visualComponent != null) {

        Dimension size = visualComponent.getPreferredSize();

        int width = size.width;

        int height = size.height;

        while (true) {

        // Scale to fit

        if (width > WIDTH[tSize] || height > HEIGHT[tSize]) {

            width /= 2;

            height /= 2;

        } else if (width < WIDTH[tSize] && height < HEIGHT[tSize]) {

            if (width * 2 <= WIDTH[tSize] && height*2 <= HEIGHT[tSize]) {

            width *= 2;

            height *= 2;

            } else

            break;

        } else

        visualComponent.setBounds((WIDTH[tSize] - width) / 2,

                      (HEIGHT[tSize] - height) / 2,

                      width, height);

    if (controlComponent != null) {

        controlComponent.setBounds(VLEFT[tSize], VBOTTOM[tSize],

                       WIDTH[tSize], 24);

        controlComponent.invalidate();

    remove(zoomButton);

    repaint();

    public void addZoomButton()

    zoomButton = new ZoomButton(zoomImageUp[tSize], zoomImageDn[tSize], 1 - tSize);

    add(zoomButton);

    zoomButton.setBounds(showmeImage[tSize].getWidth(this) - 24, showmeImage[tSize].getHeight(this) - 24, 24, 24);

     * This controllerUpdate function must be defined in order to

     * implement a ControllerListener interface. This 

     * function will be called whenever there is a media event

    public synchronized void controllerUpdate(ControllerEvent event) 

    // If we're getting messages from a dead player, 

    // just leave

    if (player == null)

        return;

    // When the player is Realized, get the visual 

    // and control components and add them to the Applet

    if (event instanceof RealizeCompleteEvent)

        if (( visualComponent =

          player.getVisualComponent())!= null) {

        cPanel.add(visualComponent);

        if (( controlComponent = 

          player.getControlPanelComponent()) != null) {

        add(controlComponent);

        controlComponent.repaint();

        reSize();

        player.prefetch();

    } else if (event instanceof EndOfMediaEvent) 

        // We've reached the end of the media; rewind and

        // start over

        player.setMediaTime(new Time(0));

    } else if (event instanceof ControllerErrorEvent) {

        player = null;

        Fatal(((ControllerErrorEvent)event).getMessage());

    } else if (event instanceof PrefetchCompleteEvent) {

        if (visualComponent != null) {

        player.start();

        } else if (event instanceof SizeChangeEvent) {

    void Fatal (String s) 

    // Applications will make various choices about what

    // to do here. We print a message and then exit

    System.err.println("FATAL ERROR: " + s);

    throw new Error(s); // Invoke the uncaught exception

                // handler System.exit() is another

                // choice.

    /*************************************************************************

     * INNER CLASSES

     *************************************************************************/

    public class CPanel extends Panel 

        public CPanel() 

            super();

            setBackground(Color.black);

            setLayout( null );

    public class ZoomButton extends Component

        Image up, down;

        int newSize;

        boolean mouseUp = true;

        public ZoomButton(Image up, Image down, int newSize) 

            this.up = up;

            this.down = down;

            this.newSize = newSize;

            setSize(24, 24);

            addMouseListener( new MouseAdapter() 

            {

                public void mousePressed(MouseEvent me) 

                {

                    mouseUp = false;

                    repaint();

                }

                public synchronized void mouseReleased(MouseEvent me) 

                    mouseUp = true;

                    TVApplet.this.tSize = ZoomButton.this.newSize;

                    reSize();

            } );

        public void paint(Graphics g)

            if (mouseUp)

            g.drawImage(up, 0, 0, this);

            else

            g.drawImage(down, 0, 0, this);

}    

本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/09/22/902807.html,如需转载请自行联系原作者