文谷首页 | 业界传真 | 网络技术 | 服务器 | 数据库 | 存储技术 | 系统安全 | 无线技术 | Cisco | .Net | Windows | Linux | Unix | Java
电子商务 | 网站工程 | 网页设计 | 平面设计 | 多媒体 | 编程语言 | Oracle | MSSQL | Photoshop | ASP | PHP | 实用技巧 | 进程查询 | 文谷论坛
Java频道
 资讯动态   考试认证   新手入门   核心技术   高级技术   J2EE   J2ME   XML   开源技术   其他技术
您现在的位置: IT文谷 >> 开发平台 >> Java >> 高级技术 >> 设计模式 >> 文章正文
QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门
QuickTime for Java API 入门
QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门
QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门

  最新一代的 iPod 媒体播放器在移动视频编程领域开辟了一个新机会 —— 但是如何入门呢?本文介绍将 QuickTime for Java? 库,以编程方式为 iPod 媒体播放器创建视频内容时需要这个库。

  Apple iPod 是当今市场上的几个媒体播放器之一,它能播放多种媒体,其中包括音频、视频和图片。在美国和其他地方,iPod 引领着便携媒体播放器市场,从诞生至今,已经售出 3千万套 iPod ,这占据了整个媒体播放器市场 78% 以上的份额。虽然 iPod 的成功显然是受 MP3 流行的推动,而且手机用户拍摄和交易数字图片到现在也有了一段时间,但移动视频的市场仍然在形成中。早期进入移动视频市场的潜在收益是显而易见的,但对许多开发人员来说,他们要解决的问题是最好地应用这项新技术的方式和地方。

  在这篇文章中,我首先将推荐一些移动视频的实际(可能也是非常流行的)应用,然后演示两个程序,让您开始使用 QuickTime for Java API 为 iPod 创建视频内容。这两个程序可以让您很容易地给现有的视频文件添加标题,并将传统的视频文件转换成与 iPod 兼容的格式。在文章末尾,将留给您一些示例代码,可以用它们学习使用 QuickTime for Java API 进行视频操作的更多内容。

为什么要用移动视频?


图 1. iPod 视频播放器
iPod 视频播放器

  便携媒体播放器在特定人群(即年龄在 18 到 38 岁之间,具有一定的可支配收入的消费者)中特别流行。因为移动视频对于便携媒体播放器来是相对较新的东西,所以对大多数开发者来说,遇到的第一个问题就是: 为什么要创建移动视频内容?除了移动媒体最明显的娱乐要求之外,还有许多实际的使用情况:移动媒体既可以促进销售,也可以给便携媒体播放器和内容带来一类新用户。请想想以下这些情况:

  • 房地产经纪人可以创建一段视频,将视频做成房产可用属性和用录制好的配音说明的一些功能的虚拟漫步。然后,潜在的住房买主可能会用便携媒体播放器查看中意的属性。在没有时间寻找所有符合自己需求的房产的住宅搜索客户中,这种极为节约时间的方式会变得非常流行。
  • 汽车厂商和经销商可以使用移动视频发布所销售的最新车型的视频目录。潜在客户就会更熟悉中意的车型的特性和好处,而不必亲自去经销商那里。
  • 学院和大学的官员可以用移动视频格式向学生提供提供演讲,辅助学生学习。
  • 生产商可以为汽车、书架、玩具(等等)提供移动视频格式的安装说明。

  显然,这只是创建移动视频内容的商业驱动力的几个示例。这些示例中的共同之处就是向新市场介绍便携媒体的潜力。现在,我们来看看允许用编程方式创建和编辑视频文件的 Java API。





  QuickTime for Java API

  对于 Java 开发人员来说,支持数字媒体的创建、修改和回放的能力最强、功能最丰富的 API 就是 QuickTime for Java API。QuickTime for Java 最初是为 Macintosh 平台创建的,但过去这几年时间里,Windows 和 Mac 用户也可以随意使用它。当然,如果曾经用 Java 语言做过一些编程,那么您可能会问:为什么不可以只使用 Java 媒体框架 (JMF) API。

  最初创建 JMF 是为了给 Java V1.0.2 的开发人员提供处理各种媒体的能力。但是,它的应用并不广,它支持一些过时的媒体格式和编码方式,例如 MPEG-2、AU、HotMedia 和 Flash 2。另一方面,QuickTime for Java 支持 QuickTime 可以播放的所有媒体格式和编码方式。使用 QuickTime for Java API 可以访问更新的媒体格式,其中包括 MPEG-4、MP3 音频、H.264 和 Flash 5。实际上,下面就是 QuickTime 支持的视频编码方式的完整列表:

  • 动画
  • Apple BMP
  • Apple Pixlet
  • Apple Video
  • Cinepak
  • Component video
  • DV and DVC Pro NTSC
  • DV PAL
  • DVC Pro PAL
  • Graphics
  • H.261
  • H.263
  • H.264
  • JPEG 2000
  • Microsoft® OLE
  • Microsoft Video 1
  • Motion JPEG A
  • Motion JPEG B
  • MPEG-4 (Part 2)
  • Photo JPEG
  • Planar RGB
  • PNG
  • Sorenson Video 2
  • Sorenson Video 3
  • TGA
  • TIFF

  向视频添加标题

如果是初次接触 QuickTime for Java API 或者是初次处理数字媒体,那么向视频片断添加标题是一个好的起点。清单 1 显示的 CaptionAdder.java 是一个简单的程序,它接受视频文件,然后向视频添加一个文本字符串作为标题。


  清单 1. CaptionAdder.java


import quicktime.*;

import quicktime.io.*;

import quicktime.std.image.*;

import quicktime.std.movies.media.*;

import quicktime.std.movies.*;

import quicktime.std.*;

import quicktime.qd.*;

import quicktime.util.QTPointer;





import java.io.*;



public class CaptionAdder {



 public static void main (String args[]) {



  if (args.length != 1){



    System.out.println("Usage: java CaptionAdder [input_filename]");



  } else {

      

    try {

     QTSession.open();     



     System.out.println ("QuickTime version: " + QTSession.getMajorVersion() + "." + 

        QTSession.getMinorVersion());



     QTFile qtfile = new QTFile(new File(args[0]));

     DataRef urlMovie = new DataRef ("file://" + qtfile.getPath());

     Movie movie = Movie.fromDataRef (urlMovie,StdQTConstants.newMovieActive);

    

     float  textTrackHeight = 32;



     QDRect movieBounds = movie.getNaturalBoundsRect();

     float  movieWidth  = movieBounds.getWidthF();

     float  movieHeight = movieBounds.getHeightF();



     Track  textTrack = movie.addTrack(movieWidth, textTrackHeight, 0);



     Matrix textTrackMatrix = textTrack.getMatrix();

     textTrackMatrix.translate (0, movieHeight - textTrackHeight);

     textTrack.setMatrix (textTrackMatrix);



     textTrack.setEnabled (true);



     int movieTimeScale = movie.getTimeScale();

     TextMedia textMedia = new TextMedia (textTrack, movieTimeScale);



       QDRect textBounds = new QDRect (movieWidth, movieHeight);



     textMedia.beginEdits();



      TimeInfo sampleTime = new TimeInfo (0, movie.getDuration()/2);

    

      String text = new String ("1234 Main St. - Listing price: $164,000");

      TextMediaHandler textMediaHandler = textMedia.getTextHandler();

      QTPointer textPointer = new QTPointer ( text.length() + 1, true );

      textPointer.copyFromArray ( 0, text.getBytes(), 0, text.length() );

      textMediaHandler.addTextSample (

        textPointer,

        QDFont.getFNum("Times"), 

        16, 

        0,

        QDColor.white,

        QDColor.black,

        QDConstants.teCenter,

        textBounds,

        StdQTConstants.dfClipToTextBox | StdQTConstants.dfKeyedText,

        0,0,0,

        null,

        sampleTime.duration );

      

     textMedia.endEdits();



     textTrack.insertMedia (sampleTime.time, 0, sampleTime.duration, 1 );

     OpenMovieFile outStream = OpenMovieFile.asWrite (qtfile); 



     movie.updateResource (outStream, StdQTConstants.movieInDataForkResID, 

        qtfile.getName());

    } catch (Exception e) {

         e.printStackTrace();

             QTSession.close();

             System.exit(0);

    }

        

               QTSession.close();



  // end else

  }



  System.out.println ("complete.");



 //end method

 }

  



}


  

[1] [2] 下一页  

[1] [2] 下一页

QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门
  • 上一篇文章:

  • 下一篇文章:
  • 进入论坛讨论

    相关文章
    我的Thinking in Java学习笔记
    使用JBoss和Eclipse创建J2EE应用
    SpringFramework(9)
    NoTitle385
    向Web Service进军--Axis+Tomcat模拟一个银行存取款
    JAVA中的指针,引用及对象的clone
    JAVA中用动态代理类实现记忆功能(二)
    JAVA中用动态代理类实现记忆功能(一)
    DB Test
    基金系统的初步研究(1)
    SpringFramework(8)
    深入浅出Java clone技术(2)
    热门文章最新推荐

    版权与免责声明:
    ① 本网转载其他媒体稿件是为传播更多的信息,此类稿件不代表本网观点,版权归原作者所有,本网不承担此类稿件侵权行为的连带责任。
    ② 本站原创文章,转载时请注明出自文谷及作者姓名
    ③在本网BBS上发表言论者,文责自负。
    ④如您因版权等问题需要与本网联络,请在30日内联系 。
    QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门
    QuickTime for Java API 入门QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门2006-7-19 21:31:09QuickTime for Java API 入门

    全站热点
    最新推荐
    关于文谷 | 联系文谷 | 免责声明 | 文谷论坛
    Tel: 0577-65690019      E-mail: ichenjian@gmail.com    MSN:ichenjian@hotmail.com    QQ:2911194
    Copyright © 2004-2008 wengu.com 文谷 All Rights Reserved
    浙ICP备05000327号