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 影视内容管理模块影视内容管理模块用于管理影视内容的分类、标签、演员等信息。

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

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

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

  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状态,在作出恰当的操作。

相关文档
最新文档