网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.新一代网络模式Web 2.0火爆.
.用JavaMail发送带附件的Email.
.用java实现RSA算法.
.Java教程电子文档下载.
.连接SQLserver数据库注意事项.
.setUTCHours 方法.
.SUN 的 Java 认证体系.
.JBOSS4数据源配置大全(一).
.花二十分钟教你Ruby快速入门.
.2005年4月8日--正式开始我的Java.
.Java Servlet API说明文档(2.1a.
.Think in java 3rd 中文版6.
.java学习日记(线程).
.Java控件设计入门.
.Java 程序编码规范与技巧.
.如何实现二维向量.
.使用simpson规则完成积分运算.
.JDBC接口技术介绍2.
.Jbuilder 中 Tomcat 数据源的配置.
.RMI规范--第十章.

用Java多媒体框架设计自动播放机

发表日期:2008-1-5



  假如把Java媒体框架(http://java.sun.com/jmf)看作客户端安装的媒体播放机的话,那么这种框架并不是非常激动人心。它只支持少量媒体类型,并且事实上这些媒体类型都被象Windows媒体播放机以及QuickTime等其它的应用程序支持。

  但是从内容供给商的观点来看,下面这个事实更加有意义:JMF在所有的Java类型中都可用,这使在客户端上不必要有任何特定的媒体技术就可以部署媒体--所需要的只是J2SE Java运行时间。

  更重要的是它能利用.jar文件格式的一些性能把解码器和媒体组成到一个文件中,创建一个"自我播放电影",使用了象WinZip和StuffIt这样的压缩应用程序大致相同的方式来创建自我展开文档。

  我们把此分为三个阶段:

  1.使JMF能够播放.jar文件中的媒体。

  2.只使用需要播放本地媒体所需的JMF的一部分创建一个轻量级.jar文件。

  3.将代码和媒体放入.jar文件,并且创建一个合适的manifest文档以使它可以双击。

  基本的JMF播放的要害是获得Player,能解码和渲染你的媒体。一般来说,这通过使用Manager获得合适的DataSource来完成,在一个播放实例中提供了媒体流和流元数据,例如媒体格式。Manager然后找到一个Player来处理 DataSource。在两种情况下,Manager结合一个带有程序包前缀列表(象javax.media、com.ibm.media等等)的反射方案来试图寻找合适的类,例如假如一个计划的播放程序不能接受提供给它的DataSource,那么它就会抛出异常。

  Manager没有太多事要做,只是察看一下URL中的协议和文件扩展名,所以虽然它可以很轻易的知道如何处理file:///Users/cadamson/mymp3stash/some.mp3,但是它不知道如何处理象jar:file:/Users/cadamson/dev/jmftests/spmovie-old/src/gatsbymovie.jar!/movie/themovie.mov这样的URL。

  为了缓和这种情况,我们可以写一个DataSource,说得更准确一点就是一个PullDataSource,担负为Manager描述细节的责任。JarEntryDataSource中没有一个方法非凡难;我们提供的PullSourceStream还需要实现几个超级接口。

  它有些不够完美,但是这个类依靠文件扩展名来返回"内容类型"。这多多少少有点象一个MIME类型,除了使用句号代替斜线符号来格式化以外,所以它可被用于程序包名称(例如video/mpeg MIME类型变成video.mpeg,所以Manager可以找到com.sun.media.codec.video.mpeg包)。下面是我们的简单的实现:

public String getContentType() {
 try {
  URL url = getLocator().getURL();
  String urlFile = url.getFile();
  if (urlFile.endsWith(".mov"))
   return "video.quicktime";
  else if (urlFile.endsWith(".mpg"))
   return "video.mpeg";
  else if (urlFile.endsWith(".avi"))
   // Manager needs '_' insted of '-'
   return "video.x_msvideo";
  else
   return "unknown";
 } catch (MalformedURLException murle) {
   return "unknown";
 }
}


  另一个烦恼是JMF源代码表明假如提供的流是Seekable的话(这是一个提供随机存取seek()方法的接口),默认Player只能播放一个QuickTime DataSource。假如寻找点在流的非常上流的地方,那么JarEntryDataSource中的策略是使用InputStream.skip()。假如寻找点在当前读取点之后(调用tellPoint,因为它的值通过Seekable.tell ()方法返回),然后它必须关闭InputStream,再重新打开,跳到寻找点。它使用一个内部的thoroughSkip()方法来确定我们实际上停在哪里。


上一篇:10分钟Hibernate体验 人气:437
下一篇:Struts VS Spring 两种MVC框架比较 人气:571
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐