您好,欢迎来到投聚财经。
搜索
您的当前位置:首页quicktime for java api

quicktime for java api

来源:投聚财经




最新一代的iPod媒体播放器在移动视频编程领域开辟了一个新机会—— 但是

如何入门呢?本文介绍将QuickTimefor Java 库,以编程方式为iPod媒体播放

器创建视频内容时需要这个库。

AppleiPod 是当今市场上的几个媒体播放器之一,它能播放多种媒体,其

中包括音频、视频和图片。在美国和其他地方,iPod引领着便携媒体播放器市

场,从诞生至今,已经售出3千万套iPod,这占据了整个媒体播放器市场78

以上的份额。虽然iPod的成功显然是受MP3流行的推动,而且手机用户拍摄和

交易数字图片到现在也有了一段时间,但移动视频的市场仍然在形成中。早期进

入移动视频市场的潜在收益是显而易见的,但对许多开发人员来说,他们要解

决的问题是最好地应用这项新技术的方式和地方。 在这篇文章中,我首先

将推荐一些移动视频的实际(可能也是非常流行的)应用,然后演示两个程序,

让您开始使用QuickTimefor Java API iPod创建视频内容。这两个程序可

以让您很容易地给现有的视频文件添加标题,并将传统的视频文件转换成与

iPod兼容的格式。在文章末尾,将留给您一些示例代码,可以用它们学习使用

QuickTimefor Java API 进行视频操作的更多内容。

为什么要用移动视频



1.iPod 视频播放器

便携媒体播放器在特定人群(即年龄在18 38 岁之间,具有一定的可支

配收入的消费者)中特别流行。因为移动视频对于便携媒体播放器来是相对较新



的东西,所以对大多数开发者来说,遇到的第一个问题就是: 为什么要创建移

动视频内容?除了移动媒体最明显的娱乐要求之外,还有许多实际的使用情况:

移动媒体既可以促进销售,也可以给便携媒体播放器和内容带来一类新用户。

请想想以下这些情况:

房地产经纪人可以创建一段视频,将视频做成房产可用属性和用录制好的配

音说明的一些功能的虚拟漫步。然后,潜在的住房买主可能会用便携媒体播放器

查看中意的属性。在没有时间寻找所有符合自己需求的房产的住宅搜索客户中,

这种极为节约时间的方式会变得非常流行。

汽车厂商和经销商可以使用移动视频发布所销售的最新车型的视频目录。潜

在客户就会更熟悉中意的车型的特性和好处,而不必亲自去经销商那里。

学院和大学的可以用移动视频格式向学生提供提供演讲,辅助学生学习。

生产商可以为汽车、书架、玩具(等等)提供移动视频格式的安装说明。

显然,这只是创建移动视频内容的商业驱动力的几个示例。这些示例中的共

同之处就是向新市场介绍便携媒体的潜力。现在,我们来看看允许用编程方式创

建和编辑视频文件的JavaAPI

QuickTime for Java API

Macintosh

不可以只使用Java媒体框架(JMF)API

最初创建JMF是为了给JavaV1.0.2 的开发人员提供处理各种媒体的能力。

但是,它的应用并不广,它支持一些过时的媒体格式和编码方式,例如MPEG-2

AUHotMediaFlash2。另一方面,QuickTimefor Java 支持QuickTime可以

播放的所有媒体格式和编码方式。使用QuickTimefor Java API 可以访问更新

的媒体格式,其中包括MPEG-4MP3音频、H.2Flash5。实际上,下面就

QuickTime支持的视频编码方式的完整列表:

动画

AppleBMP

ApplePixlet

AppleVideo

Cinepak

Component video
DV and DVC Pro NTSC



DV PAL



DVCPro PAL
Graphics
H.261
H.263
H.2
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

向视频添加标题
向视频片断添加标题是一个好的起点。清单 1 显示的 CaptionAdder.java 是一
如果是初次接触 QuickTime for Java API 或者是初次处理数字媒体, 那么





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();
textTrack.setMatrix (textTrackMatrix);
textTrackMatrix.translate (0, movieHeight - textTrackHeight);
textTrack.setEnabled (true);

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: $1,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,




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
//end method } }
}

关于代码

几乎每个QuickTimefor Java 应用程序都一样,所有的实际动作都发生在QTSession.open()QTSession.close()语句之间。在调用QTSession.open()时,QuickTime引擎可以初始化其自身。如果没有先调用QTSession.open(),就想调用其他QuickTimefor 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

非常简单直接。在向类路径中添加了QuickTimefor Java 库之后,需要做的就

是提供想要编辑的文件的名称。例如,假设想向图 2所示的房地产清单视频添

加标题。



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

要向这个文件添加标题,只需如清单 2中所示那样运行

CaptionAdder.java程序即可。

清单2.使用CaptionAdder.java

javaCaptionAdder listing22345.mov

结果显示在图 3中。





3.添加了标题的房地产视频示例

转换成iPod格式

在有了使用QuickTimefor Java API 创建和操作视频内容的基础之后,下一

个主要障碍就是把内容转换成与iPod兼容的格式。不论使用摄像机、从活动视

频源录制,还是创建动画序列,视频内容都不会立即与iPod视频播放器兼容。

式和设置。
iPod 对于它播放的媒体的类型有点挑剔。表 1 显示了 iPod 环境支持的视频格
1. iPod 兼容内容的视频设置


让问题更复杂的是,对于视频中的音轨,它只支持高级音频编码(AAC),所

以如果想在iPod上播放视频,不仅仅要转换传统视频内容。幸运的是,可以求

助于MovieConverter.java,它是转换传统视频内容到iPod兼容格式的一个方

便工具。MovieConverter.java如清单 3中所示。

清单3.MovieConverter.java






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[]) {
} catch(Exception e){ new MovieConverter(); try{
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
jpanel.add ((Component)component); jpanel.remove(selectButton);(m));
pack();
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));




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 请求新文件的名称

在指定了新视频文件的名称之后,应用程序显示一个影片设置总结屏幕,如

6中所示。在这个屏幕上,有修改编码方式、压缩算法的选项,甚至可以对媒

体应用视频过滤器。



6.影片设置总结

在图 7中,可以看到MovieConverter的视频设置窗口,在这个窗口中,

可以选择视频编码方式,而提供了转换后的视频预览。





序。传统视频转换成 QuickTime支持的其他视频格式。

结束语

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



Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务