`

移动视频: QuickTime for Java API 入门

 
阅读更多

在 Java 平台上创建 iPod 视频内容

developerWorks
文档选项
将此页作为电子邮件发送

将此页作为电子邮件发送



级别: 初级

最新一代的 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
 }
 
}

关于代码

几乎每个 QuickTime for Java 应用程序都一样,所有的实际动作都发生在 QTSession.open()QTSession.close() 语句之间。在调用 QTSession.open() 时,QuickTime 引擎可以初始化其自身。如果没有先调用 QTSession.open(),就想调用其他 QuickTime for Java 类,那么您会获得抛出到命令行中的非常难看的堆栈跟踪。

QuickTime for Java API 中使用的核心对象之一是 quicktime.std.movies.Movie 对象。如果初次使用 QuickTime for Java,那么需要认识到,在 quicktime.std.movies.Movie 对象和硬盘上可能存在的 file_name.mov 之间有一点细微的区别。重要的是,可以创建 quicktime.std.movies.Movie 对象,并且无需要在硬盘上创建 file_name.mov 文件该对象就可以存在。

quicktime.std.movies.Movie 对象可由多个轨道 组成,这些轨道是独立的媒体源(例如音频、视频、静态图片或文本)。在 CaptionAdder.java() 中,在创建了 quicktime.std.movies.Track 对象后,我在 textMedia.beginEdits() 语句和 textMedia.endEdits() 语句之间添加了文本标题。在这个示例中,我用 quicktime.std.movies.TimeInfo 对象设置标题在视频中显示的时间长度,以及什么时候开始显示标题。我想让文本标题在视频的前半段显示,所以我把 TimeInfo 设为从 0 开始,并通过 movie 的持续时间将它设置为运行到一半时结束。





回页首


使用 CaptionAdder.java

那么该如何使用 CaptionAdder.java 呢?首先,调用 CaptionAdder.java 非常简单直接。在向类路径中添加了 QuickTime for Java 库之后,需要做的就是提供想要编辑的文件的名称。例如,假设想向 图 2 所示的房地产清单视频添加标题。



图 2. 没有标题的房地产视频示例截图
没有标题的房地产视频示例截图

要向这个文件添加标题,只需如 清单 2 中所示那样运行 CaptionAdder.java 程序即可。



清单 2. 使用 CaptionAdder.java
java CaptionAdder listing22345.mov 

结果显示在 图 3 中。



图 3. 添加了标题的房地产视频示例
虚拟的房地产清单视频在运行了 CaptionAdder.java 之后的截图




回页首


转换成 iPod 格式

在有了使用 QuickTime for Java API 创建和操作视频内容的基础之后,下一个主要障碍就是把内容转换成与 iPod 兼容的格式。不论使用摄像机、从活动视频源录制,还是创建动画序列,视频内容都不会立即与 iPod 视频播放器兼容。iPod 对于它播放的媒体的类型有点挑剔。表 1 显示了 iPod 环境支持的视频格式和设置。



表 1. iPod 兼容内容的视频设置

 


视频格式

数据率

尺寸

帧率
H.264 视频 最高 768 Kbps 320 x 240 像素 30 fps
MPEG-4 视频 最高 2.5 Mbps 480 x 480 像素 30 fps

让问题更复杂的是,对于视频中的音轨,它只支持高级音频编码 (AAC),所以如果想在 iPod 上播放视频,不仅仅要转换传统视频内容。幸运的是,可以求助于 MovieConverter.java,它是转换传统视频内容到 iPod 兼容格式的一个方便工具。MovieConverter.java清单 3 中所示。



清单 3. MovieConverter.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.IOException;
import quicktime.*;
import quicktime.io.*;
import quicktime.qd.*;
import quicktime.std.*;
import quicktime.std.clocks.*;
import quicktime.std.StdQTConstants;
import quicktime.std.image.*;
import quicktime.std.movies.*;
import quicktime.std.movies.media.*;
import quicktime.std.qtcomponents.*;
import quicktime.util.*;
import quicktime.app.view.*;
public class MovieConverter extends JFrame implements Errors, ActionListener{
 
 QTComponent component = null; 
 JPanel jpanel = null;
 Button selectButton = null;
 public static void main (String args[]) {
 try{
 new MovieConverter();
 } catch(Exception e){
 System.out.println(e);
 }
 }
 public MovieConverter(){
 super("Movie Converter");
 try { 
 QTSession.open();
 } catch (Exception e) {
 e.printStackTrace();
 QTSession.close();
 }
 jpanel = new JPanel();
 this.setContentPane(jpanel);
 selectButton = new Button ("Select a File to Convert");
 selectButton.addActionListener(this);
 jpanel.add (selectButton);
 addWindowListener(new WindowAdapter () {
 public void windowClosing (WindowEvent e) {
 QTSession.close();
 dispose();
 }
 public void windowClosed (WindowEvent e) { 
 System.exit(0);
 }
 }); 
 this.pack();
 this.setVisible(true);
 }
 public void actionPerformed (ActionEvent event) {
 exportMovie(); 
 }
 void displayMovie (Movie m) throws QTException {
 component = QTFactory.makeQTComponent (new MovieController (m));
 jpanel.add ((Component)component);
 jpanel.remove(selectButton);
 pack();
 }
 
 void exportMovie () {
 try{
 FileDialog fileDialog = new FileDialog (this, 
 "Choose Movie to Export...", FileDialog.LOAD);
 fileDialog.show();
 if (fileDialog.getFile() == null)
 return;
 QTFile movieFile = new QTFile (fileDialog.getDirectory() 
 + fileDialog.getFile());
 
 Movie movie = Movie.fromFile (OpenMovieFile.asRead(movieFile));
 
 if (component != null) {
 component.setMovieController(new MovieController(movie));
 } else {
 displayMovie (movie);
 }
 
 new Thread (new Exporter(movie)).start();
 
 } catch (QTException err) {
 err.printStackTrace();
 }
 }
 
}





回页首


使用 MovieConverter.java

使用 MovieConverter.java 非常简单。在 图 4 中,可以看到一个关于如何使用 Internet 的虚拟学术培训视频的截屏(从 Google 的主页开始)。实际的影片文件是 AVI 格式,并且还包括授课录音的音轨。



图 4. 示例学术培训视频的截屏
示例学术培训视频的截屏

MovieConverter.java 程序将这个视频文件转换成 iPod 兼容的格式很容易。在启动 MovieConverter.java 之后,首先选择要转换的文件。然后指定新创建的文件的名称,如 图 5 中所示。



图 5. MovieConverter.java 请求新文件的名称
MovieConverter.java 请求新文件的名称

在指定了新视频文件的名称之后,应用程序显示一个影片设置总结屏幕,如 图 6 中所示。在这个屏幕上,有修改编码方式、压缩算法的选项,甚至可以对媒体应用视频过滤器。



图 6. 影片设置总结
影片设置总结

图 7 中,可以看到 MovieConverter 的视频设置窗口,在这个窗口中,可以选择视频编码方式,而提供了转换后的视频预览。



图 7. 视频设置窗口
MovieConverter.java 的视频设置窗口

设置好之后,MovieConverter 生成可以在 iPod 视频播放器上播放的新视频文件。还要注意的是,MovieConverter.java 是个功能丰富且强大的应用程序。不但可以用它生成能够在 iPod 媒体播放器上播放的视频内容,还能用它把传统视频转换成 QuickTime 支持的其他视频格式。





回页首


结束语

在数年之后,iPod 很有可能会领导便携媒体播放器市场。目前这代 iPod 媒体播放器中添加了视频内容,这开辟了许多令人兴奋的营销和商业机会。在这篇文章中,我提供了移动视频内容的一些实际和商业上的应用,介绍了 QuickTime for Java API,并演示了如何用编程方式操纵移动视频文件,并将它转换成与视频 iPod 兼容的格式。



参考资料

学习

获得产品和技术

讨论
分享到:
评论

相关推荐

    QuickTime for Java API.pdf

    本文主要介绍了 QuickTime for Java API 的强大功能和移动视频市场的前景,旨在帮助开发人员更好地应用移动视频技术,创造更多的商业机会。 知识点: 1. 移动视频市场的前景和潜力 2. QuickTime for Java API 的...

    java quicktime 开发包

    在Java QuickTime开发包中,`Oreilly.QuickTime.for.Java.A.Developers.Notebook.Jan.2005.eBook-LiB.chm` 文件很可能是一本关于QuickTime for Java的开发者指南或手册,可能包含了详细的API介绍、示例代码以及最佳...

    quick time for java docs

    Quick Time for Java(QTJ)是Apple公司推出的一项技术,旨在让Java应用程序能够利用QuickTime技术来处理多媒体内容,如视频、音频、图像等。它为Java开发者提供了一套丰富的API,使得在Java环境中集成多媒体功能变...

    A Developer Notebook

    这本书深入浅出地介绍了如何在Java环境中集成和操控QuickTime API,以实现音频、视频处理以及丰富的交互功能。 QuickTime是由Apple开发的一种多媒体框架,它提供了强大的媒体播放、编辑和创建功能。在Java环境中,...

    基于Java 开发QuickTime 程序

    使用QuickTime Java API,开发人员可以创建功能丰富的多媒体应用程序,这些程序不仅能够播放QuickTime电影,还可以处理各种图像和音频格式。API提供了处理流媒体、时间同步、动画控制等多种功能,使得Java程序员可以...

    PEAR::QuickTime-开源

    这个库的主要目的是为了简化在Web开发中集成QuickTime媒体文件的过程,使得开发者能够更轻松地在网页或应用程序中嵌入、播放或者操作QuickTime格式的音频、视频和其他多媒体内容。 QuickTime是由Apple公司开发的一...

    Quicktime_File_Format.rar_march_quicktime_quicktime file

    QuickTime文件格式,简称为QTF或QTFF,是由Apple公司开发的一种多媒体容器格式,用于存储音频、视频和字幕等数据。这个格式是QuickTime技术的核心组成部分,自1991年首次发布以来,已经成为了广泛应用于多媒体内容...

    quicktime-sdk-7.3-for-windows-master

    1. 视频播放:ARToolKit 5可能使用QuickTime API来播放和处理视频流,这在实现虚拟现实(VR)或增强现实(AR)应用时至关重要,因为这些应用通常需要实时处理视频输入。 2. 图像处理:QuickTime SDK 提供了图像处理...

    QuickTime_7.79.80.95.1457943615

    QuickTime是由苹果公司开发的一款强大的多媒体处理软件,它在音频和视频播放领域有着广泛的应用。标题中的"QuickTime_7.79.80.95.1457943615"可能指的是该软件的一个特定版本,版本号通常包含主版本号、次版本号、...

    quicktimesdk.zip_quicktime_quicktime 播放器_quicktimesdk

    该SDK包含了丰富的API接口和文档,旨在为程序员提供集成QuickTime技术到自定义应用程序的能力。QuickTime技术支持多种媒体格式,包括视频、音频、图像和3D图形,因此在多媒体应用开发中非常流行,特别是在需要高清晰...

    Quicktime 5 Installer

    QuickTime是由苹果公司开发的一款强大的多媒体处理软件,它在视频播放、音频处理、多媒体创作等领域具有广泛的应用。QuickTime 5.0版本是该系列的一个重要里程碑,它在功能和性能上都有显著提升,尤其在当时的技术...

    QuickTime播放器.zip

    然而,值得注意的是,苹果公司在2016年停止了对QuickTime for Windows的技术支持,因此,对于Windows用户来说,继续使用QuickTime播放器可能存在安全风险。 "QuickTimeInstaller.exe"是QuickTime播放器的安装程序...

    quicktime—sdk

    2. **QuickTime Framework**: 提供了一系列API,用于处理多媒体数据,包括音频、视频、图像、文本以及时间线控制等。开发者可以通过这些API创建、编码、解码、编辑多媒体内容。 3. **3D和交互性**: QuickTime支持3D...

    QuickTime 视频播放器 QuickTime Pro 7.7.9 中文版.zip

    QuickTime 视频播放器 QuickTime Pro 中文版QuickTime 视频播放器 QuickTime Pro 中文版 适用于 Mac OS X 的 QuickTime 7 现在,基于 QuickTime 的应用程序可以通过 Mac OS X Tiger 中新的 Core Media Services 充分...

    QuickTime SDK 7.3

    3. **媒体捕捉**:QuickTime SDK支持实时音频和视频捕捉,可用于创建基于视频聊天、直播或监控的应用。 4. **图形与动画**:除了音频和视频处理,SDK还包含了处理静态图像、动画GIF和QuickTime电影的能力,可以创建...

    Java API中文版帮助文档

    Java API中文版帮助文档是Java开发者的重要参考资料,它包含了Java平台标准版(Java SE)的各种类库、接口和工具的详细信息。这个文档是针对Java Media Framework (JMF) 的API,JMF是一个用于处理多媒体数据的开源...

    quicktime播放器.rar

    QuickTime播放器是由苹果公司开发的一款多媒体播放器,它能够处理多种音频、视频格式以及相关的图像和动画内容。这款软件在过去的很多年里是Mac和Windows用户常用的多媒体播放解决方案之一。下面将详细介绍QuickTime...

    java 视频制作插件

    Java视频制作插件是用于在Java环境中开发视频处理和制作应用程序的重要工具。这些插件能够帮助开发者集成视频处理功能,例如视频捕获、编辑、转换和播放,为各种项目提供便利。Java Media Framework (JMF) 是一个...

    QuickTime SDK Sample

    QuickTime SDK Sample for Windows, part 1 是一个针对Windows平台的开发示例,它利用了QuickTime Software Development Kit (SDK) 提供的功能。QuickTime SDK是Apple公司为开发者设计的一套工具,允许他们创建、...

    java 运行视频音频构架包

    Java运行视频音频构架包是一种用于在Java平台上处理多媒体数据,特别是视频和音频播放的解决方案。这个包包含了一个名为"jmf-2_1_1e-windows-i586.exe"的可执行文件,它是Java Media Framework (JMF) 的一个版本,专...

Global site tag (gtag.js) - Google Analytics