Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AVFoundation框架解析看这里(1)- 概论

AVFoundation框架解析看这里(1)- 概论

作者头像
sweet说好的幸福
发布于 2020-12-23 01:59:16
发布于 2020-12-23 01:59:16
1.6K00
代码可运行
举报
文章被收录于专栏:sweet_iOSsweet_iOS
运行总次数:0
代码可运行

前言

AVFoundation框架是ios中很重要的框架,所有与视频音频相关的软硬件控制都在这个框架里面,接下来这几篇就主要对这个框架进行介绍和讲解。 便于读者查阅这个AVFoundation框架系列,在此提供目录直通车。 AVFoundation框架解析目录 AVFoundation框架解析目录 AVFoundation框架解析目录

  • 本系列创作时间为2019年11月;
  • Xcode版本Version 11.2 (11B52)
  • 当前最高系统iOS13.2
  • 语言:Swift
  • 在整个系列的讲解中,我尽量以最小的需求单元为出发点,详细介绍对应的知识点,这样让读者能更清楚AVFoundation的功能。

Tips:AVFoundation 提供了大量的Demo,其中有些会依赖于自己封装的LEKit,并没有开源,读者在阅读或改写的时候需要注意。 Tips:AVFoundation 提供了大量的Demo,其中有些会依赖于自己封装的LEKit,并没有开源,读者在阅读或改写的时候需要注意。 Tips:AVFoundation 提供了大量的Demo,其中有些会依赖于自己封装的LEKit,并没有开源,读者在阅读或改写的时候需要注意。

框架概览

  • 框架在iOS系统中的位置

AVFoundation.jpg

注意,AVFoundation是您可以用来播放和创建基于时间的视听媒体的几个框架之一,它提供了一个Objective-C接口,你可以使用这个接口用于基于时间的视听数据的详细级别。在我们实际开发过程中,我们应该通常使用可用的最高级别抽象,而不应该选择最深的实现方案。例如:

  • 如果你只是想播放视频,那么应该使用AVKit框架
  • 如果你只需要最少的格式控制时录制视频,请使用UIKit框架
  • 基本信息速览

基本信息速览.png

  • 框架结构速览

框架结构速览.png

  • 重要的头文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import AVFoundation.AVAnimation
import AVFoundation.AVAsset
import AVFoundation.AVAssetCache
import AVFoundation.AVAssetDownloadStorageManager
import AVFoundation.AVAssetDownloadTask
import AVFoundation.AVAssetExportSession
import AVFoundation.AVAssetImageGenerator
import AVFoundation.AVAssetReader
import AVFoundation.AVAssetReaderOutput
import AVFoundation.AVAssetResourceLoader
import AVFoundation.AVAssetTrack
import AVFoundation.AVAssetTrackGroup
import AVFoundation.AVAssetTrackSegment
import AVFoundation.AVAssetWriter
import AVFoundation.AVAssetWriterInput
import AVFoundation.AVAsynchronousKeyValueLoading
import AVFoundation.AVAudioMix
import AVFoundation.AVAudioProcessingSettings
import AVFoundation.AVBase
import AVFoundation.AVCameraCalibrationData
import AVFoundation.AVCaptureAudioDataOutput
import AVFoundation.AVCaptureAudioPreviewOutput
import AVFoundation.AVCaptureDataOutputSynchronizer
import AVFoundation.AVCaptureDepthDataOutput
import AVFoundation.AVCaptureDevice
import AVFoundation.AVCaptureFileOutput
import AVFoundation.AVCaptureInput
import AVFoundation.AVCaptureMetadataOutput
import AVFoundation.AVCaptureOutput
import AVFoundation.AVCaptureOutputBase
import AVFoundation.AVCapturePhotoOutput
import AVFoundation.AVCaptureSession
import AVFoundation.AVCaptureSessionPreset
import AVFoundation.AVCaptureStillImageOutput
import AVFoundation.AVCaptureSystemPressure
import AVFoundation.AVCaptureVideoDataOutput
import AVFoundation.AVCaptureVideoPreviewLayer
import AVFoundation.AVComposition
import AVFoundation.AVCompositionTrack
import AVFoundation.AVCompositionTrackSegment
import AVFoundation.AVContentKeySession
import AVFoundation.AVDepthData
import AVFoundation.AVError
import AVFoundation.AVFAudio
import AVFoundation.AVMediaFormat
import AVFoundation.AVMediaSelection
import AVFoundation.AVMediaSelectionGroup
import AVFoundation.AVMetadataFormat
import AVFoundation.AVMetadataIdentifiers
import AVFoundation.AVMetadataItem
import AVFoundation.AVMetadataObject
import AVFoundation.AVMovie
import AVFoundation.AVMovieTrack
import AVFoundation.AVOutputSettingsAssistant
import AVFoundation.AVPlayer
import AVFoundation.AVPlayerItem
import AVFoundation.AVPlayerItemMediaDataCollector
import AVFoundation.AVPlayerItemOutput
import AVFoundation.AVPlayerItemTrack
import AVFoundation.AVPlayerLayer
import AVFoundation.AVPlayerLooper
import AVFoundation.AVPlayerMediaSelectionCriteria
import AVFoundation.AVTimedMetadataGroup
import AVFoundation.AVUtilities
import AVFoundation.AVVideoCompositing
import AVFoundation.AVVideoComposition
import AVFoundation
import AVFoundation.AVPortraitEffectsMatte
import AVFoundation.AVQueuedSampleBufferRendering
import AVFoundation.AVRouteDetector
import AVFoundation.AVSampleBufferAudioRenderer
import AVFoundation.AVSampleBufferDisplayLayer
import AVFoundation.AVSampleBufferRenderSynchronizer
import AVFoundation.AVSemanticSegmentationMatte
import AVFoundation.AVSynchronizedLayer
import AVFoundation.AVTextStyleRule
import AVFoundation.AVTime
import AVFoundation.AVVideoSettings

简单说明:

  • AVAnimation动画类
  • AVAsset资产类可通过这个类获得图片、文件、媒体库
  • AVAssetExportSession资源导出会话:是一个通过资源文件对象去创建一个指定预设的输出的转码内容会话
  • AVAssetImageGenerator用于截取视频某帧的画面
  • AVAssetReader从资源读取音视频数据
  • AVAssetReaderOutput读取资源文件输出类
  • AVAssetResourceLoader资源文件的加载器会从AVURLAsset和代理方法得到加载的内容
  • AVAssetTrack资源的分轨
  • AVAssetTrackGroup这里面封装了一组资源的分轨
  • AVAssetTrackSegment表示资源分轨的一段
  • AVAssetWriter资源文件写入类
  • AVAssetWriterInput写入文件的输入类
  • AVAssetDownloadTask资源文件下载任务
  • AVCaptureDevice硬件捕获设备类
  • AVCaptureInput从硬件捕获设备获得输入的数据
  • AVCaptureOutput获得输出的数据
  • AVCaptureSession用于调配音视频输入与输出之间的数据流
  • AVCaptureVideoPreviewLayer捕获的视频数据的预览图层
  • AVMetadataObject音视频元数据是一个基类里面包含面部检测的元数据和二维码的元数据
  • AVPlayer音视频播放器
  • AVPlayerItem音视频播放的元素
  • AVPlayerItemMediaDataCollector音视频播放器元素媒体数据收集器
  • AVPlayerItemOutput播放器元素输出类
  • AVPlayerItemTrack播放器元素的分轨
  • AVPlayerLayer播放器的图层
  • AVPlayerMediaSelectionCriteria播放器媒体选择的规范
  • AVSampleBufferDisplayLayer用来显示压缩或解压的视频帧
  • AVSynchronizedLayer同步动画图层
  • AVTextStyleRule文本样式的规范
  • AVVideoCompositing视频合成的协议
  • AVAudioSettings音频的配置信息
  • AVAudioEngine 音频引擎
  • AVAudioNode音频节点
  • AVAudioTime音频时间类
  • AVMIDIPlayer MIDI播放器
  • AVAudioSession音频会话

框架功能

AV Foundation框架包括两个部分,一部分是与视频有关的API,另外一个部分是只与音频有关的API,旧的与音频相关的类提供了处理音频的很好的方式。框架功能和应用方向会在后面的章节中穿插讲解及实现,在此大概分为以下功能:

采集 AVCapture
  • 媒体捕捉
  • 视频拍摄
  • 图片拍摄
录制AVRecorder
  • 音频录制
  • 视频录制
播放
  • 音频播放
  • 视频播放
媒体文件处理AVAsset
  • 媒体文件检查
  • 媒体编辑
  • 媒体处理
  • 媒体采样
  • 媒体压缩
  • 音频的音效处理
编解码
  • 音频编解码
  • 视频编解码

如果喜欢,请帮忙点赞。支持转载,转载请附原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS-Core系列框架介绍(二)
音视频相关框架CoreMedia、CoreAudio、CoreVideo、CoreAudioKit、AVFoundation、AVKit 1.CoreMedia 提供对媒体文件操作的底层接口 2.CoreAudio 提供对音频文件操作的底层接口 3.CoreVideo 提供对视频文件操作的底层接口 以上三个框架,在需要对音频或视频创建及展示进行精确控制的应用程序才会涉及,一般应用程序应该都用不上,而我们常用的是下面几个 4.CoreAudioKit import CoreAudioKit.AUView
用户2215591
2018/06/29
1.2K0
AVFoundation 框架介绍
本文是 iOS/Android 音视频开发专题 第九篇,该专题中项目代码将在 Github 进行托管,你可在微信公众号(GeekDev)后台回复 资料 获取项目地址。
100001509164
2019/11/05
3.6K0
AVFoundation 框架介绍
高性能且灵活的 iOS 视频剪辑与特效开源框架 – VideoLab
随着移动互联网时代的到来,短视频成为了最流行的内容载体,而内容的产生离不开视频剪辑与特效创作工具。本次LiveVideoStackCon 2021 音视频技术大会 北京站,我们邀请到了RingCentral Video 移动端架构师——阮景雄,他向我们分享了AVFoundation视频剪辑框架,以及VideoLab框架的设计与实现。
LiveVideoStack
2021/12/13
1.7K0
高性能且灵活的 iOS 视频剪辑与特效开源框架 – VideoLab
AVFoundation框架解析看这里(4)- CMTime
CMTime是贯彻整个iOS音视频开发的基本数据结构,因此我们有必要在单独拿出来,详细介绍。本章主要介绍CMTime和CMTimeRange,为后面的视频操作奠定基础。
sweet说好的幸福
2020/12/23
1.1K0
AVFoundation框架解析看这里(2)- 媒体捕捉与视频拍摄
上一章节主要从整体上全览AVFoundation框架,本章主要以一个小的需求(以媒体捕捉以起点,拍摄、保存视频),打开AVFoundation的大门,带领我们欣赏这个框架带来的强大功能。
sweet说好的幸福
2020/12/23
1.2K0
AVFoundation框架解析看这里(2)- 媒体捕捉与视频拍摄
GPUImage详细解析(八)视频合并混音
回顾 GPUImage源码解析、图片模糊、视频滤镜、视频水印、文字水印和动态图片水印GPUImage的大多数功能已经介绍完毕,这次的demo是源于简书的一位简友问我如何用GPUImage进行混音,他需要对视频添加水印和背景音乐。 经过一番研究,找到了一个解决方案,下面我们按照这个方案进行实践,并学习如何进行混音。 知识储备 1、AVFoundation AVAssetReader 从原始数据里获取音视频数据 AVAssetReaderTrackOutput 读取每帧的CMSampleBufferRef
落影
2018/04/27
2K1
GPUImage详细解析(八)视频合并混音
iOS音视频播放(Audio Unit播放音频+OpenGL ES绘制视频)
前言 相关文章: 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 使用AudioToolbox播放AAC HLS点播实现(H.264和AAC码流) HLS推流的实现(iOS和OS X系统) iOS在线音频流播放 Audio Unit播放PCM文件 Audio Unit录音(播放伴奏+耳返) Audio Unit播放aac/m4a/mp3等文件 Audio Unit和ExtendedAudioFile播放
落影
2018/04/27
2.6K0
iOS音视频播放(Audio Unit播放音频+OpenGL ES绘制视频)
AVFoundation框架解析看这里(6)- AVAssetExportSession
AVFoundation框架下的视频功能基本都跟AVAssetExportSession相关,AVAssetExportSession可以以指定导出预设所描述的形式从现有AVAsset的内容创建新的定时媒体资源。 本章将首先介绍AVAssetExportSession,以及基于AVAssetExportSession实现转码和压缩视频等应用场景。
sweet说好的幸福
2020/12/23
1.5K0
AVFoundation框架解析看这里(6)- AVAssetExportSession
AVFoundation框架解析看这里(3)- 音频AVAudio
上一章节主要以媒体捕捉以起点,拍摄、保存视频,本章将以音频AVFAudio为重点,主要知识点有:
sweet说好的幸福
2020/12/23
1.9K0
AVFoundation框架解析看这里(3)- 音频AVAudio
AVFoundation详细解析(一)视频合并与混音
回顾 在上一篇GPUImage详细解析(八)视频合并混音介绍了如何使用GPUImage进行视频的合并,以及混音。这次使用AVFoundation框架来实现这个功能。 概念 AVPlayer 视频播放类,本身不显示视频,需创建一个AVPlayerLayer层,添加到视图 AVAssetTrack 资源轨道,包括音频轨道和视频轨道 AVAsset 媒体信息 AVURLAsset 根据URL路径创建的媒体信息 AVPlayerItem媒体资源管理对象,管理视频的基本信息和状态 AVMutableVid
落影
2018/04/27
1.8K0
AVFoundation详细解析(一)视频合并与混音
AVFoundation 框架初探究(二)
接着第一篇总结 ----       系列第一篇地址:AVFoundation 框架初探究(一)       在第一篇的文章中,我们总结了主要有下面几个点的知识:       1、对AVFoundation框架整体的一个认识       2、AVSpeechSynthesizer这个文字转音频类       3、AVAudioPlayer音频播放类       4、AVAudioRecorder音频录制类       5、AVAudioSession音频会话处理类        上面第一篇说的内容,大致
Mr.RisingSun
2018/03/19
1.8K0
AVFoundation 框架初探究(二)
AVFoundation框架解析看这里(7)- AVAssetImageGenerator
AVAssetImageGenerator,用来提供视频的缩略图或预览视频的帧的类。在很多视频软件中,基本都会提供跟随鼠标进度显示画面,裁剪视频时预览关键帧等功能,实际上,这种类似的功能都是AVAssetImageGenerator的功劳。
sweet说好的幸福
2020/12/23
1.3K0
AVFoundation 框架初探究(三)
这篇总结什么? ----       在该系列的上一篇的文章中,我们总结的大致内容如下:       1、视频录制  AVCaptureSession + AVCaptureMovieFileOutput       2、视频录制 AVCaptureSession + AVAssetWriter       3、AVCaptureSession + AVCaptureMovieFileOutput 与 AVCaptureSession + AVAssetWriter 的区别       这是这个系列总结
Mr.RisingSun
2018/03/19
1.2K0
AVFoundation 框架初探究(三)
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
​音视频技术的一个主要用途是直播,包括电视直播、电脑直播、手机直播等等,甚至在线课堂、在线问诊、安防监控等应用都属于直播系统的范畴。由于直播系统不仅涉及到音视频数据的编解码,还涉及到音视频数据的实时传输,因此直播领域采用的网络技术标准比较高,实现起来也比一般的WEB系统复杂。
aqi00
2024/08/18
2540
FFmpeg开发笔记(四十八)从0开始搭建直播系统的开源软件架构
干货 | 移动端使用OpenGL转场特效的音视频合成应用
近年来短视频的火爆,让内容创作类的APP获得了巨大的流量。用户通过这类工具编辑自己的短视频,添加各式各样的炫酷特效,从而呈现出更加丰富多彩的视频内容。本文将会介绍如何使用移动端原生API,将图片添加转场特效并且最终合成为视频的基本流程。
携程技术
2023/11/11
5370
干货 | 移动端使用OpenGL转场特效的音视频合成应用
AVFoundation 框架初探究(四)
叨叨两句 ----       动手写这篇总结时候也是二月底过完年回来上班了,又开始新的一年了,今年会是什么样子?这问题可能得年底再回答自己了。在家窝了那么久,上班还是的接着看我们要看的东西,毕竟我们要做的事还真的太多的。       总结第五章的内容,这两天把后面几章的内容大概的翻着看了看,知道了下后面几章的内容大致讲的都是那些内容。这里就先开始总结书本中第五章的内容。前面第四章的内容视频播放我们再前面的确也总过了,就不在这里再去重复总结。 一:AVPlayerViewController ----
Mr.RisingSun
2018/03/19
1.5K0
AVFoundation 框架初探究(四)
iOS AVDemo(4):音频解封装,从 MP4 中解封装出 AAC丨音视频工程示例
iOS/Android 客户端开发同学如果想要开始学习音视频开发,最丝滑的方式是对音视频基础概念知识有一定了解后,再借助本地平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助音视频工具来分析和理解对应的音视频数据。
关键帧
2022/06/13
5270
iOS AVDemo(4):音频解封装,从 MP4 中解封装出 AAC丨音视频工程示例
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
​很多程序员想学习音视频的编程开发,却不知从何学习,因为音视频技术的体系庞大、知识杂糅,一眼望去就令人生怯。那么学习音视频建议站在前人的肩膀上,从优秀的音视频开源框架开始钻研,先熟悉这些开源工具的具体用法,再深入了解这些开源框架的实现代码。
aqi00
2024/09/07
3120
FFmpeg开发笔记(五十一)适合学习研究的几个音视频开源框架
iOS 视频播放方式整理
初衷 ----       多媒体这整个系列的文章自己也准备好开始整理了,先从视频音频最简单也是最常用的播放出发慢慢的往下深究,探索到底层的编码解码等等,这篇文章就从视频的播放这个最简单的说起。       iOS的视频播放方式有几种?其实要是只是简单的想播放一段视频并且对UI没什么要求的话的确比较简单,很容易搞定,但我相信这种情况除了你的Demo一般是不会出现的,对播放UI的定义以及可能有各种不同的需求对应着你是不能随便写个播放器就没事了的。 最原始的播放 ----       要不是刚接触iOS开发的同
Mr.RisingSun
2018/02/06
2.7K0
iOS 视频播放方式整理
iOS 音频处理框架及重点 API 合集丨音视频工程示例
iOS/Android 客户端开发同学如果想要开始学习音视频开发,最丝滑的方式是对音视频基础概念知识有一定了解后,再借助 iOS/Android 平台的音视频能力上手去实践音视频的采集 → 编码 → 封装 → 解封装 → 解码 → 渲染过程,并借助音视频工具来分析和理解对应的音视频数据。
关键帧
2022/06/13
2K0
iOS 音频处理框架及重点 API 合集丨音视频工程示例
推荐阅读
相关推荐
iOS-Core系列框架介绍(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验