AVFoundation框架解析(一)—— 基本概覽

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.08.08

前言

AVFoundation框架是ios中很重要的框架,所有與視頻音頻相關(guān)的軟硬件控制都在這個(gè)框架里面,接下來這幾篇就主要對(duì)這個(gè)框架進(jìn)行介紹和講解。

框架概覽

下面看一下該框架的基本信息。

下面看一下該框架的基本結(jié)構(gòu)。

我們先看一下這個(gè)框架在ios整個(gè)系統(tǒng)中的位置。

AVFoundation位置

我們使用這個(gè)框架,需要先引入頭文件。

#import <AVFoundation/AVFoundation.h>

下面我們就看一下這個(gè)框架里面的所有文件。

#import <TargetConditionals.h>
#if TARGET_OS_WATCH
#if ! __has_include(<AVFoundation/AVAnimation.h>)
#define AVF_IS_WATCHOS_SDK 1
#endif
#endif

#import <AVFoundation/AVBase.h>

#if ! AVF_IS_WATCHOS_SDK
#import <AVFoundation/AVAnimation.h>
#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetCache.h>
#import <AVFoundation/AVAssetExportSession.h>
#import <AVFoundation/AVAssetImageGenerator.h>
#import <AVFoundation/AVAssetReader.h>
#import <AVFoundation/AVAssetReaderOutput.h>
#import <AVFoundation/AVAssetResourceLoader.h>
#import <AVFoundation/AVAssetTrack.h>
#import <AVFoundation/AVAssetTrackGroup.h>
#import <AVFoundation/AVAssetTrackSegment.h>
#import <AVFoundation/AVAssetWriter.h>
#import <AVFoundation/AVAssetWriterInput.h>
#import <AVFoundation/AVAsynchronousKeyValueLoading.h>
#import <AVFoundation/AVAudioMix.h>
#import <AVFoundation/AVAudioProcessingSettings.h>

#if TARGET_OS_IPHONE
#import <AVFoundation/AVAssetDownloadTask.h>
#endif

#if (TARGET_OS_IPHONE || defined(__MAC_10_7))
#import <AVFoundation/AVCaptureDevice.h>
#import <AVFoundation/AVCaptureInput.h>
#import <AVFoundation/AVCaptureOutput.h>
#import <AVFoundation/AVCaptureSession.h>
#import <AVFoundation/AVCaptureVideoPreviewLayer.h>
#endif

#import <AVFoundation/AVComposition.h>
#import <AVFoundation/AVCompositionTrack.h>
#import <AVFoundation/AVCompositionTrackSegment.h>
#import <AVFoundation/AVError.h>
#endif

#import <AVFoundation/AVFAudio.h>

#if ! AVF_IS_WATCHOS_SDK
#import <AVFoundation/AVMediaFormat.h>
#import <AVFoundation/AVMediaSelection.h>
#import <AVFoundation/AVMediaSelectionGroup.h>
#import <AVFoundation/AVMetadataFormat.h>
#import <AVFoundation/AVMetadataIdentifiers.h> 
#import <AVFoundation/AVMetadataItem.h>
#import <AVFoundation/AVMetadataObject.h>
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
#import <AVFoundation/AVMovie.h>
#import <AVFoundation/AVMovieTrack.h>
#endif
#import <AVFoundation/AVOutputSettingsAssistant.h>
#import <AVFoundation/AVPlayer.h>
#import <AVFoundation/AVPlayerItem.h>
#import <AVFoundation/AVPlayerItemMediaDataCollector.h>
#import <AVFoundation/AVPlayerItemOutput.h>
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
#import <AVFoundation/AVPlayerItemProtectedContentAdditions.h>
#endif
#import <AVFoundation/AVPlayerItemTrack.h>
#import <AVFoundation/AVPlayerLayer.h>
#import <AVFoundation/AVPlayerLooper.h>
#import <AVFoundation/AVPlayerMediaSelectionCriteria.h>
#import <AVFoundation/AVSampleBufferDisplayLayer.h>
#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
#import <AVFoundation/AVSampleBufferGenerator.h>
#import <AVFoundation/AVSampleCursor.h>
#endif
#import <AVFoundation/AVSynchronizedLayer.h>
#import <AVFoundation/AVTextStyleRule.h>
#import <AVFoundation/AVTime.h>
#import <AVFoundation/AVTimedMetadataGroup.h>
#import <AVFoundation/AVUtilities.h>
#import <AVFoundation/AVVideoCompositing.h>
#import <AVFoundation/AVVideoComposition.h>
#import <AVFoundation/AVVideoSettings.h>
#endif

下面看一下框架中主要得類和功能。

  • AVAnimation動(dòng)畫類
  • AVAsset資產(chǎn)類可通過這個(gè)類獲得圖片、文件、媒體庫
  • AssetDownloadTask資源下載任務(wù)
  • AVAssetExportSession資源導(dǎo)出會(huì)話:是一個(gè)通過資源文件對(duì)象去創(chuàng)建一個(gè)指定預(yù)設(shè)的輸出的轉(zhuǎn)碼內(nèi)容會(huì)話
  • AVAssetImageGenerator用于截取視頻某幀的畫面
  • AVAssetReader從資源讀取音視頻數(shù)據(jù)
  • AVAssetReaderOutput讀取資源文件輸出類
  • AVAssetResourceLoader資源文件的加載器會(huì)從AVURLAsset和代理方法得到加載的內(nèi)容
  • AVAssetTrack資源的分軌
  • AVAssetTrackGroup這里面封裝了一組資源的分軌
  • AVAssetTrackSegment表示資源分軌的一段
  • AVAssetWriter資源文件寫入類
  • AVAssetWriterInput寫入文件的輸入類
  • AVAssetDownloadTask資源文件下載任務(wù)
  • AVCaptureDevice硬件捕獲設(shè)備類
  • AVCaptureInput從硬件捕獲設(shè)備獲得輸入的數(shù)據(jù)
  • AVCaptureOutput獲得輸出的數(shù)據(jù)
  • AVCaptureSession用于調(diào)配音視頻輸入與輸出之間的數(shù)據(jù)流
  • AVCaptureVideoPreviewLayer捕獲的視頻數(shù)據(jù)的預(yù)覽圖層
  • AVMetadataObject音視頻元數(shù)據(jù)是一個(gè)基類里面包含面部檢測的元數(shù)據(jù)和二維碼的元數(shù)據(jù)
  • AVPlayer音視頻播放器
  • AVPlayerItem音視頻播放的元素
  • AVPlayerItemMediaDataCollector音視頻播放器元素媒體數(shù)據(jù)收集器
  • AVPlayerItemOutput播放器元素輸出類
  • AVPlayerItemTrack播放器元素的分軌
  • AVPlayerLayer播放器的圖層
  • AVPlayerMediaSelectionCriteria播放器媒體選擇的規(guī)范
  • AVSampleBufferDisplayLayer用來顯示壓縮或解壓的視頻幀
  • AVSynchronizedLayer同步動(dòng)畫圖層
  • AVTextStyleRule文本樣式的規(guī)范
  • AVVideoCompositing視頻合成的協(xié)議
  • AVAudioSettings音頻的配置信息
  • AVAudioEngine 音頻引擎
  • AVAudioNode音頻節(jié)點(diǎn)
  • AVAudioTime音頻時(shí)間類
  • AVMIDIPlayer MIDI播放器
  • AVAudioSession音頻會(huì)話

框架說明

主要有下面幾種應(yīng)用方向。

  • 音頻的錄制、播放
  • 視頻的播放
  • 媒體文件檢查
  • 媒體捕捉
  • 媒體編輯
  • 媒體處理
  • 媒體采樣
  • 媒體壓縮
  • 音頻編解碼
  • 視頻編解碼
  • 音頻的音效處理

下面找?guī)讉€(gè)有代表性的說一下。

1. 視頻流處理

先看幾個(gè)重要的類。

  • AVCaptureDevice代表了輸入設(shè)備,例如攝像頭與麥克風(fēng)。
  • AVCaptureInput代表了輸入數(shù)據(jù)源
  • AVCaptureOutput代表了輸出數(shù)據(jù)源
  • AVCaptureSession用于協(xié)調(diào)輸入與輸出之間的數(shù)據(jù)流

下面看一下原理圖。

視頻流處理原理圖

2. 音頻處理

可以做聲音的錄制以及其他與聲音相關(guān)的操作,主要的類就是AVAudioSession等。

參考文章

1. AVFoundation Programming Guide(官方文檔翻譯1)About AVFoundation - AVFoundation概述
2. AVFoundation連續(xù)系列之一音頻錄制

后記

未完,待續(xù)~~~

金秋
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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