用jmf如何过去取得avi文件的总的播放时长,不需要播放文件只要取得avi文件的时长就可以
我是这么写的但是不行呀,请高手指点,谢谢
player = Manager.createPlayer(new URL("file:c:\\36.avi"));
        Time a =player.getDuration();
        System.out.println("aaaa=" + a.getSeconds());

解决方案 »

  1.   

    lz可以看看下面的文章,里面有如何设置,讲的很详细。http://zhangjunhd.blog.51cto.com/113473/25467
      

  2.   

    下面是简单实现的代码:
    package com.jmfsample2;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.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;public class JMFSample implements ControllerListener {
        public static void main(String[] args) {
            JMFSample sp = new JMFSample();
            sp.play();
        }
       
        private Frame f;
        private Player player;
        private Panel panel;
        private Component visual;
        private Component control = null;
       
        public void play(){
            f = new Frame("JMF Sample1");
            f.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent we) {
                    if(player != null) {
                        player.close();
                    }
                    System.exit(0);
                }
            });
            f.setSize(500,400);        f.setVisible(true);
            URL url = null;
            try {
                //准备一个要播放的视频文件的URL
                url = new URL("file:/E:/c-d.avi");
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }       
            try {
                //通过调用Manager的createPlayer方法来创建一个Player的对象
                //这个对象是媒体播放的核心控制对象
                player = Manager.createPlayer(url);
            } catch (NoPlayerException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }        //对player对象注册监听器,能噶偶在相关事件发生的时候执行相关的动作
            player.addControllerListener(this);
           
            //让player对象进行相关的资源分配
            player.realize();
        }
       
        private int videoWidth = 0;
        private int videoHeight = 0;
        private int controlHeight = 30;
        private int insetWidth = 10;
        private int insetHeight = 30;
       
        //监听player的相关事件
        public void controllerUpdate(ControllerEvent ce) {
            if (ce instanceof RealizeCompleteEvent) {
                //player实例化完成后进行player播放前预处理
                player.prefetch();
            } else if (ce instanceof PrefetchCompleteEvent) {
                if (visual != null)
                    return;            //取得player中的播放视频的组件,并得到视频窗口的大小
                //然后把视频窗口的组件添加到Frame窗口中,
                if ((visual = player.getVisualComponent()) != null) {
                    Dimension size = visual.getPreferredSize();
                    videoWidth = size.width;
                    videoHeight = size.height;
                    f.add(visual);
                } else {
                    videoWidth = 320;
                }
               
                //取得player中的视频播放控制条组件,并把该组件添加到Frame窗口中
                if ((control = player.getControlPanelComponent()) != null) {
                    controlHeight = control.getPreferredSize().height;
                    f.add(control, BorderLayout.SOUTH);
                }
               
                //设定Frame窗口的大小,使得满足视频文件的默认大小
                f.setSize(videoWidth + insetWidth, videoHeight + controlHeight + insetHeight);
                f.validate();
               
                //启动视频播放组件开始播放
                player.start();
            } else if (ce instanceof EndOfMediaEvent) {
                //当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
                player.setMediaTime(new Time(0));
                player.start();
            }
        }}
      

  3.   

    我不想播放,只想取出时长,改成这样还是不行。
    DataSource source;

    source = Manager.createDataSource(new URL("file:c:\\36.avi"));
    Time a =source.getDuration();source.getContentType()都能取到video.x_msvideo
    为什么source.getDuration();就取不到时长呢
      

  4.   

    要看文件的格式的, 在Java经典代码中有这方面的内容, 不过比较多, 没法复制过来, 不防下载来看, 网上很容易搜索到的
      

  5.   

    windows下面已经解决了,path和classpath加上jmf类库路径即可,但是linux下还是不行
      

  6.   

    要等到媒体播放开始,用getDuration()才成功