標籤:
1、今天我鼓起了勇氣,想紀錄自己對IOS架構學習成長的點點滴滴。
從事IOS開發也有幾年的時間,從剛開始最主要的語言、介面、邏輯,再到後面複雜點的線程、資料處理、網路請求、動畫,最後到最複雜的底層音視頻、映像演算法、自己定義各種效果、網路底層處理。甚至是最後的效能:neon、asm最佳化。
感覺自己在IOS的開發中,每次都是霧裡看花,明明非常接近真理卻總是觸摸不到。對IOS缺乏一種全域把控的感覺。所以我下定決定想看看IOS的一些官方文檔,看看IOS的各個模組的階層究竟是怎麼回事。
大約從一年前開始做這件事件,我也知道這肯定不是一件easy的事情。就像想做Android架構師,通讀原始碼一樣,肯定是非常辛苦。由於讀研的時候做的事DSP訊號處理方面的(底層驅動。演算法移植)。
所以我在開始之前給自己打了非常多氣。我想不管是IOS還是Android都是嵌入式裝置。既然曾經是做最底層的,如今看看上層應該跨度不大,呵呵。
可是真正做的時候才發現。工作量真是太大了。所以最後調整了計劃,僅僅對IOS中的三個最難的部分做深入的研究。
當然由於時間倉促。加之自己水平有限,有認識不清或者不到位的地方,還希望大家批評指正!
請勿拍磚哈呵呵!
2、三個IOS專欄:音視頻、映像核心動畫、網路處理
這三個的重要性我就不說了,一般的clientAPP可能沒有深入關注這點。但僅僅要想做一些有特點、做深入、做精緻。我想這三個部分是不得不常常接觸的。
以下這是網上的一張IOS系統架構圖,畫的挺好的我就直接拿來了。呵呵
使用頻率:
紅色部分:常常使用
黃色部分:使用一般
淡綠部分:偶爾使用
綠色部分:極少使用
但我想從掌握的難易程度。以及使用這些這些技術的重要性來劃分。
所以我重點關注了粉紅色方框中的內容。
3 IOS:Audio&Video&FFmpeg
先來看看幾個結構圖:多媒體層結構圖:
音頻處理結構圖:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="564" height="223" >
越往上層,功能封裝越單一,同一時候能夠我們自己定製的功能就越少。
比方在AudioUnit我們能夠控制硬體Buffer大小,能夠將解碼之後的音頻資料:變聲、混頻、加密、波形展示,做各種我們想要的效果,但最上層就沒有這些豐富的API。
每一個部分的具體功能及使用會在部落格中專門的介紹,這裡就不囉嗦了。
另外我準備吧FFmpeg解碼也放到這個部分。初步想法是這種:
IOS原生API:
3.1 AVFoundation自己定義音視頻頻播放
3.2 OpenAl播放3D音效
3.3 Audio Queue音頻隊列原理解析
3.4 AudioUnit的理解與使用
3.5 Camera 從錄製到播放流程解析
IOS 流媒體 軟編解碼及經常使用技術:
3.6 Mpeg-4|AAC 視頻播放器
3.7 FFmpeg 解析for IOS(可能2-4篇)
3.8 RTSP流媒體與HLS流媒體 for IOS
3.9 圖片合成視頻,音頻混頻原理分析
3.10 即時濾鏡特效處理
IOS硬編解碼:
3.11 WAV|Mp4 檔案格式解析
3.12 H264 解碼基本原理及對IOS的支援
3.13 淺談IOS硬編硬解
可能還不是非常全面,待我整理下資料再繼續加入。
4 Image&Animation
圖片動畫處理部分:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="590" height="431" >
QuartzCore.framework : 主要包含Core Animation 核心動畫、CALayer也是這個架構以下的。
CoreGraphsic.framework:主要包含CGContext類、Quartz2d是一個畫圖引擎。由CoreGraphsic提供一組API。
OPENGLES:這個即使一個framework也是3D繪製引擎的名字。
主要用於3D畫圖。
以及高效的紋理貼圖。
CoreImage:裡面提供了豐富的影像處理、濾鏡庫。同一時候還有GPU加速功能。
這個環節我想從下面幾個部分闡述:
4.1 QuartzCore 介紹各種炫酷動畫:如PNChart圖表重構github(可能要4-5篇)
4.2Quartz2d畫圖引擎的使用
4.3 OpenGLES 畫圖引擎的使用
4.4 IOS原生濾鏡庫介紹
4.5 armv7 核心(寄存器使用)
4.6 Neon、ASM(彙編最佳化)
5 NetWork
IOS的網路層次結構主要分為下面三個部分:
Cocoa層:NSURL(比較經常使用的)、NSStream、GameKit、WebKit、ASIHttpRequest(第三方架構)
Core Foundation:CFNetwork/CFNetServices、CFStream、CFSocket
OS:BSD Socket
這部分例如以下布置:
5.1 Socket(從OS層到Cocoa層)不同情況下Socket的理解(估計4篇)
5.2 利用Socket實現Http協議(估計5篇左右)
5.3 IOS對代理、離線緩衝、CDN加速的理解(估計6篇左右)
IOS架構師之路:我對IOS架構的點點認識(大綱)