Java使用Jmf开发播放器

本文介绍了一个使用Java实现的简单视频播放器。该播放器基于Java Media Framework (JMF) 框架,通过示例代码展示了如何加载并播放本地AVI格式的视频文件。需要注意的是,播放的AVI文件必须是全帧无压缩格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.导入jmf的相关jar包 下载地址如下:

http://download.youkuaiyun.com/detail/a639735331/9886638

2.运行如下代码

温馨提示:avi文件必须是全帧无压缩的 否则无法播放视频


import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;

import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFrame;

public class VideoPlayer extends JFrame implements ControllerListener {

	private int videoWidth = 0;
	private int videoHeight = 0;
	private int controlHeight = 30;
	private int insetWidth = 10;
	private int insetHeight = 30;
	private Player player;
	private Component visual; // 播放组件
	private Component control = null; // 控制组件

	public VideoPlayer() {
		super("视频播放器");
		setSize(320, 240);
		setVisible(true);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				if (player != null) {
					player.close();
				}
				System.exit(0);
			}
		});
	}

	public void play() {
		URL url = null;
		try {
			// 准备一个要播放的视频文件的URL
			url = new URL("file://F:/FFOutput/16.avi");
			// 通过调用Manager 的createPlayer方法来创建一个Player的对象
			// 这个对象是媒体播放的核心控制对象
			player = Manager.createPlayer(url);
		} catch (NoPlayerException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		// 对Player对象注册监听器,能在相关事件发生的时候执行相关的动作
		player.addControllerListener(this);
		// 让Player对象进行相关的资源分配
		player.realize();

	}

	// 监听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) {
				//根据视频的宽高设置frame的宽和高
				//Dimension size = visual.getPreferredSize();
				//videoWidth = size.width;
				//videoHeight = size.height;
				//设置固定大小
				videoWidth = 500;
				videoHeight = 400;
				add(visual);
			} else {
				videoWidth = 320;
			}
			// 取得Player中的视频播放控制条组件,并把该组件添加到Frame 窗口中
			if ((control = player.getControlPanelComponent()) != null) {
				controlHeight = control.getPreferredSize().height;
				add(control, BorderLayout.SOUTH);
			}
			// 设定Frame 窗口的大小,使得满足视频文件的默认大小
			setSize(videoWidth + insetWidth, videoHeight + controlHeight
					+ insetHeight);
			validate();
			// 启动视频播放组件开始播放
			player.start();
		} else if (ce instanceof EndOfMediaEvent) {
			// 当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
			player.setMediaTime(new Time(0));
			player.start();
		}
	}

	public static void main(String[] args) {
		VideoPlayer vp = new VideoPlayer();
		vp.play();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郝文龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值