QuickTime的流媒体API,在Java中由只可在Mac OS(Classic和OS X)中运行的包quicktime.streaming声明。在QTJ中存在Windows版本的类,但是它们却不能工作。
详细资料 // add shutdown handler to make sure presentation
// gets stopped
Thread presentationStopper = new Thread() {
public void run() {
try {
pres.stop();
} catch (QTException qte) {}
}
};
Runtime.getRuntime().addShutdownHook (presentationStopper);
这个关闭异常分支确定Presentation在程序退出之前被终止。 这是重要的原因, 象SequenceGrabber, Presentation愉快继续运行在您的应用程序退出之后,绑定一个端口,严重的循环, 使用您的获取设备保留其它应用程序, 等。
} catch ( QTException e ) {
e.printStackTrace();
System.exit (-1);
}
}
最后, 构造函数捕捉并抛出所有的QTExceptions。
public void actionPerformed (ActionEvent ae) {
System.out.println ("actionPerformed");
try {
if (ae.getSource() == startStopButton) {
if (broadcasting) {
pres.stop();
stopTasking();
broadcasting = false;
startStopButton.setLabel ("Start");
System.out.println ("Stopped");
} else {
pres.start();
startTasking();
broadcasting = true;
startStopButton.setLabel ("Stop");
System.out.println ("Started");
}
} else if (ae.getSource() == configButton) {
new SettingsDialog (pres);
}
} catch (QTException qte) {
qte.printStackTrace();
}
}
这是非常直接的处理起始/终止和设置按钮。如果点击的按钮是起始/终止, 设置GUI 就会调用在Presentation上的 start() 或stop(), 开始或停止正在执行的任务 (定期回调这个类的task()方法), 为下按钮点击目的设置broadcasting标志, 并且更改按钮标签。如果用户点击了配置, 它生成为Presentation新的SettingsDialog。
public synchronized final void task() throws QTException {
pres.idle(null);
}}
最后的这个方法实现了继承自Tasking的task()方法并且被在操作开始按钮调用startTasking()后定时的调用。使用简单的调用Presentation.idle(), 它提供了表达时间来从获取设备取得当前数据,对其编码并传输流出去。
运行流媒体客户端
最简单的使客户机看广播的方法是使用QuickTime 播放器打开服务器使用并创建Presentation的同样SDP 文件。这将调用SDP 输入程序连接到流媒体并且开始分析这些内容。注意客户机和服务器不能在同一台机器上, 明显地因为服务器为使用表示而占用端口, 拒绝客户机对这些端口的使用。 图4 显示在我的计算机上的流媒体的外观(那是正在播放我的Macross和Escaflowne玩具) 。
图4. QuickTime流媒体客户端 如果您使用QuickTime 播放器, 您能使用其得到信息指令显示两种流媒体以及他们的格式。 在表5, 您能看有二种媒体: 一条未压缩的44.1kHz 音频流, 和一条H.263 的视频流。
图5. 客户端信息窗体 结语 对我来说,播放基于Java的QuickTime流媒体比想象的容易多了。 最简单的例子, 从获取设备播放, 只需要少于150 个代码行。 显然, 最困难的部份是了解SDP文件, 它被证明是非常的过分讲究并且它的说明文件包含大量应用程序级别程序员不会有的知识。同样不幸的是,QTJ不再提供预览组件, 但也许在将来会提供, 以及一小段的GWorld/QuickDraw 堆砌也许会在将来制造出这样的组件。
本文只包括怎么为实时获取数据设置广播。其它可利用的Sourcers, 譬如来自磁盘或任意目录种的那些广播QuickTime 文件, 将会在以后的部分中讨论。