AVFoundation編程指南02-概述

寫在前面

喜歡AVFoundation資料的同學可以關注我的專題:《AVFoundation》專輯
也可以關注我的簡書賬號

正文

AVFoundationiOS開發(fā)者可以用來播放和創(chuàng)建基于時間的視聽媒體的幾個框架之一应民。它提供了一個Objective-C接口(當然剪个,Swift也可以使用)袜香,用于在基于時間的視聽數(shù)據(jù)的詳細級別上工作。例如惧浴,你可以使用它來檢查瑟蜈,創(chuàng)建塞俱,編輯或重新編碼媒體文件姐帚。你還可以在實時捕獲和回放期間從設備獲取輸入流并操縱視頻。圖I-1顯示了iOS上的體系結構障涯。

圖I-1 iOS上的AVFoundation的堆棧結構

I-2顯示了OS X上相應的媒體體系結構
圖I-2 OS X上的AVFoundation堆棧結構

不過罐旗,咱們一般都是只會使用最上層的接口。

  • 如果你只想播放視頻唯蝶,使用AVKit框架就足夠了九秀。
  • iOS上,如果只是簡單地錄制視頻并且對格式?jīng)]有什么要求的話粘我,請使用UIKit框架中的UIImagePickerController鼓蜒。

請注意,你在AVFoundation中使用的一些原始數(shù)據(jù)結構(包括與時間相關的數(shù)據(jù)結構和opaque對象來承載和描述媒體數(shù)據(jù))在Core Media框架中聲明征字。

簡述

AVFoundation框架有兩個方面 - 與視頻相關的API和僅與音頻相關的API都弹。較舊的音頻相關類提供了處理音頻的簡便方法。

  • 要播放聲音文件匙姜,你可以使用AVAudioPlayer畅厢。
  • 要錄制音頻,你可以使用AVAudioRecorder氮昧。

你還可以使用AVAudioSession配置應用程序的音頻行為;Audio Session Programming Guide中對此進行了描述框杜。

關于AVAudioPlayerAVAudioRecorder以及Audio Session Programming Guide袖肥,我會在后面提供詳細的資料咪辱。

使用AVFoundation表示和使用媒體

AVFoundation框架用于表示媒體的主要類是AVAsset≌焉欤框架的設計在很大程度上受到這種表示的指導梧乘。了解其結構將有助于你了解框架的工作原理。 AVAsset實例是一個或多個媒體數(shù)據(jù)(音頻和視頻軌道)的集合的聚合表示庐杨。它提供有關整個集合的信息选调,例如標題,持續(xù)時間灵份,自然表示大小等仁堪。 AVAsset與特定數(shù)據(jù)格式無關。 AVAsset是用于從URL處的媒體創(chuàng)建資產(chǎn)實例的其他類的超類(請參閱AVFoundation編程指南03-Assets使用)和創(chuàng)建新的合成(請參閱AVFoundation編程指南05-編輯)填渠。

Asset中的每個媒體數(shù)據(jù)都是統(tǒng)一類型并稱為track(軌道)弦聂。在典型的簡單情況下,一個track代表音頻組件氛什,另一個track代表視頻組件;然而莺葫,在復雜的構圖中,可能存在多個重疊的音頻和視頻track(軌道)枪眉。Asset也可能包含metadata(元數(shù)據(jù))捺檬。

AV Foundation的一個重要概念是:初始化assettrack并不一定意味著它已經(jīng)可以使用了。甚至可能需要一些時間來計算項目的持續(xù)時間(MP3文件贸铜,例如堡纬,可能不包含摘要信息)。不是在計算值時阻塞當前線程蒿秦,而是通過使用block定義的回調(diào)異步請求值并獲得回調(diào)烤镐。

相關章節(jié):AVFoundation編程指南03-Assets使用, AVFoundation編程指南08-時間和媒體表示

Playback

AVFoundation允許你以復雜的方式管理Asset的播放。為了支持這一點棍鳖,它將asset的表示狀態(tài)與asset本身分開炮叶。例如,這允許你在不同分辨率下同時播放同一asset的兩個不同片段渡处。asset的呈現(xiàn)狀態(tài)由player item對象管理;asset內(nèi)每個track的呈現(xiàn)狀態(tài)由player item track對象管理镜悉。例如,使用player itemplayer item tracks骂蓖,你可以設置播放器呈現(xiàn)item的可視部分的大小积瞒,設置要在播放期間應用的音頻混合參數(shù)和視頻組成設置,或禁用組件播放期間的asset登下。

相關章節(jié):AVFoundation編程指南04-Playback

讀取茫孔,寫入和重編碼Assets

AVFoundation允許你以多種方式創(chuàng)建Asset的新的表示方式。你只需重新編碼現(xiàn)有asset被芳,或者在iOS 4.1及更高版本中 - 你可以對asset內(nèi)容執(zhí)行操作并將結果另存為新的asset缰贝。

你可以使用export session將現(xiàn)有asset重新編碼為由少量常用預設之一定義的格式。如果你需要對轉(zhuǎn)換進行更多控制畔濒,那么在iOS 4.1及更高版本中剩晴,你可以串聯(lián)asset readerasset writer對象,將asset從一種表示轉(zhuǎn)換為另一種表示。例如赞弥,使用這些對象毅整,你可以選擇要在輸出文件中表示哪些tracks,指定自己的輸出格式绽左,或在轉(zhuǎn)換過程中修改asset悼嫉。

要生成波形的直觀表示,請使用asset reader讀取assettrack拼窥。

相關章節(jié): AVFoundation編程指南03-Assets使用

縮略圖

要創(chuàng)建視頻演示文稿的縮略圖圖像戏蔑,請使用要從中生成縮略圖的資源初始化AVAssetImageGenerator的實例。 AVAssetImageGenerator使用默認啟用的video tracks(視頻軌道)來生成圖像鲁纠。

相關章節(jié): AVFoundation編程指南03-Assets使用

編輯

AVFoundation使用compositions(組合)來從現(xiàn)有媒體(通常是一個或多個視頻和音頻tracks)創(chuàng)建新的assets总棵。你使用可變組合來添加和刪除tracks,并調(diào)整其時間順序改含。你還可以設置音軌的相對volumesramping;并設置視頻軌道的opacityopacity ramps情龄。合成是存儲在記憶中的媒體的集合。使用export session導出composition時候味,它會折疊為文件刃唤。

你還可以使用asset writer從媒體(如樣本緩沖區(qū)或靜止圖像)創(chuàng)建asset

相關章節(jié):AVFoundation編程指南05-編輯

圖像和視頻媒體捕獲

來自攝像機和麥克風的錄制輸入由capture session管理白群。Capture session協(xié)調(diào)從輸入設備到輸出(例如電影文件)的數(shù)據(jù)流尚胞。即使會話正在運行,你也可以為單個會話配置多個輸入和輸出帜慢。你將消息發(fā)送到會話以啟動和停止數(shù)據(jù)流笼裳。

此外,你還可以使用preview layer(預覽圖層)的實例向用戶顯示攝像頭正在錄制的內(nèi)容粱玲。

相關章節(jié):AVFoundation編程指南06-靜態(tài)圖像和視頻媒體捕獲

使用AVFoundation進行并發(fā)編程

來自AVFoundation``blocks躬柬,KVO和通知回調(diào)不能保證在任何特定線程或隊列上進行。相反抽减,AVFoundation在執(zhí)行其內(nèi)部任務的線程或隊列上調(diào)用這些處理程序允青。

就通知和線程而言,有兩個一般準則:

  • UI相關的通知發(fā)生在主線程上卵沉。
  • 需要你創(chuàng)建和/或指定隊列的類或方法將返回該隊列上的通知颠锉。

除了這兩個指南(并且有一些例外,在參考文檔中有說明)史汗,你不應該假設將在任何特定線程上返回通知琼掠。

如果你正在編寫多線程應用程序,則可以使用NSThread方法isMainThread[[NSThread currentThread] isEqual:<#A stored thread reference#>]來測試調(diào)用線程是否是您希望執(zhí)行工作的線程停撞。您可以使用諸如performSelectorOnMainThread:withObject:waitUntilDone:performSelector:onThread:withObject:waitUntilDone:modes:等方法將消息重定向到適當?shù)木€程瓷蛙。你還可以使用dispatch_async“彈回”到適當隊列上的塊,可以是UI任務的主隊列,也可以是并發(fā)操作的隊列艰猬。有關并發(fā)操作的更多信息横堡,請參閱Concurrency Programming Guide;有關塊的更多信息,請參閱塊Blocks Programming Topics姥宝。 AVCam-iOS: Using AVFoundation to Capture Images and Movies示例代碼被認為是所有AVFoundation功能的主要示例翅萤,可以參考AVFoundation的線程和隊列使用示例恐疲。

先決條件

AVFoundation是一個先進的Cocoa框架腊满。想要有效地使用它,你必須:

  • 對基本Cocoa開發(fā)工具和技術的扎實理解培己。
  • blocks有基本的掌握碳蛋。
  • KVCKVO有基本的了解。
  • 對于playback省咨,基本了解核心動畫(參見Core Animation Programming Guide肃弟,或者,對于于basic playback零蓉,請參閱AVKit Framework Reference笤受。

參考

下面有幾個AVFoundation示例,其中兩個是理解和實現(xiàn)Camera捕獲功能的核心代碼:

AVCam-iOS: Using AVFoundation to Capture Images and Movies是用于實現(xiàn)使用相機功能的任何程序的規(guī)范示例代碼敌蜂。它是一個完整的Demo箩兽,文檔齊全,涵蓋了大多數(shù)功能章喉。

AVCamManual: Extending AVCam to Use Manual Capture APIAVCam的配套應用程序汗贫。它使用手動相機控件實現(xiàn)相機功能。它也是一個完整的Demo秸脱,有詳細記錄落包,應該被視為創(chuàng)建利用手動控制的相機應用程序的規(guī)范示例。

RosyWriter是一個演示實時幀處理的示例摊唇,特別是如何將過濾器應用于視頻內(nèi)容咐蝇。這是一個非常常見的開發(fā)人員要求,此示例涵蓋了該功能巷查。

AVLocationPlayer: Using AVFoundation Metadata Reading APIs演示使用metadata API有序。

上一章 目錄 下一章
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吮便,隨后出現(xiàn)的幾起案子笔呀,更是在濱河造成了極大的恐慌,老刑警劉巖髓需,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件许师,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機微渠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門搭幻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逞盆,你說我怎么就攤上這事檀蹋。” “怎么了云芦?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵俯逾,是天一觀的道長。 經(jīng)常有香客問我舅逸,道長桌肴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任琉历,我火速辦了婚禮坠七,結果婚禮上,老公的妹妹穿的比我還像新娘旗笔。我一直安慰自己彪置,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布蝇恶。 她就那樣靜靜地躺著拳魁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艘包。 梳的紋絲不亂的頭發(fā)上的猛,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音想虎,去河邊找鬼卦尊。 笑死,一個胖子當著我的面吹牛舌厨,可吹牛的內(nèi)容都是我干的岂却。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼裙椭,長吁一口氣:“原來是場噩夢啊……” “哼躏哩!你這毒婦竟也來了?” 一聲冷哼從身側響起揉燃,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扫尺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炊汤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體正驻,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡弊攘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了姑曙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片襟交。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伤靠,靈堂內(nèi)的尸體忽然破棺而出捣域,到底是詐尸還是另有隱情,我是刑警寧澤宴合,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布焕梅,位于F島的核電站,受9級特大地震影響形纺,放射性物質(zhì)發(fā)生泄漏丘侠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一逐样、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧打肝,春花似錦脂新、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至断医,卻和暖如春滞乙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鉴嗤。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工斩启, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醉锅。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓兔簇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硬耍。 傳聞我的和親對象是個殘疾皇子垄琐,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355