site topic网站专题
首页
>
网站专题
>
专题详情
分享新闻到:

Apple QuickTime iMovie

互诺科技:2009-11-27 00:19     阅读数:       标签:

概述  QuickTime是苹果公司提供的系统及代码的压缩包,它拥有C和Pascal的编程界面,更高级的软件可以用它来控制时基信号。在QuickTime中 时基信号被叫做影片。应用程序可以用QuickTime 来生成,显示,编辑,拷贝,压缩影片和影片数据,就象通常操纵文本文件和静止图像那样。除了处理视频数据以外,QuickTime3.0还能处理静止图像,动画图像,矢量图,多音轨,MIDI音乐,三维立体,虚拟现实全景和虚拟现实的物体,当然还包括文本。它可以使任何应用程序中都充满各种各样的媒体。
 

 

  QuickTime是建立在一些与时基数据相关的概念基础之上的:原子(Atom)、媒体结构(Media structures)、组件(Component)、时间管理(Time management)、动画图像(Sprites)。
 

 

  QuickTime是一个跨平台的多媒体架构,可以运行在Mac OS和Windows系统上。它的构成元素包括一系列多媒体操作系统扩展(在Windows系统上实现为DLL),一套易于理解的API,一种文件格式,以及一套诸如QuickTime播放器,QuickTime ActiveX控件,以及QuickTime 浏览器插件这样的应用程序。
 

 

  QuickTime不仅仅是一个媒体播放器,而是一个完整的多媒体架构,可以用来进行多种媒体的创建,生产,和分发,并为这一过程提供端到端的支持:包括媒体的实时捕捉,以编程的方式合成媒体,导入和导出现有的媒体,还有编辑和制作,压缩,分发,以及用户回放等多个环节。
 

 

  QuickTime可以用于实现如下一些具体的任务:
 

 

  播放电影和其它媒体,比如Flash或者MP3音频
 

 

  对电影和其它媒体进行非破坏性的编辑。
 

 

  在不同格式的图像之间进行导入和导出,比如JPEG和PNG
 

 

  对来自不同数据源的多个媒体元素进行合成,分层,和排列
 

 

  把多个依赖于时间的媒体同步到单一的时间线上
 

 

  捕捉和存储来自实时源的数据序列(sequence),比如音频和视频输入
 

 

  以编程的方式将制作完成的数据作成电影
 

 

  使用智能化和脚本化的动画制作精灵
 

 

  创建与阅读器,远程数据库,和应用程序服务器相互交互的演示
 

 

  创建包含定制形状的窗口,“皮肤”,以及各种控件的电影
 

 

  在网络或者英特网上实时生成电影流
 

 

  广播从诸如照相机和麦克风这样的直播源得到的实时流
 

 

  分发位于磁盘,网络,或者英特网上的可下载媒体
 

 

  ① 原子
 

 

  QuickTime的原子是QuickTime用来构建等级数据结构的基本容器。新创建的QuickTime原子就象树的根。随后的每个原子都包含在其中并且包含数据和其它原子。如果一个QuickTime原子包含其它原子,就被叫做父原子,包含在其中的原子就叫做叶原子。应用程序和其它各种软件也可以用QuickTime原子结构来存储数据。
 

 

  ② 媒体结构
 

 

  传统的视频由连续的数据流组成。QuickTime影片可以按同样的方法构建,但它不需要这样做:QuickTime影片可以由取自不同来源的数据流组成,例如模拟视频、存在CDROM上的静止图像和MIDI音乐。影片不是媒体,而是媒体的组织方式。
 

 

  QuickTime影片通常是由许多轨道组成的。轨道不包含影片数据,它仅仅包含这些数据的索引,而真正的数据内容则存在于其它地方。这些数据索引组成了轨道的媒体结构。每个轨道都包含了一个独立的媒体结构和一个编辑列表,编辑列表用来以时间顺序安排媒体结构。媒体结构和编辑列表是做为QuickTime原子来实现的。
 

 

  ③ 组件
 

 

  QuickTime支持组件使应用程序不需要知道QuickTime用什么技术和设备来工作的。许多QuickTime服务,例如压缩和解压都是组件来提供的。组件包括代码,它可以在整个系统中使用,也可以局部于一个特定的应用程序。每个QuickTime组件都实现一个特定的功能集并且提供给它支持的技术和客户应用程序以特定的接口。因此应用程序和不同技术的实现和管理细节隔离开来。应用已存在的组件可以创建新的组件。例如,你能生成一个组件来支持一种特殊的数据加密算法。其它的应用程序通过连接你的组件也可以实现这些加密算法,而不用它们自己再来实现这个加密算法。
 

 

  应用程序使用组件是通过调用系统级的组件管理器。组件管理器使你可以定义和登记组件并可以通过使用一个标准的界面来和组件进行联系。一旦应用程序连接到组件上之后,就可以直接调用组件。当你生成了一种新的组件类的时候,你可以为这种新组件定义一种函数级接口。
 

 

  ④ 时间管理

 

  
 

 

  时间管理是QuickTime影片实现过程中重要的一部分,有时也是比较复杂的一部分。为了控制影片的时间维,QuickTime定义了时间坐标系统,使影片和媒体的数据结构都使用共同的现实时间系统。时间坐标系统包括一个时间尺度,这个尺度提供了在真实时间和影片中的表面时间的转换。时间尺度以时间单位表示。每秒中度过的时间单位的数量量化了时间尺度。也就是26时间尺度是每秒中包含26个时间单位或者每个时间单位是1/26秒。时间坐标系统也包括持续时间,它是影片的长度或以时间单位来记数的媒体结构的容量。影片中的某点可以由到那一点经过的时间单位的数量来确定。影片中的每个轨道都由时间偏移和持续的时间组成,这些属性决定了每道开始的时间和长度。每个媒体结构都有自己的时间尺度。影片工具箱把每种媒体数据从影片的时间坐标系统中映射到媒体结构的时间坐标系统。
 

 

  ⑤ 动画图像
 

 

  在传统的视频动画中,你通过确定每个象素的颜色来描述帧。而动画图像通过确定出现在不同位置的图像来描述帧。每个动画图像都有属性,这些属性用来描述某个时刻图像的位置和外表。在动画过程中,应用程序修改图像的属性以使它可以改变外表并且可以围绕屏幕移动。动画图像可以和静止图像混合,用来在内存相对较少时产生较多的效果。

 

 

QuickTime的结构

  QuickTime包括影片工具箱、图像压缩两个管理器,加上内嵌的一套组件。
 

 

  ① 影片工具箱

 

  
 

 

  应用软件通过调用在影片工具箱中的函数来实现QuickTime的功能。影片工具箱使应用程序可以储存、读取、操纵QuickTime影片中的时基数据。单独一段影片可以容纳好几种数据。例如,一段包含视频信息的影片可以包括视频数据和伴随视频数据的音频数据。
 

 

  影片工具箱也提供了编辑影片的函数。例如,有这样的函数,可以通过移去部分视频和音轨来缩短影片,也有函数通过从其它影片中移入新数据来扩展它。
 

 

  ② 图像压缩管理器
 

 

  图像数据需要大量的存储空间。存储640*480的32位色彩的图像需要的空间为1.2兆比特。QuickTime影片中包含的一系列图像,需要许多倍这样的空间。图像压缩管理器提供了独立于设备和驱动器的压缩和解压的方法,它也为实现外部的软硬件图像压缩算法提供了一个简单的接口。它提供了系统集成函数用来存储压缩图像,作为Macintosh机上的PICT文件和Windows下的DIB文件。它也提供了使任何可以运行QuickTime的机器上的压缩PICT文件都可以自解压的功能。
 

 

  大多数情形下,通过调用影片工具箱函数或显示压缩图像来避开直接调用图像压缩管理器。但是如果应用程序压缩图像或者用压缩图像制作影片,就可以直接调用图像压缩管理器函数。
 

 

  ③ QuickTime组件
 

 

  苹果提供了许多QuickTime内嵌组件。苹果定义的内嵌组件类型包括图像压缩器、媒体处理器和各种各样的工具。
 

 

  (1)数据处理器:包括有影片控制器组件、图像压缩组件、图像转换组件、视频数字化组件、数据交换组件、声音处理组件、效果转换组件、预览组件等。
 

 

  (2)媒体处理器:包括有衍生媒体处理器组件、动画媒体处理器组件、中间媒体处理器组件等。
 

 

  (3)工具:包括有时钟组件、标准声音组件、顺序抓取组件、顺序抓取通道组件、文本轨道组件、顺序抓取面板组件等

 

 

QuickTime架构

  QuickTime架构中广泛使用了构件技术,它使构件可以独立为一个模块,并具有灵活性和可扩展性。QuickTime构件是接口定义良好的共享代码资源。人们为QuickTime增加一个新的构件,并使已有的应用程序可以自动找到和使用该构件,这很大程度上是因为这个新构件和同属一个大类的已有构件一样,都对同样的API进行响应。
 

 

  举例来说,QuickTime可以处理很多媒体类型:声音,视频,文本,精灵,Flash,3D模型,图片虚拟现实,还有一些其它类型。每种媒体类型的处理,都需要一个媒体处理器构件来支持。QuickTime支持的媒体数量和类型都是不断增长的,您自己可以通过创建一个新的媒体处理器构件,来为QuickTime增加一个新的媒体类型。

 

 

QuickTime流媒体、广播和渐进式下载

  QuickTime电影通常以QuickTime电影文件的形式存储在磁盘上。这些文件往往同时包含电影引用的样本数据。QuickTime API中包含一些函数,用来将电影或者电影及其相关联的样本数据存储到文件中。缺省情况下,电影数据结构存储在文件的开头(以一个'moov'原子的形式进行存储),紧跟的是样本数据(通常包装在一个'mdat'原子中)。各种样本数据在缺省情况下会按照某种形式进行编织,以便使同一时刻显示的媒体数据的存储地点彼此靠近,同时,播放时间比较早的媒体首先被存储。
 

 

  这种典型的电影文件可以通过web服务器,或者使用诸如HTTP和FTP这种常见的协议来分发,等同于一个HTML文件或者JPEG图像文件。只需要把文件正确地命名,并正确地将文件扩展名和服务器上对应的MIME类型关联起来,就可以了(QuickTime电影文件正确的扩展名是.mov,其对应的MIME类型是'video/quicktime')。
 

 

  在通过网络分发,或者通过英特网下载一个文件的时候,整个文件并不是马上就到达本地,但是一个典型的QuickTime电影在下载的同时就可以播放。这个技术叫做渐进式下载(Progressive Download),或者快速开始(Fast Start)。这是由于电影原子被存储在文件的起始部分,所以即使电影的样本数据还没有到达本地,QuickTime也知道如何对之进行解析;同时也因为QuickTime根据显示的时间顺序对电影数据进行智能的编织。
 

 

  在创建电影时,先存储电影的样本数据,紧接着再存储电影数据结构也是可以的。但是通常都不希望使用这种做法,因为这样会使QuickTime一直等到整个文件都下载完成后,才能对样本数据进行解析。您可以简单地在QuickTime中打开电影文件,并将它存储为一个新的自包含文件,来修正这种数据顺序颠倒的问题。在缺省情况下,QuickTime将电影数据结构存储在文件的起始部分。
 

 

  QuickTime电影文件可能只包含一个电影数据结构,而该结构指向的样本数据位于其它文件或者URL中。在大多数情况下,这种类型的电影文件也可以在电影数据下载的同时进行播放,这是因为电影数据结构使QuickTime可以解析即将到来的数据,也因为每个轨道的数据源都被独立指定,网络独立而又同时地进行所有轨道媒体数据的分发,从而实现某种形式的编织。很明显,在可靠性上这种编织不如QuickTime创建自包含电影文件时进行的深入编织,因此播放的时候可能不总是那么平滑。
 

 

  当连接的带宽满足或者超过电影数据率的要求时,一个组织良好的QuickTime电影文件就可以边下载边播放。这种类型的渐进式下载电影,或者说是快速开始电影,就可以提供与实时流媒体一样的用户体验。
 

 

  如果连接的速度不足以实时播放电影,则您可以等下载完成后才进行播放,或者播放当时已经下载的部分。QuickTime甚至可以估计需要的下载时间,并在它认为已经有足够的数据可以平滑播放的时候开始播放(因为剩下的数据可以在需要的时候到来)。
 

 

  QuickTime电影也可以通过诸如RTP和RTSP这种实时协议来分发。那样的话需要一个流媒体服务器,比如QuickTime流媒体服务器,或者Darwin流媒体服务器。为了实时生成电影流,服务器需要知道如何对电影中的各个轨道进行分包,这些信息存放在QuickTime电影中的一个称为索引轨道(hint track) 的特殊轨道中。在QuickTime API中有一些函数,可以在现有的电影中增加一个索引轨道,还有一个标识可以通知QuickTime在将电影存入磁盘的时候创建一个索引轨道。
 

 

  带有索引轨道的电影也可以通过HTTP或者FTP协议来进行渐进式下载,但是需要额外的带宽来下载仅对流媒体起作用的索引轨道。因此,最好首先确定电影的分发方式,然后再确定是将电影存储为索引电影,还是非索引电影。
 

 

  对于电影文件,除了渐进式下载和实时流媒体这两种分发方式,QuickTime还支持直播(broadcasting)方式,即从诸如照相机或麦克风这样的实时源中取得数据,创建一个或者多个实时流。这个过程包括捕捉来自实时源的数据,将这些数据按照期望的带宽进行压缩,并生向外传输的数据包流,所有的这些过程都是实时的。QuickTime的广播API只支持Mac OS,不能支持Windows或者Java。

 

 

QuickTime路线图

  QuickTime是一套大的API,有超过2000个函数及数十个构件。幸运的是,您通常只需要使用一小部分QuickTime API就可以完成一个具体的任务。问题在于如何才能知道应该使用QuickTime的哪个部分,以及如何才能找到可以指导自己的文档和例子代码。这正是讨论这个路线图的目的所在。
 

 

  QuickTime通常会有多种方法可以实现同样的目的,一种是容易实现的方法,大多数工作QuickTime都替您完成了;另外一种则是提供一些不同层次的底层工具箱,您可以通过这些工具箱来自行实现想要的功能。如果您发现自己已经陷入到某些复杂且令人沮丧的问题中,而这些问题应该很简单,则很可能是因为您现在使用的是不合适的工具箱。这时,请回到路线图上来,看看是否有更为高级的方法可供使用。
 

 

  QuickTime API文档分成17个主要部分,下面列举这些部分及其相关连接。
 

 

  "开始使用QuickTime"—获取进入QuickTime的方向,寻找sdk及推荐读物。
 

 

  "基础"— QuickTime概述,快速上手的教程,构件管理器,如何初始化QuickTime,以及如何打开和播放电影。
 

 

  "Windows版本的QuickTime"—Windows版本与Macintosh版本的QuickTimes之间的不同之处。
 

 

  "使用脚本"—用诸如JavaScript,Visual Basic,AppleScript,HTML,以及SMIL等高级的脚本语言控制苹果的QuickTime应用程序(包括播放器,浏览器插件,及ActiveX控件)。
 

 

  "电影结构的基本知识"—初始化QuickTime,打开和播放电影,编辑和保存电影,使用QuickTime的数据类型,为应用程序设置回调函数。
 

 

  "流媒体"—使用基于实时协议的流媒体,进行现场直播,或者为流媒体服务器书写模块。
 

 

  "深入电影结构的内部"—在轨道,属性和构件级别上使用电影结构;设置时间单位和层;对可视轨道进行旋转,歪斜,缩放,和变形;使用时钟控件,轨道引用和修饰轨道,预览及媒介访问键。
 

 

  "电影的创建"—捕捉和同步数据,以及创建你自己的电影;使用序列抓取构件(sequence grabber),特定媒介的序列抓取通道构件(比如文本),以及视频数字化器构件(video digitizers)。
 

 

  "QuickTime的导入和导出"—将数十种其它格式的现有媒介导入到QuickTime中,将电影,轨道,或者图像导出为各种不同的非QuickTime格式及文件类型。
 

 

  "压缩和解压"—直接设置和使用图像和声音的压缩器和解压器,数据编解码器,以及图像编码转换器。
 

 

  "视频效果和过渡"—使用QuickTime过滤器,远离和淡入淡出过渡,以及其它效果。
 

 

  "媒介类型和媒介处理器"—直接使用视频,声音,文本,时间码,还有更多其它的媒介处理器,包括tween构件。
 

 

  "连线电影和动画"—以可编程的方式展示动画,在电影中增加交互控件和关联动作,制作可以和远程服务器交互的电影。
 

 

  "虚拟现实"—使用QuickTime VR全景和立方体(cube),设置热点(hotspot),控制光标,增加交互功能。
 

 

  "音乐和音频"—从底层处理音频,或者使用QuickTime音乐架构来合成音乐。
 

 

  "传输和分发"—使用数据处理器构件和视频输出构件来从特殊的数据源(比如数据库)上获取电影和媒介数据,或者将视频发送到屏幕之外的输出设备中。
 

 

  "书写构件"—通过书写自己的构件来处理新的媒介类型,压缩方法,数据源,输出设备,时钟源,以及更多其它对象,从而对QuickTime进行扩展。