您现在的位置是:首页 >技术杂谈 >探索iOS之AVFoundation框架网站首页技术杂谈
探索iOS之AVFoundation框架
AVFoundation框架的业务层主要是AVKit和UIKit,内核层包括CoreVideo、CoreAudio、CoreMedia、VideoToolBox等。AVFoundation作为iOS的音视频框架,提供音视频播放、录制、编辑、编解码、音效设置等。接下来,让我们看一下整体的框架图。
一、AVKit
AVKit提供AVPlayerViewController(播放控制器)、AVPictureInPictureController(画中画)、AVRoutePickerView(链路选择).
二、AVAsset
AVAsset由一个或多个AVAssetTrack组成,包括:Video、Audio、Subtitle。如下图所示:
三、AVPlayer
1、AVPlayer创建流程
首先由AVAsset构造AVPlayerItem,然后AVPlayerItem构造AVPlayer,最终是AVPlayer构造AVPlayerLayer或者AVPlayerViewController。其中,AVPlayerLayer用于自定义ViewController。创建流程如下图所示:
2、AVPlayer创建示例
关于创建AVPlayer的示例代码如下:
class PlayerViewController: UIViewController {
@IBOutlet weak var playerViewController: AVPlayerViewController!
var player: AVPlayer!
var playerItem: AVPlayerItem!
override func viewDidLoad() {
super.viewDidLoad()
// 1) Define asset URL
let url: URL = // URL to local or streamed media
// 2) Create asset instance
let asset = AVAsset(url: url)
// 3) Create player item
playerItem = AVPlayerItem(asset: asset)
// 4) Create player instance
player = AVPlayer(playerItem: playerItem)
// 5) Associate player with view controller
playerViewController.player = player
}
}
四、Editing
AVFoundation框架提供AVMutableComposition、AVMutableAudioMix、AVAssetExportSession用于音视频编辑。
1、AVMutableComposition
AVMutableComposition可以把多个AVAsse的Video和Audio进行合成。如下图所示:
2、AVMutableAudioMix
AVMutableAudioMix用于多个音频轨道的混音,如下图所示:
3、AVAssetExportSession
AVAssetExportSession用于编辑输出视频,处理环节可以是AVMutableComposition、AVMutableAudioMix、AVMutableVideoComposition。如下图所示:
五、Capture
Capture包括录音、录像、摄像头预览,输入源为AVCaptureDeviceInput,输出为AVCaptureMovieFileOutput,Camera预览为AVCaptureVideoPreviewLayer。由AVCaptureSession进行连接,如下图所示:
1、AVCaptureSession
AVCaptureSession作为录制会话,它的preset用于设置视频质量与分辨率,包括High、Medium、Low、720P、480P等。如下表所示:
2、 录制输出
AVCatpureOutput作为抽象类,而实现类包括输出视频文件、视频数据、音频数据、图像。如下图所示:
3、Camera预览
AVFoudnation提供AVCaptureVideoPreviewLayer
作为预览视图层,使用captureSession来创建,示例代码如下:
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
[viewLayer addSublayer:captureVideoPreviewLayer];
六、VideoToolBox
VideoToolBox提供编解码:VTCompressionSession和VTDecompressionSession.
1、VTCompressionSession
输入CVImageBuffer,经过VTCompressionSession编码,输出CMSampleBuffer。如下图所示:
2、VTDecompressionSession
解码处理与编码相反,输入CMSampleBuffer,经过VTDecompressionSession解码,输出CVPixelBuffer/CVImageBuffer。