如何用JMF编写视频播放器3 ——Video视频播放器文件工程的建立和源代码

如何用JMF编写视频播放器3

——Video视频播放器文件工程的建立和源代码

在如何用JMF编写MP3音乐播放器2里面我们编写了一个音乐播放器,既然JMF声称是JAVA多媒体的插件,他支持音频,视频,图片等,那我们就编写一个视频播放器试试。

 

视频播放器没有音乐播放器那么负责,它可以自动导入它需要的包import javax.media.Player;

具体问题和疑问见我代码中的注释即可。

 

 

 

源代码:

package shexiang;

 

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.Dimension;

import java.awt.Frame;

import java.awt.Panel;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.IOException;

import java.net.MalformedURLException;

import java.net.URL;

 

import javax.media.CannotRealizeException;

import javax.media.ControllerEvent;

import javax.media.ControllerListener;

import javax.media.EndOfMediaEvent;

import javax.media.Manager;

import javax.media.MediaLocator;

import javax.media.NoPlayerException;

import javax.media.Player;

import javax.media.PrefetchCompleteEvent;

import javax.media.RealizeCompleteEvent;

import javax.media.Time;

 

@SuppressWarnings({ "restriction", "unused" })

public class cuiViedo implements ControllerListener {   //ControllerListener状态控制接口

  

    /**  Component代表Swing对应用程序提供了如下几类编程接口:

     * 用户界面的组件树的创建和修改的方法。这包括组件的添加和删除等操作。

     * 组件属性访问的方法,比如组件位置、组件前后背景色、组件字体等等。

     * 组件状态及生命周期的管理的方法,比如隐藏和显示、创建和销毁等等。

     * 组件位置、大小的管理,包括通过布局管理器的方法。

     * 组件事件处理接口的管理,包括添加、删除等操作。*/

   

   

    private Frame frameVedio;   //建立一个顶层容器

    private Player player;      //

    private Panel panel;        //建立一个面板

    private Component visual;        //视频接口 

    private Component control = null;   //定义一个控制接口,用于接受视频的时间轴控制器和音量控制等等

    private int insetWidth = 600;   //设置播放器视频画面中间面板的大小,它会强制将视频的原大小修改为你定义的大小

    private int insetHeight =400;  

   

    public void play(){

        frameVedio = new Frame("我的视频播放器");

        frameVedio.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent we) {

                if(player != null) {

                    player.close();

                }

                System.exit(0);

            }

        });

        frameVedio.setBounds(400, 100, 800, 600);   //定义播放器容器的位置和大小

 

        frameVedio.setVisible(true);

       

       

        URL url = null;    //要播放的视频文件的URL

        try {           

            url = new URL("file:/d:/北京东路的日子.mpg");

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }       

        try {

            player = Manager.createPlayer(url); //通过调用ManagercreatePlayer方法来创建一个Player的对象

                                               //这个对象是媒体播放的核心控制对象

        } catch (NoPlayerException e1) {

            e1.printStackTrace();

        } catch (IOException e1) {

            e1.printStackTrace();

        } 

 

       

        player.addControllerListener(this); //player对象注册监听器,能够在相关事件发生的时候执行响应的动作

                                            //如果不进行监听,那么它就无法获取你是否有视频的输入

        player.realize();  //对播放前进行预处理状态,就是缓冲资源  ,player对象进行相关的资源分配

    }

   

   

    public void controllerUpdate(ControllerEvent ce) { //监听player的相关事件

        if (ce instanceof RealizeCompleteEvent) {

           

            player.prefetch(); //player实例化完成后进行player播放前预处理

        } else if (ce instanceof PrefetchCompleteEvent) {   //PrefetchCompleteEvent对视频进行判断是否已经预处理完毕

            if (visual != null)    //视频接口可以获取视频

                return;

          

            if ((visual = player.getVisualComponent()) != null) {  //取得player中的播放视频的组件

                Dimension size = visual.getPreferredSize();  //获取视频组件的大小尺寸

                /*getPreferedSize方法是获取组的首选大小,因为布局管理器会根据组件自动调整框架窗口的大小,

                 * 可以通过这个方法来获取自动调整后的组件大小,没有自动调用只是能获取大小而已*/

            

                frameVedio.add(visual); //将视频接口添加至顶层容器中

            }

           

          

            if ((control = player.getControlPanelComponent()) != null) {  //取得player中的视频播放控制条组件

                                                                             //并把该组件添加到控制接口中

                  

             

                frameVedio.add(control, BorderLayout.SOUTH);   //将控制接口添加到Frame窗口中

            }

           

          

            frameVedio.setSize( insetWidth,  insetHeight);  //设定Frame窗口的大小,让他满足我们设置的视频大小

            frameVedio.validate(); //frame.validate()是验证frame中的所有组件,并不会调整frame的大小.

                                    //Frame.pack()这个方法的作用就是根据窗口里面的布局及组件的preferedSize来确定frame的最佳大小。

           

            //启动视频播放组件开始播放

            player.start();

            //mediaPlayer.start();

        } else if (ce instanceof EndOfMediaEvent) {  /*instanceofJavaphp的一个二元操作符(运算符),和==><是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。

                                                                                                             它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。*/

          

            player.setMediaTime(new Time(0));  //当播放视频完成后,把时间进度条恢复到开始,

            player.start(); //再次重新开始播放

        }

    }

   

   

    public static void main(String[] args) {

        cuiViedo sp = new cuiViedo();

        sp.play();

    }

   

   

   

   

   

   

 

}

 如何用JMF编写视频播放器3 ——Video视频播放器文件工程的建立和源代码_第1张图片

你可能感兴趣的:(源代码,如何用JMF编写视频播放器,Video视频播放器,jmf视频)