博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用JMF播放音频 例子
阅读量:5993 次
发布时间:2019-06-20

本文共 4437 字,大约阅读时间需要 14 分钟。

package com.emc.test; import java.awt.*;  import java.awt.event.*;  import java.io.*;  import java.net.*;  import javax.swing.*;  import javax.media.*;  // 音乐,视频播放程序  /*本段代码是在JMF安装OK之后才能运行的(如果没安装,这个。。。好像是不行滴。。)
*本段代码是经过本人测试的,可以正常播放MP3,但是wma好像不支持。。。(还有段摄像头的代码,只是能够使用,截图时候效果不理想。。)
*/
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.toURI().toURL(); } catch (MalformedURLException e) {
// TODO Auto-generated catch block e.printStackTrace(); } //得到文件的URL地址 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; } System.out.println("Protocol:"+mediaLocator.getProtocol()); try { player = Manager.createPlayer(mediaLocator); //得到播放器实例 player.addControllerListener(new PlayerEventHandler()); //增加播放控制器 player.realize(); } catch (Exception ex) { ex.printStackTrace(); showMessage("打开错误"); //显示错误信息 } } //取得媒体组件 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(); } }

转载于:https://www.cnblogs.com/icerainsoft/archive/2011/10/08/2201902.html

你可能感兴趣的文章
concat和concat_ws()区别及MySQL的几个实用字符串函数
查看>>
win7和ubuntu双系统彻底卸载ubuntu的方法
查看>>
MySql高可用之MMM
查看>>
QQ web api
查看>>
BAT架构师2019年最新总结,从程序员到CTO,从专业走向卓越
查看>>
不能“在oracle db server上使用sqlplus / as sysdba”的解决办法
查看>>
linux oracle 解决sqlplus光标不可用问题
查看>>
我的友情链接
查看>>
CentOS 6 + Puppet 2.7 + mCollective + Foreman + RabbitMQ + Apache + Passenger Tutorial
查看>>
ER模型设计工具:设计ER模型及MySQL DDL文件导入及生成
查看>>
编译glibc2.19
查看>>
MySQL 单表插入 10w+ TPS达成
查看>>
路由器的基本配置
查看>>
Java在Win7中的环境变量设置
查看>>
Hadoop无法上传文件查找原因
查看>>
如何通过BBED找回删除数据
查看>>
微软虚拟化产品
查看>>
Linux学习命令汇总四——Bash中变量.文件通配符.管道与重定向.算术运算及循环或判断语句...
查看>>
拓扑结构
查看>>
RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用
查看>>