AVFoundation 基礎介紹
1個像素點大小 紅色8位 綠色8位 藍色8位
數字媒體壓縮
色彩二次抽樣
定義:減少顏色數據的過程
why:眼睛對亮度的敏感度高于顏色
編譯碼器壓縮
概念:使用高級壓縮算法對需要保存或發送的音頻或視頻數據進行壓縮和編碼,同時它還可以將壓縮文件解碼成適合播放器播放和編輯的媒體資源文件
有損壓縮的目的:使用 psycho-acoustic 或 psycho-visual 模式作為一種方法來減少媒體內容中的冗余數據,這樣會使原文件質量的損耗達到最小。
視頻編解碼器
H.264
該規范是 Motion Picture Experts Group(MPEG)所定義的 MPEG-4的一部反。
- 空間:壓縮獨立視頻幀,被稱為幀內壓縮。(有損壓縮)
- 時間:通過以組為單位的視頻幀壓縮冗余數據,這一過程被稱為幀間壓縮(不降低圖片質量的情況下盡可能縮小尺寸,類似 JEPG 壓縮原理)
- GOP:在幀間壓縮中,很多幀被組合在一起作為一組圖片,對于~所存在的時間維度的冗余可以消除
- I-frames:一些單獨的幀或關鍵幀,包含創建完整圖片需要的所有數據。(每個 GOP 有一個 I-frames,尺寸最大的,但解壓最快的)
- P-frames:預測幀。從基于最近I-frames 和 P-frames 的可預測的圖片進行編碼得到的。~引用最近的預測P-frames 和 I-frames。臨近的 P-frames和 B-frames 可以引用~。
- B-frames:雙向幀。是基于使用之前和之后的幀信息進行編碼后得到的幀。(幾乎不需要儲存空間,但其解壓過程會耗費較長時間,因為依賴于周圍的其他幀)
H.264支持編碼視圖: - Baseline:最低效率的壓縮,不支持 B-frames。如 iPhone 3GS
- Main:算法更多,比較高的壓縮率
- High:最高質量,用了所有能用的編碼技術和算法
Apple ProRes
- 是一個中間件或中間層編解碼器,因為目的是為專業編輯和生產工作流服務。
- 是獨立于幀的,意味著只有 I-frames 可以被使用,使其更適合在內容編輯上。
ProRes 是有損編解碼器,只在 OSX 可用。
音頻編解碼器
Core Audio 框架支持的,AV~都支持。在不用線性 PCM 音頻的情況下,更多只能用ACC。
ACC(高級音頻編碼)
- 是 H.264標準相應的音頻處理方式,目前是音頻流和音頻下載資源中最主流的編碼方式。
- 比 MP3有提升,可以在低比特率的前提下提供更高質量的音頻,是在 Web 上發布和傳播的音頻合適中最理想的。
- 沒有來自證書和許可方面的限制
注:對于 MP3可以解碼,不能編碼
播放和錄制音頻
iOS 系統提供了一個可管理的音頻環境(managed audio enviroment),可以帶給所有 iOS 用戶非常好的用戶體驗。
音頻會話(audio session)
在大部分應用程序中,默認都是好的,但開發媒體應用程序時一般是不需要的。
默認配置:
- 激活了音頻播放,但是音頻錄音未激活
- 當用戶切換響鈴/靜音開關到“靜音”模式時,應用程序播放的所有音頻都會消失
- 當設備顯示解鎖屏幕時,應用程序的音頻處于靜音狀態
- 當應用程序播放音頻時,所有后臺播放的音頻狀態都會處于靜音狀態
音頻會話分類.JPG
配置音頻會話
// 最佳配置位置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error;
if (![session setCategory:AVAudioSessionCategoryPlayback error:&error]) {
NSLog(@"Category Error: %@",[error localizedDescription]);
}
if (![session setActive:YES error:&error]) {
NSLog(@"Activation Error:%@",[error localizedDescription]);
}
return YES;
}
使用 AVAudioPlayer 播放音頻
除非 從網絡流中播放音頻、需要訪問原始音頻樣本或者需要非常低的時延,否則 AVAudioPlayer 都能勝任。
對播放器進行控制
- play
- pause
- stop
注:調用 stop 方法會撤銷調用 prepareToPlay 時所做的設置,而調用 pause 方法則不會
優化:
- 修改播放器的音量[0,1]: eg. 聲音漸隱效果
- 修改播放器的 pan 值:允許立體聲播放, [-1.0(極右),1.0(極右)],默認為0
- 調整播放率[0.5,2]倍:允許用戶在不改變音調的情況下調整播放率
- 通過設置 numberOfLoops屬性實現音頻無縫循環 :-1無線循環
- 進行音頻計量當播放發生時從播放器讀取音量力度的平均值及峰值