跳到主要內容

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教學影片,還有一些網誌資料。直到現在,還有一些用法我都還搞不清楚。總之,見招拆招。

留言

熱門文章

差不多食譜:手工巧克力餅乾 Chocolate Cookies

又是手工餅乾,最近一連出了兩份餅乾食譜,這個「手工巧克力餅乾」已經是第三份了。會不會有更多呢?我可以告訴大家,這是肯定的。 要怪就怪這個陰鬱的冬季雨天,哪裡都不方便去,也懶得出去。餅乾櫃空在那邊已經很久了,雖然有時候會嘴饞,但也沒有迫切去補貨的必要。反正經常開伙,平常該有的材料都會有,自己弄個成分完全透明的零食,也是個不錯的選擇。再說,用烤箱進行烘焙時,房間會變得比較乾燥,也比較溫暖。在夏天是個折磨,但到了冬天,這種感覺還滿不錯的。 話不多說,開始進行這一道「手工巧克力餅乾」的準備工作。

【豐原大蔥】免揉大蔥佛卡夏 No-knead Leek Focaccia - 差不多食譜

「豐原大蔥」的第二道食譜,就做 大蔥馬鈴薯濃湯 那篇提到的「大蔥佛卡夏」,而且用的還是懶人的免揉方法。不光是麵包,這份食譜還有一個衍生的副產品「大蔥油」,靈感來源就是蔥油拌麵。接著就來看看我是怎麼做的吧! 「大蔥佛卡夏」差不多需要這些材料:(20cm鑄鐵鍋) 豐原大蔥 ...... 1根 橄欖油 …… 適量(150ml左右) 高筋麵粉 …… 200g 鹽 …… 2g 酵母粉 …… 2-3g 水 …… 180-200g 「大蔥佛卡夏」差不多是這麼做的: Step 1. 製作「大蔥油」 說來你可能不相信,製作「大蔥佛卡夏」的「大蔥油」,靈感竟是來自於蔥油拌麵。但是大蔥油製作時需要人在旁邊顧著,而且炸過的大蔥也會拌進麵團裡面,正式製作佛卡夏前就先把這個大蔥油做好。 用小蔥製作蔥油的時候,只有切段丟進油裡去炸。可是我打算把炸過的大蔥一起揉到麵包裡,大蔥纖維比較不好咬斷,就先用刀子給它切碎。要注意的是,這裡我只用蔥白,以及稍微有點厚度的蔥綠,也就是蔥白和蔥綠交界那邊。 接下來,把切碎的大蔥放入鍋中,並倒入橄欖油,用中小火慢慢去炸大蔥。我不想要麵包裡黑黑的,所以炸到大蔥變軟,香味散出,顏色稍微黃一點的時候就可以關火,並將炸過的大蔥撈出放涼。 剩下的油就是大蔥油了,留下來炒菜、拌麵都很不錯。 Step 2. 製作佛卡夏麵團 拿個大碗,倒入高筋麵粉、鹽巴、酵母,再加上水攪拌成團。不用揉,只要成團就可以。 Step 3. 拌入大蔥發酵 往麵團中放入炸過而且放涼的大蔥,用湯匙或筷子拌進麵團。如果你的大蔥瀝的比較乾,再多補一兩匙大蔥油進去。當然,我這種差不多的作法,盛大蔥的碗底就差不多有一兩匙大蔥油了,整碗直接倒進去就好。 拌好後,找個蓋子蓋起來,室溫放一兩個鐘頭進行基礎發酵。也可以直接放進冰箱發酵,隔天再拿出來處理,就像其他的免揉麵包一樣。 Step 4. 移到烤盤 發酵完成,就可以把麵團轉移到烤盤上。我懶得洗鍋子,直接拿炸大蔥油的那個鑄鐵鍋當作烤盤來用。先在鑄鐵鍋(烤盤)底部抹些油,再灑些鹽巴,這樣麵包烤好之後表面就可以咬到一點鹹味。 接著就把麵團直接搬到烤盤,淋點大蔥油,開始用手指戳出佛卡夏特有的孔洞。操作之前記得洗手! 戳完孔後,切點蔥綠用大蔥油泡一下,均勻放在佛卡夏表面,並稍微壓進麵團裡。最後往表面再灑些鹽巴,同樣是在表面就可以嚐到些許的鹹味。這樣,就可以準備烘焙了! Step

差不多食譜:壽桃 Birthday Bunns

「壽桃」可不是老人家生日的專利,小巧玲瓏的壽桃超級受到小朋友歡迎,直說「好可愛喔!」其實壽桃就是一種造型饅頭/包子,只要掌握了這些方法,要做其他的造型都沒問題。