AIR 2.0 NativeProcess API –它对什么有所帮助呢?
来源:互联网 发布:python运行py文件 编辑:程序博客网 时间:2024/05/05 01:36
Adobe Flash Builder 4 简体中文正式版 Windows版点击下载:http://g.csdn.net/5134151
Adobe Flash Builder 4 简体中文正式版 Mac版点击下载:http://g.csdn.net/5134152
Adobe 在线课堂:http://adobev.csdn.net/zx/index.html
Adobe平台技术峰会课程视频:http://adobev.csdn.net/
虽然有几个范例可说明如何连接AIR程序和本地操作系统流程,大部分范例都还是基本的“Hello World”范例,或者正好是纯理论性的。我倒是有一两个真实的程序范例,以一种有意义的方式利用了这种功能。在本文中,我将讨论DropFolders程序,它利用AIR 2.0 NativeProcess APIs,从而使得采用HandBrake成为了一个成为流程化的便捷过程。
AIR 2.0NativeProcess
因此,在我们开始之前,先了解下,什么是NativeProcess? ActionScript 3.0 Referencefor the Adobe Flash Platform文件对此进行了很好的总结:
NativeProcess类提供命令行整合和通常的发送功能。NativeProcess类让AIR程序在主机操作系统上执行本地流程。AIR程序能监控流程的标准输入(stdin)和标准输出(stdout)流,及流程的标准错误(stderr)流。
基本上,这个新的API让你的程序能与主机上运行的几乎所有的流程通讯。这可以是一个操作系统核心流程或一个第三方安装的程序,如HandBrake。
需要考虑的事项
很酷,不是么?这提供了很多可能性,但是也对利用NativeProcess的程序的分布造成了一些限制。当处理本地代码时,AIR程序必须为特定目标平台进行编译。这就意味着,你不能仅仅就是编辑一个.air file,随后执行之。执行NativeProcess最简单的方式就是确定一个目标平台(Windows, Mac OSX, Linux),然后为该平台进行编译。在DropFolders例子中,我们与headless的Handbrake CLI(正好也穿过平台)建立交互界面。为了利用这个功能,当打包分配时,我们为每个平台版本都准备不同的一套文件。有了大量的AIR程序,这还意味着在你的代码里采取一些特定的步骤,以解释不同操作系统的文件路径语法的不同。
HandBrakeCLI
对于从来没有使用过HandBrake的用户来说,这是一个很出色的视频转码工具,用户可以用来将各类文件格式转换成高清晰度的H.264(通过使用从GUI版本可配置的多元设置或通过命令行界面作为自变量)。在丹佛大学,我们使用HandBrake处理CourseMedia程序使用的视频,或通过我们的Flash Media Server实例的流的视频。然而,HandBrake GUI不接受用于视频转码流程自动化的可配置“watch”和“destination”文件夹的概念。
使用Dropfolders拓展HandBrake
有时候,懒惰反倒会引发创新。通常,我们可以用HandBrake帮助别人,也可以快速设定一些定制化的设置。但是在一个特别案例里,我们遇到了一批用户,他们要求完全不予操作转码流程。那怎么办呢?在本例中,他们就是要直接从视频设备中提取一些文件,放入到网络共享。我们构建DropFolders,以在桌面和服务器环境内都启动该工作流。在服务器上设置稍微复杂些(这里我就不深入讨论了),但是两个环境中启动的思路是一样的。当新的文件被监测到时,定义一个不断被程序监控的监视文件(watch folder)-根据特定的预设进行处理,将派生文件放入目录内,在这里一个单独的显示程序会找到它们。
代码范例
这里有一个来自DropFolders的ActionScript范例,设置了与HandBrake的连接,并且构建了一些通讯关口。大部分是基于程序的TranscodeController类。
你会需要导入以下类:
import flash.filesystem.File;
import flash.desktop.NativeProcess;
import flash.desktop.NativeProcessStartupInfo;
import flash.events.NativeProcessExitEvent;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
import mx.controls.Alert;
宣布一些变量,基于OS设置环境:
private var nativeProcess:NativeProcess;
private var nativeProcessStartupInfo:NativeProcessStartupInfo;
private var hb:File;
private var hbCLI:String;
private var pathDivider:String;
private var os:String;
private function setupController() {
os = Capabilities.os.substr(0, 3).toLowerCase();
if(NativeProcess.isSupported){
if(os == "win"){
pathDivider= "//";
hbCLI= "HandBrake.exe"
}else{
pathDivider= "/";
hbCLI= "HandBrake.dmg"
}
establishConnection();
}else{
Alert.show("Not Good.");
}
}
现在,设置NativeProcess 关联:
private function establishConnection():void {
hb= File.applicationDirectory;
hb= hb.resolvePath("HandBrake" + pathDivider + hbCLI);
nativeProcess= new NativeProcess();
nativeProcessStartupInfo= new NativeProcessStartupInfo();
}
现在,我们需要做的就是,指向HandBrake,在Vector对象范围内设置我们的自变量,添加一些事件监听器,启动NativeProcess:
public function invokeHandBrake(i:String, o:String, a:String):void {
nativeProcessStartupInfo.executable = hb;
var processArgs:Vector.<String> = new Vector.<String>();
processArgs.push("-i");
processArgs.push(i);
processArgs.push("-o");
processArgs.push(o);
var argArray:Array = a.split(" ");
for(var j:int = 0; j<argArray.length-1; j++){
processArgs.push(argArray[j]);
}
nativeProcessStartupInfo.arguments = processArgs;
nativeProcess.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA,onStandardOutputData);
nativeProcess.addEventListener(ProgressEvent.STANDARD_ERROR_DATA,onStandardErrorData);
nativeProcess.addEventListener(NativeProcessExitEvent.EXIT, onExit);
nativeProcess.addEventListener(IOErrorEvent.STANDARD_OUTPUT_IO_ERROR,onOutputIOError);
nativeProcess.addEventListener(IOErrorEvent.STANDARD_ERROR_IO_ERROR,onStandardIOError);
nativeProcess.start(nativeProcessStartupInfo);
}
在DropFolders中,几个关于自变量的标注:”I”是输入文件,”d”是通过转码过程创建的文件,而”a”是HandBrake期待的一串自变量,以执行适当的转码。通常,其格式类似于“-e x264-b 1500 -a 1 -E faac -B 160 -R Auto -6 dpl2 -f mp4 -p -m -2 -T -xref=2:bframes=2:me=umh”。临时使用的数列仅用来隔离每个自变量,这样可传递到构建的Vector对象中,然后功过我们的NativeProcess传递。
结论
AIR 2.0是AIR 1.5的升级版,添加了NativeProcess,从而提供了更多的可能性。 在没有AIR 2.0之前,想想要执行这个任务,需要多少跨操作系统的工作。Flash Platform的一个优势就是,它可以让有能力的开发人员有效地跨平台,跨设备工作。这些添加到本地操作系统流程的新内容将之提升到了一个全新的高度。
有兴趣看看使用中的DropFolders吗?我录制了一个视频,详细说明了从安装,到配置预设及处理文件等过程。
我将讨论DropFolders和Adobe MAX 2010上关于AIR的其它使用。如果你想了解根多,请查阅我的文章。
本文译自:http://insideria.com/2010/06/air-20-nativeprocess-api---wha.html
- AIR 2.0 NativeProcess API –它对什么有所帮助呢?
- AIR NativeProcess 调用bat
- 关于RDLC报表的一些总结,希望对正在学习使用它的朋友有所帮助
- Using the Adobe AIR 2 NativeProcess API to create a screen recorder
- AIR 迷你教程 — 在AIR 2.0 程序中嵌入TOMCAT(NativeProcess 实例)
- Servlet总结,希望对初学者有所帮助
- 希望对大家的学习有所帮助
- 本人对数据结构的理解,希望对大家有所帮助
- 程序员到底为了什么钻研技术? 希望会有所帮助
- 怎么发现DLL后门,希望对大家有所帮助。
- 希望这篇文章对理解C#的对象模型有所帮助
- 多年积累的一些工具希望对大家有所帮助
- 刚开通博客,希望对自己有所帮助吧
- Ivy管理项目,希望对大家有所帮助
- 你说它有什么功能呢
- 什么是WeakReference呢?它有什么特点呢?
- 对call堆栈平衡的一点心得,希望对新手有所帮助
- 如果你大学什么都没学,请点击进入会有所帮助。
- C语言考试试题2
- 线程相关
- MFC获取系统当前时间
- K-空间 在图像变换及重建 K-空间与MR图像质量控制
- JavaScript 文件保存不了汉字
- AIR 2.0 NativeProcess API –它对什么有所帮助呢?
- 系统缓存全解析3:页面局部缓存
- 随鼠标上下滚动的广告条
- 系统缓存全解析4:应用程序数据缓存
- jquery flexigrid 增加行双击事件
- php类继承的使用
- “猪贱伤农”和“吃不起肉”
- 系统缓存全解析5:文件缓存依赖
- uri基础