探索iOS之AVFoundation框架

news2024/10/6 4:07:13

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/528841.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ANR基础篇 - Trace.txt文件分析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、trace.txt文件示例二、日志分析2.1 CPU 负载2.2 内存信息2.3 堆栈信息schedst…

Mybatis 案例

文章目录 Mybatis 案例一、 准备工作1.1 数据库表1.2 Restfull规范1.3 封装结果类1.4 实体类 二、部门管理2.1 查询全部部门信息2.2 删除部门2.3 新增部门 三、员工管理3.1 分页查询3.2 分页查询 - PageHelper插件3.3 分页查询 - 条件查询3.4 批量删除员工3.5 新增员工3.6 修改…

蓝桥杯模块学习3——蜂鸣器与继电器

第一章 硬件部分 1.1 电路的组成部分 1.1.1 译码器和锁存器 具体可回顾之前LED灯的文章: https://blog.csdn.net/weixin_63568691/article/details/130660096 1.1.2 ULN2003达林顿管 原理图: 功能: (1)改变电路特性…

使用Spring初始化器创建Spring Boot项目

注:初始化向导需要联网创建Spring Boot项目 new project 项目创建完成 resources 文件夹中目录结构: static :保存所有的静态资文件, js css images templates :保存所有的模板页面(Spring Boot默认j…

python3 爬虫相关学习1:安装requests模块

目录 1 安装前:避免python2 python3 引起的问题 2 如何安装python3 2.1 直接上python3 官网下载 2.2 或者windows的话,microsoft store 里也可以下载 2.3 查看python版本 3 安装requests模块 3.1 很可能安装requests模块之前会遇到报错&#xff…

linux0.12-8-11-vsprintf.c

[383页] 1、 这一小节可以不看代码如何实现,因为标准的C库函数; 2、 等自己看完的这本书,有兴趣过来研究研究也是可以的。 8-11 vsprintf.c程序 8-11-1 功能描述 该程序主要包括vsprintf(),用于对参数产生格式化的输出。由于该函数是C函数…

SOME/IP 草稿

SOME/IP 名词解释 SOME/IP 全称是 Scalable service-Oriented MiddlewarE over IP。也就是基于 IP 协议的面向服务的可扩展性通信中间件协议。 面向服务 SOA基于 IP 协议之上的通信协议中间件 SOME/IP 功能 服务发现 (Service Discovery)远程服务调用 (RPC,rem…

React面试题汇总 --2

1. 何为 redux ,解决什么问题 操作流程 使用场景 优缺点 ? Redux使用详解(一) Redux的核心思想与基本使用__聪明勇敢有力气的博客-CSDN博客Redux使用详解(一) Redux的核心思想与基本使用https://blog.csdn.net/weixin_65402230/article/details/128193…

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略

全免费开源-国内搭建ChatGPT个人镜像站与维护全攻略 准备阶段部署网站腾讯云注册与解析添加API和密码更换域名的配置多密码管理密码更换密码批量生成 本教程收集于:AIGC从入门到精通教程汇总 全免费开源,仅需一个域名就可以部署国内的ChatGPT镜像版本。…

ConvTranspose2d 的简单例子理解

文章目录 参考基础概念简单例子: stride2step1step2step3 参考 逆卷积的详细解释ConvTranspose2d(fractionally-strided convolutions)nn.ConvTranspose2d的参数output_padding的作用 基础概念 逆卷积,也叫反卷积或者转置卷积,…

故障分析 | OceanBase 频繁更新数据后读性能下降的排查

本文摘要 本文分析并复现了 OceanBase 频繁更新数据后读性能下降现象的原因,并给出了性能改善建议。 背景 测试在做 OceanBase 纯读性能压测的时候,发现对数据做过更新操作后,读性能会有较为明显的下降。具体复现步骤如下。 复现方式 环…

部门新来一00后,给我卷崩溃了...

2022年已经结束结束了,最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的金三银四的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的…

NFT数字藏品平台

在 NFT (非同质化代币)发行和交易中,数字藏品交易平台(以下简称“交易平台”)的运营模式和法律地位至关重要。本文对数字藏品交易平台的运营方式进行梳理,并对其中可能存在的法律风险进行分析。 2021年以来…

NFS服务器搭建(案例)

目录标题 第一个问题1.安装软件包2.进入配置文件进行定义,并创建对应的资源文件3.客户端进行挂载,并查看挂载信息,修改挂载权限4.客户端查看挂载的信息 第二个问题1.服务端配置文件进行定义,并创建对应资源文件2.客户端进行挂载3.…

电子邮件是最有效的营销方式吗?解析邮件营销的优势和劣势

互联网的快速发展,使得新媒体营销、短视频营销、微信营销等新型营销方式渗入到大家的生活中。很多人会认为邮件营销已经落后。但事实上,邮件营销仍然有着广泛的市场需求,特别是对于出海或者做跨境电商的企业来讲,邮件营销仍然发挥…

深度学习笔记(续)——数值稳定性、模型初始化与激活函数

深度学习笔记[续]——数值稳定性、模型初始化与激活函数 引言回顾:没有激活函数参与,输入输出分布的变化情况 Xavier \text{Xavier} Xavier方法 存在激活函数的情况假设激活函数是线性函数激活函数的底层逻辑 总结 引言 继续上一节介绍激活函数在神经网…

Google IO 2023推出Android Studio官方AI工具Studio Bot

Google推出Android Studio官方AI工具Studio Bot Studio Bot 简介 在2023 Google I/O大会上,Google 宣布在 Android Studio 中推出了一款名为 Studio Bot 的新 AI 功能,它将为开发者提供更高效、智能的开发体验。Studio Bot 是一个基于机器学习的助手&a…

想要快速进入车载测试?这份车载面试题集锦送给你,建议收藏!

1.道路测试流程 测试场地 1.测试场地有哪些? 对于一些要求不太高/简单的测试场景可以找一些封闭的场地,如断头路或者是城市所在地当地政府提供的诸如智能网联专用道路之类的测试道路,对于复杂或相对要求高一些的测试场景可以到专业的国家智…

【运维杂谈】如何将ios镜像挂载到Linux系统中?

本期我们实现将CentOS7.9系统镜像挂载到Linux系统当中,首先明确什么是挂载,我理解的挂载就是把系统镜像与Linux操作系统建立直接的联系,将镜像的顶级目录连接到Linux根目录下的某一目录中,就好比我们Windows系统插入一张光盘&…

C++学习记录——이십삼 哈希表

文章目录 1、unordered_map unordered_set2、哈希表1、闭散列2、开散列(拉链法/哈希桶)继续优化 3、封装unordered和迭代器 1、unordered_map unordered_set C11提供,功能和map、set完全类似,不过它们底层实现是红黑树&#xff0…