QuickTime for Java API为iPod写软件
|
日期:2007年5月3日 作者: 查看:[大字体
中字体 小字体]
|
更多的请看:http://www.qqread.com/windows/2003/index.html关于代码
几乎每个 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. 添加了标题的房地产视频示例 转换成 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(); } }
}
上一篇:JDBC集群中间件Sequoia 2.5 发布
下一篇:Ruby程序设计语言快速入门之变量与赋值
|
| QuickTime for Java API为iPod写软件 相关文章: |
|
|
|
| QuickTime for Java API为iPod写软件 相关软件: |
|
|
|