探索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。

猜你喜欢

转载自blog.csdn.net/u011686167/article/details/130679968