AVFoundation

AVFoundation

  • AVAsset

    • AVAsset是一個抽象類和不可變類箭昵,定義了媒體資源混合呈現(xiàn)的方式寝杖。將媒體資源的靜態(tài)屬性模塊化成一個整體段多。AVAsset本身并不是媒體資源酸些,但是它可以作為時基媒體的容器取募。它由一個多個帶有自身元數(shù)據(jù)的媒體組成琐谤。
    • AVAsset是一個抽象類,意味著它不能直接被實例化玩敏。
  • AVAssetTrack 類代表保存在資源 中的統(tǒng)一類型媒體斗忌,并對每個資源建立相應(yīng)的模型。

  • iOS Assets庫

  • 異步載入

    • AVAsset具有多種有用的方法和屬性旺聚,可以提供有關(guān)資源的信息织阳、比如 時長、創(chuàng)建日期和元數(shù)據(jù)等翻屈。AVAsset還包含一些用于獲取和使用曲目集合的方法陈哑。
    • ACAsset使用一種高效的設(shè)計方法,即延遲載入資源的屬性伸眶,直到請求時才載入惊窖。強調(diào) 屬性的訪問總是同步發(fā)生的。如果正在請求的屬性沒有預(yù)先載入厘贼,程序就會阻塞拼坎。
    • 媒體元數(shù)據(jù)
      • 了解媒體的組織格式
      • AVMetadataItem
  • 視頻播放

    • AVPlayer 是一個用來播放基于時間的視聽媒體的控制器對象鳍咱。支持播放本地纪岁、分布下載或通過HTTP Live Streaming 協(xié)議得到的流媒體卒密。并在多種播放場景中播放這些視頻資源。
    • AVPlayerLayer 構(gòu)建與Core Animation之上,擴展了Core Animation的CALayer類岳掐,并通過框架在屏幕上顯示視頻內(nèi)容凭疮。這一圖層并不提供任何可視化的控件或其他附件。但是他可以用作視頻內(nèi)容的渲染面串述。創(chuàng)建AVPlayerLayer需要一個指向AVPlayer實例的指針执解。這就將播放器和土城緊密綁定在一起。
    • AVPlayerItem 由一個或多個媒體曲目組成纲酗,由AVPlayerItemTrack類建立模型衰腌。AVPlayerItemTrack實例用于表示播放器條目中的類型統(tǒng)一的媒體流,
  • 學(xué)習(xí)框架功能的第一步就是了解其中包含的各個類及每個類所扮演的角色和職責(zé)觅赊。

  • AVAssetReader 用于從資源讀取媒體樣本右蕊,

  • AVAssertWrite 用于對媒體資源進行編碼寫入到容器文件中

  • AVAssetReader+AVAssetReaderTrackOutput

  • 講解:

    • AVAssetReader 可以從原始數(shù)據(jù)里獲取解碼后的音視頻數(shù)據(jù)。結(jié)合AVAssetReaderTrackOutput 吮螺,能讀取一幀幀的CMSampleBufferRef 饶囚。CMSampleBufferRef 可以轉(zhuǎn)化成CGImageRef 帕翻。為此,我們可以創(chuàng)建一個ABSMovieDecoder 的一個類來負(fù)責(zé)視頻解碼坯约,把讀出的每一個CMSampleBufferRef 傳遞給上層熊咽。
    • 1.獲取媒體文件的資源AVURLAsset
    • 2.創(chuàng)建一個讀取一個媒體數(shù)據(jù)的閱讀器AVAssetReader
    • 3.獲取視頻軌跡的AVAssetTrack 其實就是我們的視頻來源
    • 4.為我們的閱讀器AVAssetReader進行配置莫鸭,如配置讀取的像素闹丐,視頻壓縮得到我們的輸出端口videoReaderOutput軌跡,也就是我們的數(shù)據(jù)來源被因。
    • 5.為閱讀器添加輸出端口卿拴,并開啟閱讀器

--

捕捉棧

  • AVCaptureSession
    捕捉棧的核心類是AVCaptureSession 一個捕捉會話相當(dāng)于一個虛擬的插線板,用于連接輸入和輸出的資源梨与。捕捉會話管理從物理設(shè)備得到的數(shù)據(jù)流堕花,輸出到一個或多個目的地≈嘈可以動態(tài)配置輸入和輸出的線路缘挽。
  • AVCaptureDevice 提供了一個名為videoZoomFactor的屬性,用于控制捕捉設(shè)備的縮放級等級呻粹,
  • 人臉識別的思路:
    • 1.創(chuàng)建一個保存在faceLayer字典中鍵值的可變副本壕曼。這個數(shù)組用來確定哪些人臉移出視圖。
    • 2.遍歷每個轉(zhuǎn)換的人臉對象并捕捉其關(guān)聯(lián)的faceID這個屬性唯一標(biāo)識一個檢測到的人臉等浊。
    • 3.如果給定的faceID 沒有找到對應(yīng)的層腮郊,調(diào)用makeFaceLayer方法創(chuàng)建一個新的人臉圖層
    • 4.從lostFaces 數(shù)組中將剩下的人臉山從界面中刪除掉。

CMSampleBufferRef
* 是一個由Core Media 框架提供的Core Foundataion風(fēng)格的對象筹燕,用于在媒體管道中傳輸數(shù)字樣本轧飞。

--
讀取和寫入棧

  • AVAssetReader

    • 用于AVAsset實例讀取媒體樣本。通常會配置一個或多個AVAssetReaderOutput實例撒踪,并通過copyNextSampleBuffer方法可以訪問音頻樣本和視頻幀过咬。
  • AVAssetWriter

    • AVAssetWriter是AVAssetReader對應(yīng)的兄弟類。它用于對媒體資源進行編碼并將其寫入到容器文件中制妄。它由一個或多個AVAssetWriterInput對象配置掸绞,用于附加將要包含要寫入容器的媒體樣本的CMSampleBuffer對象。AVAssetWriterInput被配置為可以處理指定的媒體類型忍捡。比如音頻或視頻集漾,并且附加在其后
  • 繪制一個音頻波形圖

    • 三個步驟
    • 1.讀取
    • 2.縮減
    • 3.渲染
  • 媒體的組合和編輯

  • 組合媒體

<table >
<td bgcolor=#000000>
<font color = #0099ff size=2>

  • AVFoundataion 有關(guān)資源組合的功能源于AVAsset的子類AVComposition.一個組合就是將其他幾種媒體資源組合成一個自定義的臨時排列,再將這個臨時排列視為一個可以呈現(xiàn)或處理的獨立媒體資源砸脊。比如AVAsset對象 組合相當(dāng)于包含了一個或多個給定類型的媒體軌道的容器具篇。AVComposition中的軌道都是AVAssetTrack的子類AVCompositionTrack.一個組合軌道本身由一個或多個媒體片段組成,由AVCompositionTrackSegment類定義凌埂,代表這個組合中的實際媒體區(qū)域驱显。AVComposition和AVCompositionTrack都是不可變的對象,提供對資源的只讀操作。這些對象提供了一個合適的接口讓應(yīng)用程序的一部分進行播放和處理埃疫。不過當(dāng)創(chuàng)建自己的組合時就需要使用AVMutableComposition和AVMutableCompositionTrack所提供的可變子類伏恐。
  • CMTime 結(jié)構(gòu)體
  • CMTime實例可標(biāo)記特定的時間點或用于表示持續(xù)時間。
  • CMTimeRange 由兩個CMTime值組成栓霜,第一個值定義時間范圍的起點翠桦,第二個值定義時間范圍的持續(xù)時間。
  • typedef strcut
  • {
  • CMTime start;
  • CMTime duration;
  • }CMTimeRange;

</td>
</table>

--
音頻

講解:

    音頻 人耳能聽到的聲音 最低的頻率一般從20Hz起一直到最高的最高頻
    率20KHZ,因此音頻文件格式的最大帶寬是20KHZ胳蛮。只有采樣頻率高于聲
    音信號最高頻率的兩倍時销凑,才能把數(shù)字信號表示的聲音還原成原來的聲
    音,所以音頻文件的采樣率是40~50KHZ 比如最常見的CD音質(zhì)采樣率
    44.1KHZ.
    對聲音進行采樣仅炊、量化過程被稱為脈沖編碼調(diào)制簡稱 PCM. PCM數(shù)據(jù)是最原始的音頻數(shù)據(jù)完全無損斗幼。所以PCM數(shù)據(jù)雖然音質(zhì)優(yōu)秀但體積龐大。

iOS音頻播放概述

了解了基礎(chǔ)概念之后我們就可以列出一個經(jīng)典的音頻播放流程(以MP3為例):

    1. 讀取MP3文件
    2. 解析采樣率抚垄、碼率蜕窿、時長等信息,分離MP3中的音頻幀
    3. 對分離出來的音頻幀解碼得到PCM數(shù)據(jù)
    4. 對PCM數(shù)據(jù)進行音效處理(均衡器呆馁、混響器等桐经,非必須)
    5. 把PCM數(shù)據(jù)解碼成音頻信號
    6. 把音頻信號交給硬件播放
    7. 重復(fù)1-6步直到播放完成

AudioSession簡介

    1. 確定你的app如何使用音頻(是播放?還是錄音智哀?)
    2. 為你的app選擇合適的輸入輸出設(shè)備(比如輸入用的麥克風(fēng)次询,輸出是耳機、手機功放或者airplay)
    3. 協(xié)調(diào)你的app的音頻播放和系統(tǒng)以及其他app行為(例如有電話時需要打斷瓷叫,電話結(jié)束時需要恢復(fù)屯吊,按下靜音按鈕時是否歌曲也要靜音等)

<font size=1 >
第一,AudioSessionInitialize可以被多次執(zhí)行摹菠,但AudioSessionInterruptionListener只能被設(shè)置一次盒卸,這就意味著這個打斷回調(diào)方法是一個靜態(tài)方法,一旦初始化成功以后所有的打斷都會回調(diào)到這個方法次氨,即便下一次再次調(diào)用AudioSessionInitialize并且把另一個靜態(tài)方法作為參數(shù)傳入蔽介,當(dāng)打斷到來時還是會回調(diào)到第一次設(shè)置的方法上。

<font size=2 >
大概流程是這樣的:

  1. 一個音樂軟件A正在播放煮寡;
  2. 用戶打開你的軟件播放對話語音虹蓄,AudioSession active;
  3. 音樂軟件A音樂被打斷并收到InterruptBegin事件幸撕;
  4. 對話語音播放結(jié)束薇组,AudioSession deactive并且傳入NotifyOthersOnDeactivation參數(shù);
  5. 音樂軟件A收到InterruptEnd事件坐儿,查看Resume參數(shù)律胀,如果是ShouldResume控制音頻繼續(xù)播放宋光,如果是ShouldNotResume就維持打斷狀態(tài);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炭菌,一起剝皮案震驚了整個濱河市罪佳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌黑低,老刑警劉巖赘艳,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異投储,居然都是意外死亡第练,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門玛荞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呕寝,你說我怎么就攤上這事勋眯。” “怎么了下梢?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵客蹋,是天一觀的道長。 經(jīng)常有香客問我孽江,道長讶坯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任岗屏,我火速辦了婚禮辆琅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘这刷。我一直安慰自己婉烟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布暇屋。 她就那樣靜靜地躺著似袁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咐刨。 梳的紋絲不亂的頭發(fā)上昙衅,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音定鸟,去河邊找鬼而涉。 笑死,一個胖子當(dāng)著我的面吹牛仔粥,可吹牛的內(nèi)容都是我干的婴谱。 我是一名探鬼主播蟹但,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谭羔!你這毒婦竟也來了华糖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤瘟裸,失蹤者是張志新(化名)和其女友劉穎客叉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體话告,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兼搏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沙郭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佛呻。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖病线,靈堂內(nèi)的尸體忽然破棺而出吓著,到底是詐尸還是另有隱情,我是刑警寧澤送挑,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布绑莺,位于F島的核電站,受9級特大地震影響惕耕,放射性物質(zhì)發(fā)生泄漏纺裁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一司澎、第九天 我趴在偏房一處隱蔽的房頂上張望欺缘。 院中可真熱鬧,春花似錦惭缰、人聲如沸浪南。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽络凿。三九已至,卻和暖如春昂羡,著一層夾襖步出監(jiān)牢的瞬間絮记,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工虐先, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怨愤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓蛹批,卻偏偏與公主長得像撰洗,于是被迫代替她去往敵國和親篮愉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容