苏提春晓 2014-03-27 12:44 采纳率: 0%
浏览 5946

如何写一个完整的java视频播放器?诚望高手们指点!

高手们,你们好。我在网上搜了几个java视频播放器的代码,带是均不能正常运行。我不知道是怎么回事,我想请教下你们,同时如果你们有完整的java视频播放器代码,能否提供一份?望指导!
我的代码为:
package com.bird.jmf;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.media.*;

// 视频播放程序

public class VideoPlayDemo extends JFrame {

private Player player; // 播放器对象
private Component visualMedia; // 视频显示组件
private Component mediaControl; // 视频播放控制组件
private Container container; // 主容器
private File mediaFile; //媒体文件
private URL fileURL; //媒体文件URL地址

public VideoPlayDemo() { // 构造函数
    super("视频播放程序"); //调用父类构造函数

    container = getContentPane(); //得到窗口容器
    JToolBar toobar = new JToolBar(); //实例化工具栏
    JButton openFile = new JButton("打开媒体文件"); //实例化按钮
    toobar.add(openFile); //增加按钮到工具栏
    JButton openURL = new JButton("打开网络地址");
    toobar.add(openURL);
    container.add(toobar, BorderLayout.NORTH); //设置工具栏

    openFile.addActionListener(new ActionListener() { //打开文件按钮事件处理
        public void actionPerformed(ActionEvent event) {
            JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器
            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件打开模式为仅打开文件              
            int result = fileChooser.showOpenDialog(VideoPlayDemo.this);//显示对话框               
            if (result == JFileChooser.APPROVE_OPTION) { //得到用户行为
                mediaFile = fileChooser.getSelectedFile(); //得到选择的文件
            }
            if (mediaFile != null) {
                try {
                    fileURL = mediaFile.toURL(); //得到文件的URL地址
                } catch (MalformedURLException ex) {
                    ex.printStackTrace(); //输出错误信息
                    showMessage("打开错误"); //显示错误信息
                }
                startPlayer(fileURL.toString()); //开始播放打开的文件
            }
        }
    });

    openURL.addActionListener(new ActionListener() { //打开URL按钮事件处理
        public void actionPerformed(ActionEvent event) {
            String addressName =JOptionPane.showInputDialog(VideoPlayDemo.this, "输入URL地址");
            if (addressName != null)
                startPlayer(addressName); //开始播放打开的URL
        }
    });

    Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE);

    setSize(300, 200); //设置窗口大小
    setVisible(true); //设置窗口为可视
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序
}
//初始化播放器
public void startPlayer(String mediaLocation) {
    if (player != null)
        //如果播放器非空则移去先前的播放器组件
        if (visualMedia != null)
            container.remove(visualMedia); //如果对象visualMedia非空则移去
    if (mediaControl != null) {
        container.remove(mediaControl); //如果对象mediaControl非空则移去
        player.close(); //关闭播放器
    }
    MediaLocator mediaLocator = new MediaLocator(mediaLocation); //媒体定位器
    if (mediaLocator == null) {
        showMessage("打开文件错误"); //显示错误信息
        return;
    }
    try {
        player = Manager.createPlayer(mediaLocator); //得到播放器实例
        player.addControllerListener(new PlayerEventHandler()); //增加播放控制器
        player.realize();
    } catch (Exception ex) {
        ex.printStackTrace();
        showMessage("打开错误"); //显示错误信息
    }

}
//取得媒体组件
//Download by http://www.codefans.net
public void getMediaComponents() {
    visualMedia = player.getVisualComponent(); //取得视频显示组件

    //如果对象visualMedia非空则加入到窗口内容窗格
    if (visualMedia != null) {
        container.add(visualMedia, BorderLayout.CENTER);
        pack();
    }

    mediaControl = player.getControlPanelComponent(); //取得播放控制组件

    //如果对象visualMedia非空则加入到窗口内容窗格
    if (mediaControl != null)
        container.add(mediaControl, BorderLayout.SOUTH);

}

//播放器事件处理
private class PlayerEventHandler extends ControllerAdapter {

    public void realizeComplete(RealizeCompleteEvent realizeDoneEvent) {
        player.prefetch(); //预取媒体数据
    }

    //完成预取媒体数据后,开始播放媒体
    public void prefetchComplete(PrefetchCompleteEvent prefetchDoneEvent) {
        getMediaComponents();
        validate();
        player.start(); //开始播放媒体
    }

    //如果媒体播放完毕,重新设置媒体时间并停止媒体播放器
    public void endOfMedia(EndOfMediaEvent mediaEndEvent) {
        player.setMediaTime(new Time(0)); //重新设置媒体时间
        player.stop(); // 停止媒体播放
    }
}

public void showMessage(String s) {
    JOptionPane.showMessageDialog(this, s); //显示提示信息
}

public static void main(String args[]) {
    new VideoPlayDemo();
}

}

  • 写回答

1条回答

  • shiter 人工智能领域优质创作者 2015-01-19 13:21
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB yalmip 可转移负荷的简单建模出错,如何解决?
  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?