跳到主要內容

Grinder OS X: My very first Cocoa App


Grider又更新了!現在,我們將OS X專用的Grider以Objective-C全面改寫,獲得了更佳的效能與,以及Mac原生的界面體驗。

用Processing內建的video函式庫來為影片打上格子,很容易寫,程式碼也很簡潔,但是它的效能實在不怎麼樣。光是單純的播放影片,就已經耗掉我電腦CPU一半的資源,加上其他的東西只會讓它更慢。可是使用Mac內建的QuickTime X播放同一個影片,佔用的CPU資源卻只有一點點。顯然,使用Mac提供的影音播放方式是個比較好的選擇 。

拿最後的成果來做個簡單的比較,下圖中PID 2410的Grider(上面的)是用Processing寫的,下方PID 2554的則是Xcode產生的,兩個Grider播放的是同樣的320x240影片。看得出來,在Mac的環境下,使用Xcode裡頭的函式庫無論是在CPU使用,或是記憶體的消耗上,都是個比較經濟的選擇。


就這樣,開始了Grider OS X的摸索。這一切的起點,來自於官網上一篇Creating a Simple QTKit Media Player Application,確實提供了一些Xcode的基本操作。但是,自從OS X 10.7之後,Apple引入AVFoundation這個Framework,並且慢慢將QTKit上的一些功能取消,很多網上找到的片段根本就無法執行。萬不得已之下,只能把核心轉換成AVFoundation,並且下載AVSimplePlayer這個sample code作為起始點。

AVSimplePlayer只有程式碼範例,沒有一步一步的建立說明。為了要看懂它究竟是如何運作,不得不去讀AV Foundation Programming Guide的內容,特別是Playback這個小節。


原來AVPlayer只是個controller,要取得影片資料,得進到AVPlayerItem,或直接從AVAsset裡頭讀取;要顯示畫面,則得要運用AVPlayerLayer。

我遇到的一個問題就是影片大小的獲取。舊的API可以直接從AVAsset中,直接讀naturalSize這個屬性。可它在OS X v10.8裡面被取消了。現在則要進入到AVAssetTrack當中,才能讀到naturalSize。解決這個問題之後,另一個難題則是Layer。

用過Photoshop的人大概都有圖層的概念,這裡的Layer作用也是一樣的。不同的是,我得要去讀Core Animation Programming Guide,才有辦法理解並且控制這邊Layer。我覺得,需要特別注意一下它的坐標系統,是從左下角開始算起的,和其他程式以左上角作為起點不同。


由於Layer可以堆疊,所以在影片上畫格子,加上滑鼠指標的追蹤點,或是在畫面上顯示訊息,都可以運用Layer來完成。需要的時候顯示,不用的時候隱藏,不需每次顯示影片畫格都要重新運算畫面。這個工作,Core Animation已經幫你做了。對了,要操作這些Layer的變化,需要導入QuartzCore這個Framework。

這些問題處理完之後,剩下的多半是使用者界面的問題。這個部分我也還不太熟悉,等到比較熟悉之後再寫。就這樣,Grider OS X差不多好了。


和Processing比較起來,Xcode裡面的程式碼多了很多,需要花費更多的開發時間。但是,如果要處理大量的影片,用Apple提供的工具應該還是個比較穩妥的做法。

PS. 在此之前,我對Objective-C這個語言是全然陌生的,所有的知識僅限youtube上的Xcode教學影片,還有一些網誌資料。直到現在,還有一些用法我都還搞不清楚。總之,見招拆招。

留言

熱門文章

差不多食譜:萬聖節的蛋白霜幽靈們 Halloween Meringue Ghosts

說到十月,月底的萬聖節肯定是驚嚇指數最高的一天,到處飄忽的幽靈們更是西洋鬼節的主角。不甘心這天總是被 Trick-or-Treat(不給糖就搗蛋)威脅,差不多食譜今年要開始來反擊,邀請大家來當 Ghostbusters 魔鬼剋星,將這群調皮搗蛋的幽靈們一網打盡。 抓鬼的先決條件就是⋯⋯得有些幽靈鬼怪來抓。這可是練習擠花的好時機,因為幽靈本來就是奇形怪狀的,什麼樣的怪樣子都不奇怪,太精緻反而有點奇怪呢!做好直送嘴巴「喀嚓」,看它還敢不敢來 Trick-or-Treat!

差不多食譜:蜂蜜烤南瓜 Roasted Pumpkin with Honey

還記得差不多食譜分享過用煎的南瓜吧!那是屬於家常菜的做法,現在差不多食譜推出另外一種做法,淋上蜂蜜,用烤箱加上精緻的裝飾,讓家常菜變身成為派對食物。相信當你端出這盤「蜂蜜烤南瓜」時,肯定會吸引不少眼球的注意。

金門。毋忘在莒勒石 “Wu Wang Zai Jyu” Inscription

金門有塊石頭,不去看看感覺怪怪的,看了又覺得實在沒什麼。聰明的你應該猜到了,就是那塊出現在教科書裡頭的「毋忘在莒」,金門的象徵。印象中,刻著「毋忘在莒」的那塊大石頭旁邊光禿禿的。或許從小學畢業二十多年後,我頭一次有機會來拜見這塊石頭,旁的小樹苗已經長成這副模樣了吧!再過幾年,恐怕要在林蔭中尋找「毋忘在莒」這四個字。但真要問起「毋忘在莒」這四個字是什麼意思,我相信不少人需要稍微想一下。