java-视频播放器

合集下载

java视频播放器源代码

java视频播放器源代码

import java.awt.*;import java.io.*;import java.util.*;import javax.media.*;import javax.media.format.*;import javax.swing.*;public class VideoPlayer implements ControllerListener {Vector audioCapDevList = null;Vector videoCapDevList = null;CaptureDeviceInfo audioCapDevInfo = null;CaptureDeviceInfo videoCapDevInfo = null;MediaLocator audioCapDevLoc = null;MediaLocator videoCapDevLoc = null;Player audioPlayer;Player videoPlayer;public void initAudioCapDevLoc() {//这里可以填写其它的音频编码格式,具体请看AudioFormat类audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat(AudioFormat.LINEAR));if ((audioCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0);audioCapDevLoc = audioCapDevInfo.getLocator();} else {System.out.println("找不到音频采集设备");System.exit(0);}}public void initVideoCapDevLoc() {//这里可以填写其它的编码视频格式,具体请看VideoFormat类videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat(VideoFormat.YUV));if ((videoCapDevList.size() > 0)) {//或许有几个CaptureDevice,这里取第一个videoCapDevInfo = (CaptureDeviceInfo)videoCapDevList.elementAt(0);videoCapDevLoc = videoCapDevInfo.getLocator();} else {System.out.println("找不到视频采集设备");System.exit(0);}}public void initAudioPlayer() {try {audioPlayer = Manager.createPlayer(audioCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变audioPlayer.addControllerListener(this);audioPlayer.realize();}public void initVideoPlayer() {try {videoPlayer = Manager.createPlayer(videoCapDevLoc);} catch (NoPlayerException ex) {} catch (IOException ex) {}//增加一个侦听器,侦听player状态的改变videoPlayer.addControllerListener(this);videoPlayer.realize();}public void stopAndClosePlayer(){audioPlayer.stop();audioPlayer.close();videoPlayer.stop();videoPlayer.close();}public synchronized void controllerUpdate(ControllerEvent ce) { Player p = (Player) ce.getSourceController();JFrame jFrame = new JFrame();Component com;if (p == null) {return;}//如果player的状态变为Realizedif (ce instanceof RealizeCompleteEvent) {if ((com = p.getControlPanelComponent()) != null) {jFrame.add(com, BorderLayout.SOUTH);}if ((com = p.getVisualComponent()) != null) {jFrame.add(com, BorderLayout.NORTH);}jFrame.setVisible(true);jFrame.pack();jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); p.start();}}public static void main(String args[]) {V ideoPlayer cap = new VideoPlayer();cap.initAudioCapDevLoc();cap.initVideoCapDevLoc();cap.initAudioPlayer();cap.initVideoPlayer();try {Thread.currentThread().sleep(20000);//20秒后停止并关闭播放器 } catch (InterruptedException ex) {}cap.stopAndClosePlayer();}}。

毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]

毕业设计(论文)-基于java的mp3播放器jmplayer[管理资料]

基于JA V A的Mp3播放器JMPlayer作者姓名专业计算机科学与技术指导教师姓名专业技术职务讲师山东轻工业学院本科毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业论文,是本人在指导教师的指导下独立研究、撰写的成果。

论文中引用他人的文献、数据、图件、资料,均已在论文中加以说明,除此之外,本论文不含任何其他个人或集体已经发表或撰写的成果作品。

对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。

本声明的法律结果由本人承担。

毕业论文作者签名:年月日山东轻工业学院关于毕业设计(论文)使用授权的说明本毕业论文作者完全了解学校有关保留、使用毕业论文的规定,即:学校有权保留、送交论文的复印件,允许论文被查阅和借阅,学校可以公布设计论文的全部或部分内容,可以采用影印、扫描等复制手段保存本论文。

指导教师签名:毕业设计(论文)作者签名:年月日年月日目录摘要 (III)ABSTRACT (IV)第一章引言 (1)课题研究背景及意义 (1)音乐播发器的发展及历史 (1)系统开发目标 (2)本文的主要内容和结构 (2)第二章相关工具及技术介绍 (1)Eclipse简介 (3)Java Thread简介 (4)JavaSound简介 (5)Java Swing简介 (6)Java Properties简介 (7)第三章需求分析 (9)工作流程分析 (9)评价具体需求分析 (9)系统功能结构图 (9)功能详细描述 (10)Mp3播放 (10)播放控制 (10)播放信息控制 (10)Mp3列表管理 (11)歌词 (11)其他 (11)第四章总体设计 (12)系统要求 (12)系统功能描述 (12)系统运行环境 (13)系统设计思想 (13)总体流程设计 (13)Mp3播放设计 (14)播放模式设计 (15)Mp3文件列表管理设计 (15)歌词设计 (16)皮肤切换设计 (17)显示模式设计 (18)第五章详细设计 (19)界面设计 (19)系统关键类设计 (20)系统类结构 (22)第六章软件功能实现 (23)播放Mp3实现 (23)Mp3文件解析实现 (23)Mp3列表控制类实现 (23)Mp3歌词解析及显示控制实现 (23)结束语 (25)参考文献 (24)致谢 (27)摘要随着java 语言的出现,软件的跨平台性已经能被更进一步的解决和处理,随着Internet的发展,软件的跨平台性又被提高到另一个新的要求。

Java实现视频网站的视频上传及视频播放功能

Java实现视频网站的视频上传及视频播放功能

视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash 制作的播放器来播放该文件.项目中用制作的播放器.多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。

??ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。

1.能支持的格式ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)2.不能支持的格式对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg 能解析的)格式.实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.数据库实例所需要的数据库脚本drop database if exists db_mediaplayer;create database db_mediaplayer;use db_mediaplayer; create table tb_media(id int not null primary key auto_increment comment '主键' ,title varchar(50) not null comment '视频名称' ,src varchar(200) not null comment '视频存放地址' ,picture varchar(200) not null comment '视频截图' ,descript varchar(400) comment '视频描述' ,uptime varchar(40) comment '上传时间');desc tb_media;项目结构图:上传视频界面设计在上传文件时,Form表单中?enctype属性值必须为"multipart/form-data".模块界面设计如下图:enctype属性值说明application/x-www-form-urlencoded表单数据被编码为名称/值对,这是标准的编码格式multipart/form-data表单数据被编码为一条消息,页面上每个控件对应消息中的一部分text/plain表单数据以纯文本形式进行编码,其中不含任何控件格式的字符业务接口定义面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.packageimportimport/****** @version:** @author** @since:创建时间: 2013-2-07 上午10:19:54** TODO : interface is used for ...**/public interface MediaDao {/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath,String upFilePath, String codcFilePath, String mediaPicPath)throws Exception;/*** 保存文件* @param media* @return* @throws Exception*/public boolean saveMedia(Media media)throws Exception;/*** 查询本地库中所有记录的数目* @return* @throws Exception*/public int getAllMediaCount()throws Exception;/*** 带分页的查询* @param firstResult* @param maxResult* @return*/public List<Media> queryALlMedia(int firstResult, int maxResult)throws Exception;/*** 根据Id查询视频* @param id* @return* @throws Exception*/public Media queryMediaById(int id)throws Exception;}接口的实现,这里列出ffmpeg视频转码与截图模块/*** 视频转码* @param ffmpegPath 转码工具的存放路径* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件* @param codcFilePath 格式转换后的的文件保存路径* @param mediaPicPath 截图保存路径* @return* @throws Exception*/public boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath,String mediaPicPath) throws Exception {因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访问的方法即可.packageimport/****** @version:** @author** @since:创建时间: 2013-2-07 下午02:18:51** TODO : class is used for ...**/public class DaoFactory { ervlet控制器相关代码如下packageimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimport/****** @version:** @author** @since:创建时间: 2013-2-08 下午02:24:47** TODO : class is used for ...**/public class MediaService extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = ();MediaDao mediaDao = ();String message = "";String uri = ();String path = ("/"), ("."));if("/uploadFile".equals(path)){etBytes("ISO8859-1"),"UTF-8"));}if("descript")){(new String().getBytes("ISO8859-1"),"UTF-8"));}}else{); lv"; pg"; etRealPath("/tools/"); ("videos/" + serialName + ".flv");("videos/images/" +serialName + ".jpg");());orward(request,response);} catch (Exception e) {();throw new ServletException(e);}}if("/queryAll".equals(path)){List<Media> mediaList;try {mediaList = (0,5);("mediaList", mediaList);("").forward(request, response);} catch (Exception e) {();}}if("/play".equals(path)){String idstr = ("id");int mediaId = -1;Media media = null;if(null!=idstr){mediaId = (idstr);}try {media = (mediaId);} catch (Exception e) {();}("media", media);("").forward(request, response);}}}可以通过分页查找,显示最新top5,展示到首页.相应特效可以使用JS实现.相关代码如下:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import<%@ page import=".*"%><%String path = ();String basePath = ()+":idth(); ength; ppend(btn);$("#focus .btnBg").css("opacity",;tn span").css("opacity",.mouseenter(function() {index = $("#focus .btn span").index(this);showPics(index);}).eq(0).trigger("mouseenter");reNext").css("opacity",.hover(function() {$(this).stop(true,false).animate({"opacity":""},300); },function() {$(this).stop(true,false).animate({"opacity":""},300); });re").click(function() {index -= 1;if(index == -1) {index = len - 1;}showPics(index);});ext").click(function() {index += 1;if(index == len) {index = 0;}showPics(index);});ss("width",sWidth * (len));over(function() {clearInterval(picTimer);},function() {picTimer = setInterval(function() {showPics(index);index++;if(index == len) {index = 0;}},4000); rigger("mouseleave");top(true,false).animate({"left":nowLeft},300); tnspan").removeClass("on").eq(index).addClass("on"); tnspan").stop(true,false).animate({"opacity":""},300).eq(index).stop(true,false).animate( {"opacity":"1"},300); 片为视频转码过程中拉取到的图片.点击图片即可发送播放视频请求,视频播放页面效果如下图所示.视频播放页面需要在页面中嵌入Flash播放器代码如下:<!-- 嵌入Flash播放器 --><td align="center" width="455"><param name="movie"value="<%=basePath%>tools/=<%=basePath%><%=()%>" /><embedsrc="<%=basePath%>tools/=<%=basePath%><%=()%>"width="98%" height="90%"></embed></object></td>相关说明:<param>元素,value属性指定被加载的视频文件.实例中用的是flash制作的视频播放器.在value属性值中向播放器传递了一个file参数.该参数指定了要播放的视频的路径.<embed>元素,src属性也是用来加载影片,与<param>标记的value属性值具体相同的功能.转载请注明出处:[]。

Java使用Player播放mp3

Java使用Player播放mp3

Java使⽤Player播放mp3⼤家平时闲了都会听听歌,散散⼼,于是很多⼈就问,在Java⾥边如何播放歌曲呢,唉,别说,在Java⾥边还真能歌曲,下⾯我为⼤家揭晓。

我们都知道Java⾥边做什么都需要对应的jar包,⾸先贴上maven得地址:<dependency><groupId>javazoom</groupId><artifactId>jlayer</artifactId><version>1.0.1</version></dependency>如果不会maven的同学可以去我⽹盘下载:链接: https:///s/1IvWxTH-T4kh9aVdNPsrUyw 提取码: 5p6gpackage test1;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import javazoom.jl.player.Player;public class Mp3PlayerTest {//声明⼀个全局的player对象public static Player player = null;public static void main(String[] args) {try {//声明⼀个File对象File mp3 = new File("F:\\KuGou\\凤凰传奇 - 最炫民族风 (⼴场舞).mp3");//创建⼀个输⼊流FileInputStream fileInputStream = new FileInputStream(mp3);//创建⼀个缓冲流BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);//创建播放器对象,把⽂件的缓冲流传⼊进去player = new Player(bufferedInputStream);//调⽤播放⽅法进⾏播放player.play();} catch (Exception e) {e.printStackTrace();}}}上⾯这段代码可以让⼀⾸mp3播放完毕,那么这个时候有就有⼈问了,我怎么让他停⽌呢,直接关闭进程吗?肯定不是的,接下来我们来说说如何让他播放10s后⾃动停⽌。

javaplayer总结

javaplayer总结

javaplayer总结JavaPlayer 是一个流行的 Java 视频播放器,它支持多种视频格式和播放模式,可以让用户在 Java 应用程序中方便地播放视频。

下面是 JavaPlayer 总结:1. 评分最高的内容:JavaPlayer 的评分最高的内容是其优秀的性能和易用性。

JavaPlayer 可以播放各种类型的视频文件,包括 MKV、AVI、MOV、MP4 等,而且它具有简单易用的 API,使得开发人员可以轻松地集成视频播放功能到他们的 Java 应用程序中。

2. 拓展:JavaPlayer 还可以进行一些有趣的拓展。

例如,开发人员可以使用 JavaPlayer 的 API 创建自己的视频播放器,支持自定义视频格式、字幕、音频、进度条等。

此外,JavaPlayer 还支持在视频中嵌入广告,为开发人员提供更多的商业机会。

3. 支持多种格式:JavaPlayer 支持多种视频格式,包括 MKV、AVI、MOV、MP4 等。

这是因为 JavaPlayer 使用了开源的 FFmpeg 库来处理视频文件,允许开发人员轻松地将视频文件格式转换为 JavaPlayer 支持的格式。

4. 播放模式:JavaPlayer 支持多种播放模式,例如自动播放、暂停、快进、快退、音量调节等。

此外,JavaPlayer 还支持全屏模式和缩放模式,使得用户可以更加舒适地观看视频。

5. 性能:JavaPlayer 的性能非常好,因为它使用了优化的视频编解码器和解码器。

此外,JavaPlayer 还支持多线程处理,使得它可以同时处理多个视频流,提高视频播放的流畅度。

6. 支持 Web 浏览器:JavaPlayer 还可以在 Web 浏览器中运行,允许用户通过互联网观看视频。

这是因为 JavaPlayer 是一个跨平台的应用程序,可以在不同的操作系统和浏览器中运行。

JavaPlayer 是一个非常流行的 Java 视频播放器,它提供了许多有用的功能和易用性,使得开发人员可以轻松地集成视频播放功能到他们的 Java 应用程序中。

基于Java的在线影音播放器开发及优化

基于Java的在线影音播放器开发及优化

基于Java的在线影音播放器开发及优化一、引言随着互联网的普及和网络带宽的提升,在线影音播放器已经成为人们日常娱乐生活中不可或缺的一部分。

基于Java语言的在线影音播放器具有跨平台性、易维护性和良好的扩展性等优点,因此备受开发者青睐。

本文将探讨基于Java的在线影音播放器的开发过程以及优化方法,帮助开发者更好地实现高性能、稳定可靠的在线影音播放器。

二、开发环境搭建在进行基于Java的在线影音播放器开发之前,首先需要搭建相应的开发环境。

通常情况下,我们可以选择使用JavaFX作为界面开发框架,结合FFmpeg等多媒体处理库来实现音视频播放功能。

同时,还需要考虑到网络通信模块的集成,以实现在线流媒体播放功能。

三、功能设计与实现1. 音视频格式支持在开发在线影音播放器时,需要考虑支持常见的音视频格式,如MP4、AVI、MKV等。

通过集成FFmpeg等多媒体处理库,可以实现对不同格式的音视频文件进行解码和播放。

2. 播放控制功能在线影音播放器通常具备播放、暂停、快进、快退、音量调节等基本控制功能。

通过JavaFX提供的界面组件和事件处理机制,可以轻松实现这些功能,并提供良好的用户体验。

3. 网络流媒体支持为了实现在线直播和点播功能,需要集成网络通信模块,支持HTTP、RTMP等流媒体协议。

通过网络请求和数据解析,可以实现从网络获取音视频数据并进行实时播放。

四、性能优化策略1. 资源管理优化在播放大规模音视频文件时,需要合理管理内存和线程资源,避免内存泄漏和资源浪费。

可以通过使用线程池管理线程、定时清理无用资源等方式来优化资源管理。

2. 缓冲策略优化为了提高在线影音播放器的流畅度和加载速度,可以采用预加载、分段缓冲等策略来优化缓冲机制。

通过合理设置缓冲区大小和加载策略,可以有效减少卡顿和加载时间。

3. 码率自适应优化针对不同网络环境和设备性能,可以实现码率自适应功能,根据当前网络带宽和设备性能动态调整音视频码率。

Java应用中的音频与视频处理

Java应用中的音频与视频处理

Java应用中的音频与视频处理在当今数字化时代,音频与视频处理已成为Java应用中的重要组成部分。

无论是在媒体播放器、语音识别、视频编辑还是在线教育等领域,Java都扮演着关键角色。

本文将探讨Java应用中的音频与视频处理的相关技术和实践。

一、音频处理1.1 音频格式音频文件通常以不同的格式存储,如MP3、WAV、FLAC等。

Java提供了丰富的库和工具,使开发者能够读取、写入和处理各种音频格式。

通过使用Java音频库(javax.sound),我们可以轻松地处理音频文件。

1.2 音频录制与播放Java可以利用javax.sound.sampled包中的类来实现音频的录制与播放功能。

通过使用TargetDataLine类,我们可以从音频设备中读取音频数据,而SourceDataLine类则用于将音频数据输出到设备。

这些类提供了一种简单而有效的方式来处理音频输入和输出。

1.3 音频处理效果音频处理效果是提升音频质量的重要手段之一。

Java中提供了一些开源的库和工具,如javazoom.jl.converter和TarsosDSP等,可以用于添加均衡器、混响、降噪等效果,以改善音频的声音质量和清晰度。

二、视频处理2.1 视频格式与音频类似,视频文件也以不同的格式存储,如MP4、AVI、MKV等。

Java通过使用开源框架FFmpeg,可以对不同的视频格式进行处理。

FFmpeg是一个跨平台的多媒体处理工具,支持压缩、转码、剪辑等功能。

2.2 视频播放与捕捉JavaFX是Java平台下用于构建富应用程序的工具包,它包含了用于视频播放的媒体类。

通过使用JavaFX提供的MediaPlayer类,我们可以加载和播放各种视频格式。

此外,Java还提供了类似于音频处理中的TargetDataLine和SourceDataLine类似的类,如VideoCapture用于捕捉实时视频流。

2.3 视频编辑与特效音频和视频处理往往需要对媒体进行编辑和添加特效。

基于java的影视网站设计与实现

基于java的影视网站设计与实现

基于Java的影视网站设计与实现引言随着数字技术的飞速发展,互联网已经成为了人们获取信息和娱乐的主要途径之一。

影视行业也随之发展壮大,许多人喜欢在网上观看电影、电视剧和综艺节目。

因此,设计和实现一个高效、稳定的影视网站是非常重要的。

本文将介绍基于Java语言的影视网站的设计与实现。

1. 系统概述基于Java的影视网站是一个在线观看影视内容的平台。

用户可以在该网站上浏览和搜索电影、电视剧和综艺节目,并进行在线观看。

该系统包含了用户管理、影视内容管理、搜索功能、播放功能等多个模块。

2. 技术选型2.1 服务端技术•Java Servlet:作为Web应用程序的后端处理技术,用于接收和响应客户端请求。

•Spring框架:提供依赖注入和面向切面编程等功能,简化开发流程。

•MyBatis:用于数据库访问和操作,提供了ORM(对象关系映射)的支持。

2.2 前端技术•HTML/CSS:用于构建网页结构和样式。

•JavaScript:用于实现网页的动态效果和交互功能。

•jQuery:简化JavaScript代码的书写,提供了丰富的插件和工具函数。

2.3 数据库•MySQL:作为关系型数据库,用于存储用户信息、影视内容及其相关数据。

3. 系统功能设计与实现3.1 用户管理模块用户管理模块用于实现用户的注册、登录和个人信息管理功能。

•注册:用户输入用户名、密码等信息后,系统将其保存到数据库中,并生成唯一的用户ID。

•登录:用户输入用户名和密码,系统验证后,允许用户登录系统。

•个人信息管理:用户可以修改自己的个人信息,包括用户名、密码、头像等。

3.2 影视内容管理模块影视内容管理模块用于管理影视内容的分类、标签、演员等信息。

•分类管理:管理员可以添加、编辑和删除不同的影视分类,如电影、电视剧、综艺节目等。

•标签管理:管理员可以添加、编辑和删除影视的标签,用于标识影视内容的特点。

•演员管理:管理员可以添加、编辑和删除演员信息,包括姓名、个人简介、照片等。

基于Java的视频播放器软件开发与应用

基于Java的视频播放器软件开发与应用
5.相关支持条件
1) 个人计算机(Window/XP系统)
2) 开发环境:操作系统window7 64位;jdk1.7.5
3) 开发工具:Eclipse4.5,Tomcat7.0
6. 进度安排
1)2016年10月到2016年11月 确定论文题目,完成开题报告;
2)2016年11月到2016年1月 设计好软件的界面与功能;
基于Java的视频播放器Βιβλιοθήκη 件开发与应用 1.选题目的
随着技术的发展,多媒体素材类型也增多,音视频、图像等的信息容量大,受硬件条件限制,随着硬件技术的不断提高,多媒体技术已为各类人员广泛使用,开发多媒体课件、网络课程、网站、应用软件、管理项目等均需利用多媒体素材,因此开发制作这一播放器具有现实意义,与其它多媒体播放器比较,这一多媒体播放器具有功能强大、占用空间小的特点,它与现有多媒体资源应用状况紧密结合,既具有很强的直观感,又不失一般性。
指导教师签名: 年 月 日
总体




指导教师意见:
1、按计划完成,完成情况优( )
2、按计划完成,完成情况良( )
3、按计划完成,完成情况中等( )
4、基本按计划完成,完成情况及格( )
5、完成情况不及格( )
指导教师签名: 年 月 日
指导教师意见:
第4次检查
学生总结:
检查论文的时,发现论文的格式跟老师的给的模板相差太多,而且缺少一些用例图和表的设计,个别的字体大小也不合适。最后在我的不断努力下循循的更改好论文。这真是一个富有挑战性而且不断进步的过程!
指导教师意见:
学生签名: 年 月 日
2.思路
本选题主要实现如下功能:
1) 能够播放.avi,mp4等文件

教你利用VC++和JAVA 设计视频播放器的详细步骤

教你利用VC++和JAVA 设计视频播放器的详细步骤

利用VC++设计视频播放器一 需求分析制作一个视频播放器,能够播放多种格式的多媒体文件:CD 音乐曲目(.cda )、数字化波形声音(.WAV )、MIDI 文件(. mid, .rmi, .midi )、Windows Media 文件(. asf, .wm, .wma )、电影文件(. mpeg , . mpg , .mp3)、视频文件(.avi , . wmv )、音频文件(. wav , . snd , .au , .aif )等。

能够有用户自己选择文件,提供媒体播放控制:打开、播放、暂停、停止、全屏能控制播放音量的大小。

应用程序界面美观,使用方便,有完善的操控按钮或进度指示条等。

本课题对软硬件平台要求不高,操作系统可选择Windows2000/Window XP 。

在Visual C++ 6.0下用ActiveMovie 控件来实现。

本课程设计用例如图1所示,用户使用播放器,播放器完成媒体播放和音量调节两大功能。

<< use>> 用户图1 视频播放器UML 用例图二 对象分析由于播放器主要围绕实现以上两大功能,可以建立如表1所示的对象。

表1 播放器所建对象列表对象 属性 方法操作界面媒体文件、路径,媒体播放进度、状态,音量信息 显示媒体文件信息(文件名、路径) 媒体播放控制:打开文件、播放、暂停、停止、退出、全屏 显示播放信息(播放进度、状态)、控制音量 媒体播放媒体文件名、路径,控制命令 打开文件、播放、暂停、停止、退出、全屏 音量控制 音量调节 放大音量,减小音量音量控制和媒体播放对象对界面管理存在依赖关系,这两个对象要从界面获取控制指令,它们的属性要在界面上显示。

本播放器的类图如图2所示。

媒体播放 音量调节 播放器图2 播放器类图三 界面设计界面应满足以下要求:1. 界面首先要布置一系列按钮控件实现所有要实现的功能;2. 设置“播放进度条”来指示媒体文件的播放进度,还应该可以用鼠标拖动进度条来改变播放进度;3. 设置音量控制按钮(包括增大和减小);4. 界面应尽量美观;根据以上描述,程序运行时效果如图3所示。

javax media 用法

javax media 用法

javax.media 用法javax.media是一个用于处理音频、视频和其他多媒体数据的Java 包。

以下是javax.media的一些基本用法:1. 引入javax.media包:在使用javax.media之前,需要将javax.media包引入到Java项目中。

可以通过下载JMF(Java Media Framework)并添加到Java项目的类路径中,或者使用构建工具(如Maven或Gradle)来引入。

2. 创建Manager类实例:Manager类是javax.media包中的一个核心类,用于管理多媒体设备、数据源和处理器。

可以通过创建一个Manager实例来获取多媒体框架的访问权限。

例如:```javaManager manager = Manager.getManager(null);```3. 创建Player实例:Player接口是javax.media包中用于播放多媒体数据的接口。

可以使用Manager类的方法来创建一个Player实例,例如:```javaPlayer player = manager.createRealizedPlayer(new MediaLocator("file:/path/to/mediafile"));```其中,"file:/path/to/mediafile"是媒体文件的路径。

4. 控制播放:创建Player实例后,可以使用play()方法开始播放多媒体数据,使用stop()方法停止播放,使用close()方法关闭播放器。

例如:```javaplayer.play(); // 开始播放player.stop(); // 停止播放player.close(); // 关闭播放器```5. 处理生命周期:在使用javax.media处理多媒体数据时,需要注意处理生命周期问题。

在应用程序结束时,需要确保释放所有使用的资源。

Java中的音频和视频处理构建多媒体应用程序

Java中的音频和视频处理构建多媒体应用程序

Java中的音频和视频处理构建多媒体应用程序在Java中,音频和视频处理是构建多媒体应用程序不可或缺的一部分。

Java提供了一系列的库和API,使得开发者能够轻松地处理音频和视频文件,实现丰富多样的功能和效果。

一、音频处理1. 音频文件的读取与写入Java提供了javax.sound.sampled包,其中的AudioSystem类和AudioInputStream类可以用来读取和写入音频文件。

开发者可以使用AudioSystem.getAudioInputStream()方法获取一个音频输入流,然后使用AudioSystem.write()方法将音频数据写入指定的文件。

2. 音频格式转换在处理音频时,有时候需要将音频文件转换成其他的格式以便于播放或其他用途。

Java提供了javax.sound.sampled包中的AudioFormat类,通过设置不同的音频格式参数(如采样率、位深度、声道数等),可以实现音频文件的格式转换。

3. 音频播放与录制在Java中,我们可以借助javax.sound.sampled包的SourceDataLine类和TargetDataLine类来实现音频的实时播放和录制。

使用SourceDataLine类可以将音频数据发送到音频输出设备(如扬声器)进行播放,而使用TargetDataLine类则可以从音频输入设备(如麦克风)获取音频数据进行录制。

二、视频处理1. 视频文件的读取与写入Java提供了不少用于读取和写入视频文件的库,比较常用的是JavaCV和FFmpeg。

通过导入相关的库和API,我们可以使用Java代码来读取视频文件的帧数据,并将处理后的视频帧写入到新的文件中。

2. 视频格式转换与编解码在处理视频时,有时我们也需要对视频进行格式转换或者编解码操作,以适配不同的播放器或者设备。

JavaCV和FFmpeg提供了一系列的接口和方法,让开发者可以轻松地完成视频格式转换和编解码的操作。

java的JMF框架介绍(播放视频)

java的JMF框架介绍(播放视频)

用java编写打开摄像头程序2Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。

JMF API 的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。

在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。

Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。

它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。

JMF目前的最新版本是2.1,Sun通过它向Java中引入处理多媒体的能力。

下面是JMF所支持的功能的一●可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。

●可以播放从互联网上下载的媒体流。

●可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。

●处理多媒体文件,转换文件格式。

●向互联网上传音频和视频数据流。

●在互联网上广播音频和视频数据。

JMF的结构为了更好地说明JMF的结构,让我们用立体声音响做一个简单的比喻。

当你CD机播放CD唱片的时候,CD唱片向系统提供音乐信号。

这些数据是在录音棚中用麦克风和其他类似的设备记录下来的。

CD播放机将音乐信号传送到系统的音箱上。

在这个例子中,麦克风就是一个音频截取设备,CD唱片是数据源,而音箱是输出设备。

JMF的结构和立体声音响系统非常相似,在后面的文章中,你会遇到下面的这些术语:●数据源(Data source)●截取设备(Capture Device,包括视频和音频截取设备)●播放器(Player)●处理器(Processor)●数据格式(Format)●管理器(Manager)下面让我们来看一看这些术语到底代表什么意思。

1.数据源就像CD中保存了歌曲一样,数据源中包含了媒体数据流。

使用Java创建视频播放器

使用Java创建视频播放器

使用Java创建视频播放器-一个实战教程视频播放器是一种常见的应用程序,它允许用户播放本地视频文件或在线视频流。

在这个实战博客中,我们将创建一个简单的Java视频播放器,演示如何使用Java编程语言和Java多媒体库来实现视频播放功能。

以下是本实战博客的主要内容:项目概述准备工作创建Java项目添加多媒体库创建GUI界面播放本地视频播放在线视频总结让我们开始吧!1. 项目概述在本项目中,我们将创建一个Java视频播放器应用程序,它包括以下主要功能:显示视频播放窗口,包括播放、暂停、停止、音量控制和进度条。

允许用户选择本地视频文件并播放。

允许用户输入在线视频的URL并播放。

我们将使用Java编程语言和Java多媒体库来构建这个视频播放器应用程序。

2. 准备工作在开始之前,确保您的开发环境已设置好。

我们将使用Java编程语言和一些开发库来构建视频播放器应用程序,不需要额外的工具或库。

3. 创建Java项目首先,创建一个新的Java项目,您可以使用任何Java集成开发环境(IDE)来完成此操作。

在项目中,我们将创建Java类来实现视频播放器应用程序。

4. 添加多媒体库为了播放视频,我们需要引入一个Java多媒体库。

在本示例中,我们将使用JavaFX,它是Java的官方多媒体库,具有强大的视频播放功能。

请确保您的Java开发环境包含JavaFX库。

大多数现代的Java开发工具都默认包含JavaFX。

如果您不确定是否已包含JavaFX,可以在项目配置中进行检查。

5. 创建GUI界面我们将创建一个简单的Swing GUI界面,用于显示视频播放窗口和控制按钮。

创建一个Java 类,例如VideoPlayerApp,并在其中创建GUI界面。

javaCopy codeimport javafx.embed.swing.JFXPanel;import javafx.scene.media.Media;import javafx.scene.media.MediaPlayer;import javafx.scene.media.MediaView;import javafx.util.Duration;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;public class VideoPlayerApp {private JFrame frame;private JFXPanel videoPanel;private MediaView mediaView;private MediaPlayer mediaPlayer;private JButton playButton;private JButton pauseButton;private JButton stopButton;private JSlider volumeSlider;private JSlider progressSlider;public VideoPlayerApp() {frame = new JFrame("视频播放器");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(800, 600);frame.setLayout(new BorderLayout());videoPanel = new JFXPanel();frame.add(videoPanel, BorderLayout.CENTER);JPanel controlPanel = new JPanel(new FlowLayout());playButton = new JButton("播放");pauseButton = new JButton("暂停");stopButton = new JButton("停止");volumeSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);progressSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);controlPanel.add(playButton);controlPanel.add(pauseButton);controlPanel.add(stopButton);controlPanel.add(volumeSlider);controlPanel.add(progressSlider);frame.add(controlPanel, BorderLayout.SOUTH);playButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {playVideo();}});pauseButton.addActionListener(new ActionListener() { @Overridepublic void actionPerformed(ActionEvent e) {pauseVideo();}});stopButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {stopVideo();}});volumeSlider.addChangeListener(e -> {adjustVolume(volumeSlider.getValue());});progressSlider.addChangeListener(e -> {seekToProgress(progressSlider.getValue());});frame.setVisible(true);}public static void main(String[] args) {SwingUtilities.invokeLater(() -> new VideoPlayerApp());}private void playVideo() {// 实现播放视频的代码,略...}private void pauseVideo() {// 实现暂停视频的代码,略...}private void stopVideo() {// 实现停止视频的代码,略...}private void adjustVolume(int volume) {// 实现调整音量的代码,略...}private void seekToProgress(int progress) {// 实现跳转进度的代码,略...}}在上述代码中,我们创建了一个VideoPlayerApp类,包括一个Swing窗口和视频播放窗口、控制按钮以及音量和进度条。

javplayer用法(一)

javplayer用法(一)

javplayer用法(一)JavPlayer的用法简介JavPlayer是一款优秀的视频播放器,提供了丰富的功能和良好的使用体验。

本文将介绍JavPlayer的一些常用用法,并详细说明使用方法。

1. 下载与安装•访问JavPlayer的官方网站•在下载页面选择适合你设备的版本(Windows、Mac、Android等)•点击下载按钮,等待下载完成•安装JavPlayer,根据安装向导进行操作2. 打开和导入视频文件•双击JavPlayer的桌面图标,打开程序•点击菜单栏中的“文件”选项•在下拉菜单中选择“导入”或者直接点击“导入”图标按钮•在文件浏览器中选择你想要播放的视频文件,点击“确认”按钮即可导入3. 播放控制播放暂停•点击播放器主界面的播放图标或者按下空格键即可开始播放,再次点击图标或按下空格键可暂停播放。

快进和快退•拖动播放器进度条或者按下方向键右键可以快进到视频的某个时间点。

•拖动进度条到左边或者按下方向键左键可以快退到视频的某个时间点。

调整音量•点击播放器主界面的音量图标或者按下方向键上键可以增加音量。

•点击播放器主界面的音量图标或者按下方向键下键可以减小音量。

全屏和退出全屏•点击播放器主界面右下角的全屏图标或者按下F11键可以切换到全屏模式。

•在全屏模式下,再次点击全屏图标或者按下F11键可以退出全屏模式。

4. 字幕和音轨选择•点击菜单栏中的“字幕”选项,选择你想要的字幕语言或者禁用字幕。

•点击菜单栏中的“音轨”选项,选择你想要的音轨或者静音。

5. 设置•点击菜单栏中的“设置”选项,可以自定义JavPlayer的各种选项,包括界面语言、快捷键等。

•在设置中,你还可以调整播放器的画面质量、声音效果等参数。

6. 截图和录制•在播放过程中,点击播放器主界面的截图图标可以截取当前画面,并保存为图片。

•点击菜单栏中的“录制”选项,可以将视频录制保存为本地文件。

以上就是JavPlayer的一些常用用法,希望对你有所帮助!。

基于Java的音乐播放器的设计与实现

基于Java的音乐播放器的设计与实现

基于Java的音乐播放器的设计与实现介绍本文档旨在介绍基于Java的音乐播放器的设计与实现。

音乐播放器是一种常见的应用程序,它能够播放音频文件,并提供一系列基本的播放控制功能。

功能以下是基于Java的音乐播放器的主要功能:1. 播放和暂停:用户可以选择要播放的音乐文件,并进行播放和暂停操作。

2. 播放列表:用户可以创建和管理播放列表,以便更方便地组织音乐文件。

3. 选择曲目:用户可以通过界面选择要播放的曲目,或者通过搜索功能查找特定的曲目。

4. 快进和倒退:用户可以通过拖动进度条来快进或倒退音乐的播放位置。

5. 音量控制:用户可以通过滑动音量条来调整音乐的音量大小。

6. 重复和随机播放:用户可以选择是否要重复播放当前曲目或随机播放曲目列表中的音乐。

7. 歌词显示:如果音乐文件包含歌词信息,用户可以选择显示歌词以及歌词滚动展示功能。

设计与实现以下是基于Java的音乐播放器的设计与实现的主要步骤:1. 界面设计:设计一个用户友好的界面,包括播放控制按钮、播放列表、歌曲选择界面等。

2. 音频处理:使用Java提供的音频处理库,实现音频文件的解码和播放功能。

3. 播放逻辑:实现播放器的核心逻辑,包括播放、暂停、停止、快进/倒退等操作。

4. 播放列表管理:实现播放列表的创建、添加音乐、删除音乐等功能。

5. 用户交互:为用户提供直观的交互方式,包括点击按钮、拖动进度条等。

总结通过本文档的介绍,我们了解了基于Java的音乐播放器的设计与实现。

基于Java的音乐播放器可以为用户提供丰富的音乐播放功能,并通过友好的界面与用户进行交互。

设计和实现一个功能完善的音乐播放器需要综合考虑音频处理、播放逻辑、播放列表管理和用户交互等方面的因素。

javaplayer总结(一)

javaplayer总结(一)

javaplayer总结(一)前言在当今数字化的时代,人们对多媒体内容的需求越来越大。

为了满足用户的需求,许多开发者纷纷开发出各种多媒体播放器。

其中,Javaplayer作为一款资深的创作者,我想分享一些关于Javaplayer的相关内容。

正文Javaplayer的特点Javaplayer作为一款多媒体播放器,具有以下特点: - 跨平台性:Javaplayer可以在多个操作系统上运行,包括Windows、macOS和Linux等。

- 多格式支持:Javaplayer支持多种音频和视频格式,例如MP3、WAV、MPEG、AVI等,使用户可以无障碍地播放各种媒体文件。

- 强大的功能:Javaplayer提供了许多实用的功能,例如音频均衡器、倍速播放、循环播放等,提升了用户的使用体验。

- 简洁易用的界面:Javaplayer具有直观的用户界面,用户可以轻松选择和操作各种功能,降低了学习和使用难度。

Javaplayer的创新之处Javaplayer在功能和设计上有着独特的创新之处: - 自定义皮肤:Javaplayer允许用户自定义播放器的皮肤,让用户能够根据自己的喜好来个性化播放器的外观。

- 智能播放列表:Javaplayer能够根据用户的播放历史和偏好智能生成播放列表,提供更加个性化、智能化的播放体验。

- 快捷键支持:Javaplayer内置了丰富的快捷键,用户可以通过简单的按键操作来快速控制播放器,提高了工作效率。

Javaplayer的未来展望虽然Javaplayer已经具备了许多优秀的特点和功能,但我们仍然对它的未来充满期待: - 增强的网络功能:在未来版本中,我们计划加入更加强大的网络功能,例如在线播放、网络音乐库等,提供更加全面的多媒体解决方案。

- 更加智能的用户体验:我们将持续改进Javaplayer的智能算法,提升用户体验,使播放器能够更好地根据用户的喜好和行为习惯进行个性化推荐。

一个JAVA播放器的源代码

一个JAVA播放器的源代码
import javax.media.*;
import java.io.*;
import java.util.*;//为了导入Vector
//import com.sun.java.swing.plaf.windows.*;
public class MediaPlayer extends JFrame implements ActionListener,Runnable
MediaPlayer.java
----------------------------------------------------------------------------
//程序主文件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
}
catch(Exception e)
{
e.printStackTrace();
} *///此段代码使执行速度大大降低
bar=new JMenuBar();
setJMenuBar(bar);//此两行创建菜单栏并放到此窗口程序
//bar.setBackground(new Color(48,91,183));
index = list.locationToIndex(e.getPoint());//将鼠标坐标转化成list中的选项指针
createPlayer2();
//System.out.println("Double clicked on Item " + index);,此是测试的时候加的
list.setBackground(new Color(40,40,95));

java视频音频的处理

java视频音频的处理

static AudioFormat.Encoding ULAW; //指定 u-law 编码数据
如果不指定该变量,则默认使用线性 PCM 编码。 sampleRate:每秒样本数。即取样率,表示每一秒钟取样的频率,可选值有8000、11025、 16000、22050、44100。比如对于8000,表示每一秒钟会取样8000次,也就是采集8000次声 音。
图17-6 类关系图
图17-7 音频输入输入流程图 输入到混频器的信号也可以来源于剪辑(Clip)。剪辑是一个包含一段完整音频数据流的设 备,或者说,剪辑就是一个缓存在内存中的完整音频数据流。在一些要求反复播放音乐片段 的场合,例如游戏的背景音乐,剪辑是很有用的。
17.3.3 音频的数据格式
音频数据--也就是从 TargetDataLine 输入或从 SourceDataLine 输出的数据,必须符合音频格 式的标准。音频数据的格式选项 由 AudioFormat 类封装,主要选项包括:编码方式(可以 是 PCM(Pulse Code Modulation,脉冲编码调制)、MP3等)、通道数量、取样率、帧速率等。 根据不同的参数,AudioFormat 提供了3个构造函数
图17-5 JavaSound 体系结构 SPI 的作用是以插件(Plug-In)的形式提供自定义的扩展模块,我们只要提供与 SPI 兼容的 插件扩展模块,就可以在不改变 API 的情况下扩展 音频处理程序的能力。例如,假设有一 个只能播放 WAV 文件的程序,我们只要增加一个支持 MP3文件解码的插件模块,就可以在
targetDataLine
=
(TargetDataLine)
AudioSystem.getLine(dataLineInfo);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆大学课程设计说明书题目: Java程序设计之课程设计院系:计算机学院专业班级:计算机科学与技术4班学生:代金龙(20065231)程飞(20065265)王小东(2006 )指导教师:李芝兴2009 年1月6 日目录1、学生成绩评定表 (3)2、课程设计任务说明书 (6)3、需求分析 (7)4、程序设计过程 (7)4.1 实验原理 (7)4.2 程序设计图 (12)4.3 核心代码 (13)5、实验结果 (23)6、总结分析 (23)8、参考文献 (23)课程设计指导教师评定成绩表指导教师签名:年月日课程设计指导教师评定成绩表指导教师签名:年月日课程设计指导教师评定成绩表年月日指导教师签名:选题利用java JMF编制一个能播放mpeg,mpg,mov等格式的视频播放器;要求能够进行播放文件的选择,文件列表框中陈列选择的视频文件,能够控制视频的播放,退出,停止,快进,快退,下一个,上一个,音量的控制,静音控制,全屏选择,任意改变播放视频界面大小等功能。

3.需求分析3.1任务目的:1.实现视频文件的正确播放;2. 能够实现对视频播放的控制,如暂停,播放,快进,快退,上一个,下一个等功能;3.能够进行文件视频的选择,全屏,音量的控制,拖动,播放模式的控制等;4.任意改变播放视频界面大小等功能。

要求学生掌握:掌握Java的语言规范,面向对象的核心概念和特性。

掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等。

掌握Java应用软件的开发环境和开发过程掌握基于Jsp网站的开发环境和开发过程掌握面向对象的思想和程序设计方法。

3.2程序的设计、调试、运行的软件环境:操作系统:Windows XP(SP2)数据库及数据库管理软件:SQL Server 2000JDK环境:Java SE Development Kit(JDK)Version 6开发工具:Eclipse3.2运行平台:Windows、Linux各个版本、MAC等任何平台运行环境:Java SE Runtime Environment(JRE)Version4.程序设计过程4.1实验原理JMF提供了一个平台无关的框架来呈现时基媒体(time-based media)。

JavaMediaPlayerAPI的设计目标是支持多种标准的媒体格式,包括MPEG-1,MPEG-2,QuickTime,A VI,WA V,AU和MIDI.使用JMF,可以同步呈现不同来源的时基媒体。

现有的一些媒体播放器都严重依赖原生码来执行解压缩、渲染等计算密集型任务。

而JMF API则隐藏了具体实现,只提供抽象的编程接口。

举例来说,一个用JMF制作的播放器,具体运行的过程中可能会调用到操作系统的本地方法,但开发者写代码时可以无视本地方法的存在。

JMF Player API :接入不同的协议和分发(传输)机制接入不同的媒体数据类型定义事件模型,用于Player和应用程序间的异步通信4.1.1数据源(Data Source)一个DataSource 封装了媒体的地址、协议和分发的软件。

一个JavaMediaPlayer包含一个DataSource。

一旦创建,这个DataSource不能被用于其他媒体的传输。

一个Player的数据源可以用MediaLocator或URL来标示。

MdiaLocator(媒体定位器)是一个JMF类,用来描述Player播放的媒体。

MediaLocator与URL 类似,并且可以从URL来创建。

他们的区别在于,在Java中,URL只有其协议是已知协议时才能被创建,而MediaLocator则没有这个限制。

Java 媒体播放器可以播放来自多种数据源的媒体数据,包括本地、网络文件和实时广播等。

JMF支持两种不同的数据源。

Pull Data-Source (数据源被动的被获取)-由客户端发起数据传输并控制数据流,已知的协议包括HTTP(超文本传输协议)和本地文件。

Push Data-Source (数据源主动推送)-由服务器发起数据传输并控制推送数据流。

此类数据源包括广播媒体,多点传送的媒体和VOD(视频点播)。

客户端程序所能够控制的度量,取决于媒体源的类型。

举个例子说,MPEG文件可以被重定位(reposition),那么播放MPEG的客户端程序就可以允许用户重播或者跳进至一个新时间点;而由服务器段控制的广播媒体则不能被重定位;另外VOD协议则支持有限的用户操作,比如一个VOD客户端程序可以允许用户跳进至新位置,但不能快进和快倒。

4.1.2 Players一个Java Media Player是一个对象。

她基于时间来处理数据流,从DataSource读取数据并在确切的时间点渲染媒体。

一个Java Media Player必须实现Player interface.Clock定义了基本的计时和同步操作,她被Player 用来控制媒体的呈现。

Controller继承Clock对外提供提供如下方法:管理系统资源预载数据提供监听机制(Observable),对外发送媒体事件通知Duration提供了检测媒体时长的途径。

Player支持标准的用户控制,并放宽了来自于Clock的一些操作限制。

多个Player共享一个公共的计时和同步模型。

一个Player的媒体时间表示了媒体流的当前位置。

每一个Player有一个TimeBase。

TimeBase定义了Player的时间流逝。

当一个Player 被执行start,他的媒体时间会被映射到time-base时间。

如多个媒体要同步,那么他们必须使用同一个TimeBase.一个Player的用户界面可以包含一个可视组件和一个控制面板组件(control- panel component)。

我们用的时候可以选择实现一个自定义的用户界面,或者使用Player的默认的控制面板组件。

一般来说,一个Player在能够呈现媒体之前,必须先执行一序列的操作。

而这些操作有可能会耗费一定的时间,所以JMF定义了一些操作状态,并且提供了状态转换的操作机制。

4.1.3 Media EventsJMF事件报告机制允许我们的程序响应媒体驱动的错误,比如数据丢失或资源不可用。

事件系统同时也提供了重要的通知协议;当我们的程序调用一个Player的异步方法时,只有当收到响应的事件消息时,才能确认操作是否完成。

有两种JMF对象会抛出事件,他们是:GainControl对象和Controller 对象。

对于事件, GainControl和Controller 遵循Java Beans 形式。

GainControl对象只抛出一种类型的事件-GainChangeEvent。

我们通过实现GainChangeListener interface来响应gain(增益?)的变化。

Controller则会抛出多种派生自ControllerEvent的事件。

我们通过实现ControllerListener interface 来接收诸如Player的Controller抛出的事件消息。

下图显示了Controller抛出的各种事件类型:ControllerEvents 可分为三类:改变通知、关闭事件和转换事件变化通知(Change notification events)诸如RateChangeEvent 和DurationUpdateEvent。

他们表示Player的一些属性数值发生了变化。

这类事件通常是对一些方法调用的回馈。

例如,一个Player的setRate方法被调用,他会抛出一个RateChangeEvent.转换事件(TransitionEvents) 让我们的程序能够响应Player的状态变化。

当Player从一个状态转换到另一个状态时,就会抛出一个转换事件。

(在1.4中,我们会提供更多的关于Player 状态的信息)当player关闭时,则会抛出关闭事件(ControllerClosedEvents)。

当一个Player不再可用时,抛出ControllerClosedEvent. ControllerErrorEvent(控制器错误事件)则是关闭事件的一个特例。

我们写程序时,通过监听控制器错误事件,可以对Player故障作出响应,从而增进用户体验。

4.1.4 Player StatesJavaMediaPlayer有6种状态。

Clock 接口定义了两种主要的状态:Stopped和Started。

在普通操作中,Plyaer在到达Started状态前,会逐个通过上图中的每一个状态。

Unrealized(未实现)状态表示Player已经被实例化,但还不知道媒体的任何信息。

当Player 第一次被创建,他的状态就是Urealized。

Player的realize方法被调用后,会从Unrealized转入Realizing(实现中)状态。

这时的Player 应该正在检测资源需求。

在relization过程中,Player会获取只需加在一次的资源。

这些资源包括非独享的渲染资源。

(独享资源指的受限的资源。

例如只能被一个播放器使用的个别硬件资源,此类资源会在预取(Prefetching)的过程中加载。

)Realizing中的Player常常通过网络下载东西。

Player结束Realizing状态后,会转入Realized(已实现)状态。

这个状态下,Player会知道他需要哪些资源,还知道媒体的类型信息。

因为Realized Player知道怎样渲染数据,所以他能够提供可视组件和控件。

此时,Player与其他系统对象的连接已经就位,但此时还不会占用任何会阻止其他Player启动的资源。

Prefetch被调用后,Player会从Realized状态转入Prefetching(预取中)状态。

此时播放器在为呈现媒体作准备,包括调用媒体数据、获取独享资源和其他一些准备工作。

在媒体呈现过程中,一些操作可能会导致Prefetching状态重现,例如重新定位播放位置、播放器请求额外的缓冲区等。

当Player 结束预取,将转入Prefetched( 预取完成) 状态。

此时Player 已经准备开始播放但尚为实际开始。

调用start方法将使Player转入Started状态。

此时,Player的媒体时间被映射到time-base时间,并且clock开始运行。

此时播放器有可能会等待一个恰当的时间来呈现媒体数据。

当player从一个状态转入另一个状态时,会抛出TransitionEvents(转换事件),我们可以通过实现ControllerListener接口来监听这些时间并作出恰当的响应。

当播放器开始Realizing和Prefetching的时候,我们可以使用事件报告机制对Player进行管理,在调用Player方法之前,我们可以先检查Player状态,在作出恰当的操作。

相关文档
最新文档