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:/sound.wav");
} 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();
}
}
}
分享到:
相关推荐
AV_SAMPLE_FMT_FLTP转为AV_SAMPLE_FMT_S16P(ffmpeg),在使用ffmpeg解码aac的时候,如果使用avcodec_decode_audio4函数解码,那么解码出来的会是AV_SAMPLE_FMT_FLTP 格式的数据( float, 4bit , planar), 如果我们希望...
《海思VENC源码分析——sample_venc深入解析》 海思VENC,全称为Video Encoder,是海思半导体公司开发的一种视频编码模块,主要应用于视频处理领域,如视频监控、多媒体通信等。在Hi3516DV300这款芯片上,VENC功能...
标题中的“bevformer转onnx自己电脑失败,由于grid-sample算子不支持”提示了我们在尝试将一个名为“BEVFormer”的模型转换为ONNX格式时遇到了问题。BEVFormer可能是一个用于自动驾驶或者计算机视觉任务的深度学习...
《深入理解MNIST数据集与深度学习:sample_weight.pkl权重解析》 在人工智能领域,深度学习已经成为解决复杂问题的关键技术,特别是在图像识别方面。MNIST数据集作为深度学习的入门经典,是研究者们测试和验证算法...
检查要求: ...非法字符,即不是SAMPLE字符集的符号; 字符常数缺右边的单引号(字符常数要求左、右边用单引号界定,不能跨行); 注释部分缺右边的界符*/(注释要求左右边分别用/*和*/界定,不能跨行)。
本项目专注于"sample"语言的编译器,它实现了词法分析和语法分析两个关键步骤,使得代码能够被有效地转换为四元式,这是一种中间表示形式,常用于简化后续的编译过程。 首先,我们来深入了解词法分析(也称为扫描或...
【标题】"salem-sample-data.zip"所代表的是一个压缩包文件,其中包含了用于研究和毕业设计的数据集。这样的资源对于学术研究、数据分析以及学习如何处理和分析数据来说是非常宝贵的。 【描述】"精品数据集,用作...
标题中的"sample (1)_SampleCode_"表明这是一个关于示例代码的压缩文件,可能是为了演示某种编程技术或软件功能。描述中的"Sample Archive Files Sample ZIP File"确认了这是一个包含示例档案的ZIP压缩文件,通常...
标题中的“OPC UA 客户端软件 UA Sample Client”指的是一个用于演示或测试目的的OPC UA客户端应用程序。这个软件允许用户连接到OPC UA服务器,从而获取、设置或监控工业设备和系统的数据。 **OPC UA基本概念:** 1...
【标题】:“intra-mart sample”是一个关于intra-mart平台的示例项目,它展示了如何在实际环境中应用和配置intra-mart系统。这个标题暗示了我们将会接触到一个包含多个组件和功能的演示环境,帮助用户了解intra-...
微信wx_sample下载。wx_sample是微信官方提供的公众号开发参考php脚本,版本是wx_sample.20140819,很多朋友找不到,就在这里提供给大家。
"Sample语言编译器(词法分析,正规式)" 这个标题提到了两个关键概念:Sample语言的编译器以及词法分析和正规式。这表明我们讨论的是一个用于处理名为Sample的编程语言的编译器,该编译器包含了对输入源代码进行...
iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1 iAP2 Sample Source R1
unity无限跑酷源码Endless Runner - Sample Game 1.1 Requires Unity 5.6.1 or higher. This endless runner game example (Trash Dash) is optimised for mobile, it shows the use of ob ject pooling, origin ...
标题 "T2G-Sample-Driver-Library-7.7.0.exe" 暗示我们正在处理一个可执行文件,这通常是一个程序或库的安装包。此文件的版本号为7.7.0,表示这是一个更新版本,可能包含了之前版本的改进和修复。"T2G"可能是产品或...
"Sample Application工程详解" Sample Application是一個ZStack协议栈提供的一个非常简单的演示实例,实例中的每个设备都可以发送和接收两种信息:周期信息和闪烁信息。周期信息是指设备加入网络后,每隔5秒(加上...
设计SAMPLE语言的词法分析器 检查要求: 启动程序后,先输出作者姓名、班级、学号(可用汉语、英语或拼音); 请求输入测试程序名,键入程序名后自动开始词法分析并输出结果; 输出结果为单词的二元式序列(样式见...
这个"carplay认证,iAP2 Sample Source R1.zip"文件包含的是一个关于iAP2协议的示例源代码,可以帮助开发者理解和实现CarPlay的音频功能。 首先,我们要理解iAP2协议的核心概念。iAP2是CarPlay与车载信息娱乐系统...
在Sample语言的词法分析中,我们将探讨如何识别和处理这些基本构建块。 首先,让我们理解什么是词法分析。词法分析器,也称为扫描器,其主要任务是读取源代码文件,并根据预定的规则(称为词法规则或正则表达式)...
《线程样本:深入解析threadsample官方示例》 在编程世界中,多线程是提升程序执行效率的重要手段,特别是在处理并发任务时。本文将深入探讨“threadsample”官方提供的多线程示例,旨在帮助开发者理解并掌握多线程...