QuickTime
蘋果公司開發的媒體播放器
QuickTime 是一款擁有強大的多媒體技術的內置媒體播放器,可讓你以各式各樣的文件格式觀看網際網路視頻、高清電影預告片和個人媒體作品,更可讓你以非比尋常的高品質欣賞這些內容。
QuickTime不僅僅是一個媒體播放器,而且是一個完整的多媒體架構,可以用來進行多種媒體的創建、生產和分發,並為這一過程提供端到端的支持:包括媒體的實時捕捉,以編程的方式合成媒體,導入和導出現有的媒體,還有編輯和製作、壓縮、分發,以及用戶回放等多個環節。
QuickTime包括影片工具箱、圖像壓縮兩個管理器,加上內嵌的一套組件。
影片工具箱
應用軟體通過調用在影片工具箱中的函數來實現QuickTime的功能。影片工具箱使應用程序可以儲存、讀取、操縱QuickTime影片中的時基數據。單獨一段影片可以容納好幾種數據。例如,一段包含視頻信息的影片可以包括視頻數據和伴隨視頻數據的音頻數據。
影片工具箱也提供了編輯影片的函數。例如,有這樣的函數,可以通過移去部分視頻和音軌來縮短影片,也有函數通過從其它影片中移入新數據來擴展它。
圖像壓縮管理器
圖像數據需要大量的存儲空間。存儲640*480的32位色彩的圖像需要的空間為1.2兆比特。QuickTime影片中包含的一系列圖像,需要許多倍這樣的空間。圖像壓縮管理器提供了獨立於設備和驅動器的壓縮和解壓的方法,它也為實現外部的軟硬體圖像壓縮演演算法提供了一個簡單的介面。它提供了系統集成函數用來存儲壓縮圖像,作為Macintosh機上的PICT文件和Windows下的DIB文件。它也提供了使任何可以運行QuickTime的機器上的壓縮PICT文件都可以自解壓的功能。
大多數情形下,通過調用影片工具箱函數或顯示壓縮圖像來避開直接調用圖像壓縮管理器。但是如果應用程序壓縮圖像或者用壓縮圖像製作影片,就可以直接調用圖像壓縮管理器函數。
QuickTime組件
蘋果提供了許多QuickTime內嵌組件。蘋果定義的內嵌組件類型包括圖像壓縮器、媒體處理器和各種各樣的工具。
(1) 數據處理器:包括有影片控制器組件、圖像壓縮組件、圖像轉換組件、視頻數字化組件、數據交換組件、聲音處理組件、效果轉換組件、預覽組件等。
(2) 媒體處理器:包括有衍生媒體處理器組件、動畫媒體處理器組件、中間媒體處理器組件等。
(3) 工具:包括有時鐘組件、標準聲音組件、順序抓取組件、順序抓取通道組件、文本軌道組件、順序抓取面板組件等
1998年2月11日,國際標準組織(ISO)認可QuickTime檔案格式作為MPEG-4標準的基礎。這個行動的支持者表示QuickTime提供一個好的"生命周期"格式,很適合做擷取、編輯、檔案、散布、和播放(相對於簡單以檔案為串流資料方式的MPEG-1和MPEG-2而言,不適合作編輯之用)。在2002年開發者增加了MPEG-4的相容性到QuickTime6。然而,蘋果電腦延遲這個版本的推出達到數個月之久,是因為MPEG-4授權本身的爭議,要求提出的授權金會限制很多使用者和內容的提供者。在妥協之後,蘋果電腦於2002年7月15日推出QuickTime6。
QuickTime logo演變
它是一個多媒體平台
無論是來自你的數碼相機或行動電話的視頻,Mac 或 PC 上的影片,還是網站上的媒體片段,不論你想看什麼、想在哪裡看,QuickTime 技術都能為你實現。
它是一個先進的媒體播放器
QuickTime Player 擁有簡潔的設計和易用的控制選項,呈現的一切為你帶來更多愉悅享受。其界面乾淨利落,絕不會妨礙你觀看畫面。想要快進播放影片或慢速播放?通過一個便捷的滑塊,你可以將播放速度設置為標準速度的 1/2 倍速到 3 倍速。你還可以快速搜遍單獨的一段視頻幀。
它擁有先進的視頻技術
QuickTime 擁有稱為 H.264 的先進視頻壓縮技術,以更少的帶寬和存儲空間呈現絢麗、清晰的高清視頻畫面。這樣,無論你在何處觀看視頻,都能感受到原生視頻品質。
它具備靈活的文件格式
QuickTime 可讓你用數字媒體實現更多。有了 QuickTime 7 Pro,你可以將你的文件轉換為多種格式,還可錄製並剪輯你的作品。第三方插件可以多方向擴展 QuickTime 技術。QuickTime 流媒體解決方案讓你可以流傳輸方式在網際網路上傳播你的媒體內容。
跨平台特性
QuickTime是一個跨平台的多媒體架構,可以運行在Mac OS和Windows系統上。它的構成元素包括一系列多媒體操作系統擴展(在Windows系統上實現為DLL),一套易於理解的API,一種文件格式,以及一套諸如QuickTime播放器,QuickTime ActiveX控制項,以及QuickTime 瀏覽器插件這樣的應用程序。
可實現的任務
QuickTime播放器
QuickTime架構
QuickTime架構中廣泛使用了構件技術,它使構件可以獨立為一個模塊,並具有靈活性和可擴展性。QuickTime構件是介面定義良好的共享代碼資源。人們為QuickTime增加一個新的構件,並使已有的應用程序可以自動找到和使用該構件,這很大程度上是因為這個新構件和同屬一個大類的已有構件一樣,都對同樣的API進行響應。
舉例來說,QuickTime可以處理很多媒體類型:聲音,視頻,文本,精靈,Flash,3D模型,圖片虛擬現實,還有一些其它類型。每種媒體類型的處理,都需要一個媒體處理器構件來支持。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是一套大的API,有超過2000個函數及數十個構件。幸運的是,您通常只需要使用一小部分QuickTime API就可以完成一個具體的任務。問題在於如何才能知道應該使用QuickTime的哪個部分,以及如何才能找到可以指導自己的文檔和例子代碼。這正是討論這個路線圖的目的所在。
QuickTime通常會有多種方法可以實現同樣的目的,一種是容易實現的方法,大多數工作QuickTime都替您完成了;另外一種則是提供一些不同層次的底層工具箱,您可以通過這些工具箱來自行實現想要的功能。如果您發現自己已經陷入到某些複雜且令人沮喪的問題中,而這些問題應該很簡單,則很可能是因為您使用的是不合適的工具箱。這時,請回到路線圖上來,看看是否有更為高級的方法可供使用。
QuickTime API文檔分成17個主要部分,下面列舉這些部分及其相關連接。
"開始使用QuickTime"—獲取進入QuickTime的方向,尋找sdk及推薦讀物。
"基礎"— QuickTime概述,快速上手的教程,構件管理器,如何初始化QuickTime,以及如何打開和播放電影。
QuickTime升級過程
"使用腳本"—用諸如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進行擴展。
QuickTime是建立在一些與時基數據相關的概念基礎之上的:原子(Atom)、媒體結構(Media structures)、組件(Component)、時間管理(Time management)、動畫圖像(Sprites)。
QuickTime的原子是QuickTime用來構建等級數據結構的基本容器。新創建的QuickTime原子就象樹的根。隨後的每個原子都包含在其中並且包含數據和其它原子。如果一個QuickTime原子包含其它原子,就被叫做父原子,包含在其中的原子就叫做葉原子。應用程序和其它各種軟體也可以用QuickTime原子結構來存儲數據。
傳統的視頻由連續的數據流組成。QuickTime影片可以按同樣的方法構建,但它不需要這樣做:QuickTime影片可以由取自不同來源的數據流組成,例如模擬視頻、存在CDROM上的靜止圖像和MIDI音樂。影片不是媒體,而是媒體的組織方式。
QuickTime影片通常是由許多軌道組成的。軌道不包含影片數據,它僅僅包含這些數據的索引,而真正的數據內容則存在於其它地方。這些數據索引組成了軌道的媒體結構。每個軌道都包含了一個獨立的媒體結構和一個編輯列表,編輯列表用來以時間順序安排媒體結構。媒體結構和編輯列表是做為QuickTime原子來實現的。
QuickTime支持組件使應用程序不需要知道QuickTime用什麼技術和設備來工作的。許多QuickTime服務,例如壓縮和解壓都是組件來提供的。組件包括代碼,它可以在整個系統中使用,也可以局部於一個特定的應用程序。每個QuickTime組件都實現一個特定的功能集並且提供給它支持的技術和客戶應用程序以特定的介面。因此應用程序和不同技術的實現和管理細節隔離開來。應用已存在的組件可以創建新的組件。例如,你能生成一個組件來支持一種特殊的數據加密演演算法。其它的應用程序通過連接你的組件也可以實現這些加密演演算法,而不用它們自己再來實現這個加密演演算法。
應用程序使用組件是通過調用系統級的組件管理器。組件管理器使你可以定義和登記組件並可以通過使用一個標準的界面來和組件進行聯繫。一旦應用程序連接到組件上之後,就可以直接調用組件。當你生成了一種新的組件類的時候,你可以為這種新組件定義一種函數級介面。
時間管理是QuickTime影片實現過程中重要的一部分,有時也是比較複雜的一部分。為了控制影片的時間維,QuickTime定義了時間坐標系統,使影片和媒體的數據結構都使用共同的現實時間系統。時間坐標系統包括一個時間尺度,這個尺度提供了在真實時間和影片中的表面時間的轉換。時間尺度以時間單位表示。每秒中度過的時間單位的數量量化了時間尺度。也就是26時間尺度是每秒中包含26個時間單位或者每個時間單位是1/26秒。時間坐標系統也包括持續時間,它是影片的長度或以時間單位來記數的媒體結構的容量。影片中的某點可以由到那一點經過的時間單位的數量來確定。影片中的每個軌道都由時間偏移和持續的時間組成,這些屬性決定了每道開始的時間和長度。每個媒體結構都有自己的時間尺度。影片工具箱把每種媒體數據從影片的時間坐標系統中映射到媒體結構的時間坐標系統。
在傳統的視頻動畫中,你通過確定每個象素的顏色來描述幀。而動畫圖像通過確定出現在不同位置的圖像來描述幀。每個動畫圖像都有屬性,這些屬性用來描述某個時刻圖像的位置和外表。在動畫過程中,應用程序修改圖像的屬性以使它可以改變外表並且可以圍繞屏幕移動。動畫圖像可以和靜止圖像混合,用來在內存相對較少時產生較多的效果。