目录

  • 一.前言

    • 1.AVAsset
    • 2.AVAssetTrack
    • 3.AVComposition / AVMutableComposition
    • 4.AVMutableVideoComposition
    • 5.AVMutableCompositionTrack
    • 6.AVMutableVideoCompositionLayerInstruction
    • 7.AVMutableVideoCompositionInstruction
    • 8.AVAssetExportSession
  • 二.AVAsset 简介
  • 三.创建 AVAsset
  • 四.异步加载 AVAsset
  • 五.AVAsset 常用属性
  • 六.猜你喜欢

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 基础

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 线程

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> OpenGL ES

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> GPUImage

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> AVFoundation

零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> CocoaPods

一.前言

1.AVAsset

Assets 可以来自一个文件或用户的相册,可以理解为多媒体资源,通过 URL 作为一个 asset 对象的标识. 这个 URL 可以是本地文件路径或网络流;

2.AVAssetTrack

AVAsset 包含很多轨道 **AVAssetTrack **的结合,如 audio, video, text, closed captions, subtitles…

3.AVComposition / AVMutableComposition

**使用 AVMutableComposition 类可以增删 AVAsset 来将单个或者多个 AVAsset 集合到一起,用来合成新视频。**除此之外,若想将集合到一起的视听资源以自定义的方式进行播放,需要使用 AVMutableAudioMix 和 AVMutableVideoComposition 类对其中的资源进行协调管理;

4.AVMutableVideoComposition

AVFoundation 类 API 中最核心的类是 AVVideoComposition / AVMutableVideoComposition 。

AVVideoComposition / AVMutableVideoComposition 对两个或多个视频轨道组合在一起的方法给出了一个总体描述。它由一组时间范围和描述组合行为的介绍内容组成。这些信息出现在组合资源内的任意时间点。

AVVideoComposition / AVMutableVideoComposition 管理所有视频轨道,可以决定最终视频的尺寸,裁剪需要在这里进行;

5.AVMutableCompositionTrack

多个 AVAsset 集合到一起合成新视频中轨道信息,有音频轨、视频轨等,里面可以插入各种对应的素材(画中画,水印等);

6.AVMutableVideoCompositionLayerInstruction

AVMutableVideoCompositionLayerInstruction 主要用于对视频轨道中的一个视频处理缩放、模糊、裁剪、旋转等;

7.AVMutableVideoCompositionInstruction

表示一个指令,决定一个 timeRange 内每个轨道的状态,每一个指令包含多个 AVMutableVideoCompositionLayerInstruction ;而 AVVideoComposition 由多个 AVVideoCompositionInstruction 构成;

AVVideoCompositionInstruction 所提供的最关键的一段数据是组合对象时间轴内的时间范围信息。这一时间范围是在某一组合形式出现时的时间范围。要执行的组全特质是通过其 AVMutableVideoCompositionLayerInstruction 集合定义的。

8.AVAssetExportSession

AVAssetExportSession 主要用于导出视频;

二.AVAsset 简介

  • AVAsset 是 AVFoundation 框架中的核心的类,它提供了基于时间的音视频数据.(如电影文件,视频流),一个 asset 包含很多轨道的结合,如 audio , video , text , closed captions, subtitles …
  • AVMetadataItem 提供了一个 asset 相关的所有资源信息.
  • AVAssetTrack 一个轨道可以代表一个音频轨道或视频轨道

三.创建 AVAsset

Assets 可以来自一个文件或用户的相册,可以理解为多媒体资源,通过 URL 作为一个 asset 对象的标识. 这个 URL 可以是本地文件路径或网络流

NSURL *url = <#A URL that identifies an audiovisual asset such as a movie file#>;
AVURLAsset *anAsset = [[AVURLAsset alloc] initWithURL:url options:nil];

注意 NSURL 的使用:

[NSURL URLWithString:@"网络路径"]
[NSURL fileURLWithPath:@"本地路径"]
如果读取的是本地文件,那么请用第二个方法,第一个会出错,读取不到URL.

示例:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - AVAsset 加载媒体
//@Time:2021/07/25 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************///获取url
NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"123.mp4" ofType:nil]];//加载媒体方案一
AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];
//加载媒体方案二
AVURLAsset *asset2 = [AVURLAsset assetWithURL:url];NSLog(@"asset:%@  time:%f",asset,CMTimeGetSeconds(asset.duration));
/*
asset:<AVURLAsset: 0x600001f640c0, URL = file:///Users/xxx/Library/Developer/CoreSimulator/Devices/CF7390AF-D7D9-4CDA-8049-167662FFAEAD/data/Containers/Bundle/Application/536B4B5E-46A7-4D53-91B4-1C09A0A72764/LearnAVFoundation.app/123.mp4>
time:4249.883000
*/

AVAsset:主要用于获取多媒体信息,是一个抽象类,不能直接使用。 AVURLAsset:AVAsset 的子类,可以根据一个 URL 路径创建一个包含媒体信息的 AVURLAsset 对象;

四.异步加载 AVAsset

初始化 asset 并意味着你检索的信息可以马上使用. 它可能需要一定时间去计算视频的信息.因此我们需要使用 block 异步接受处理的结果.使用 AVAsynchronousKeyValueLoading 协议.**示例代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - AVAsset 加载媒体
//@Time:2021/07/25 07:30
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/NSURL* url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"123.mp4" ofType:nil]];AVURLAsset* asset = [[AVURLAsset alloc] initWithURL:url options:nil];NSLog(@"time:%f",CMTimeGetSeconds(asset.duration));
NSArray *keys = @[@"duration"];//异步加载
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^() {NSError *error = nil;AVKeyValueStatus tracksStatus = [asset statusOfValueForKey:@"duration" error:&error];switch (tracksStatus) {case AVKeyValueStatusUnknown:NSLog(@"AVKeyValueStatusUnknown");break;case AVKeyValueStatusLoading: //正在加载NSLog(@"AVKeyValueStatusLoading");break;case AVKeyValueStatusLoaded:  //加载完成NSLog(@"AVKeyValueStatusLoaded");break;case AVKeyValueStatusFailed:  //加载失败NSLog(@"AVKeyValueStatusFailed");break;case AVKeyValueStatusCancelled: //取消加载NSLog(@"AVKeyValueStatusCancelled");break;  }
}];

五.AVAsset 常用属性

/*播放速率,一般为1;*/
@property (nonatomic, readonly) float preferredRate;/*播放的优选音量,一般为1;*/
@property (nonatomic, readonly) float preferredVolume;/*用于呈现或处理asset可视内容的首选转换,一般为单位变换;*/
@property (nonatomic, readonly) CGAffineTransform preferredTransform;/*一个布尔值,指示资产是否提供精确的时间,NO为不提供,YSE提供。可以在使用URL初始化资产时,设置与时间相关的属性所需的精确度;*/
@property (nonatomic, readonly) BOOL providesPreciseDurationAndTiming;/*获取接受者使用的控制对外部媒体数据引用的限制;对于AVURLAsset来说,该属性表示AVURLAssetReferenceRestrictionsKey键(如果存在)对应的值。*/
@property (nonatomic, readonly) AVAssetReferenceRestrictions referenceRestrictions;//确定asset某些功能的可用性
/*指示AVPlayer是否可以以满足用户期望的方式播放资产的内容(指这一asset或者它的URL是否能用来初始化一个AVPlayerItem的实例);*/
@property (nonatomic, readonly, getter=isPlayable) BOOL playable;/*指示asset是否具有受保护的内容。即使媒体资源的playable属性值为YES。包含受保护内容的资产可能无法在未经授权的情况下播放。*/
@property (nonatomic, readonly) BOOL hasProtectedContent;/*指示asset是否可以使用AVAssetExportSession导出。*/
@property (nonatomic, readonly, getter=isExportable) BOOL exportable;/*指示是否可以使用AVAssetReader提取asset的媒体数据。*/
@property (nonatomic, readonly, getter=isReadable) BOOL readable;/*指示是否该asset可以在AVCompositionTrack对象的区段内使用,被用来创建一个AVMutableComposition对象。*/
@property (nonatomic, readonly, getter=isComposable) BOOL composable;/*指示是否可以将资源写入“已保存的照片”相册*/
@property (nonatomic, readonly, getter=isCompatibleWithSavedPhotosAlbum) BOOL compatibleWithSavedPhotosAlbum;/*指示资产是否与AirPlay Video兼容。如果用asset初始化的AVPlayerItem可以通过AirPlay Video由外部设备播放则为YES,反之为NO。*/
@property (nonatomic, readonly, getter=isCompatibleWithAirPlayVideo) BOOL compatibleWithAirPlayVideo;//访问轨道(tracks)相关
/*asset包含的所有轨道(AVAssetTrack的实例)的集合;*/
@property (nonatomic, readonly) NSArray<AVAssetTrack *> *tracks;/*返回具有指定轨道ID的轨道,如果指定trackID的轨道不不存在,则返回nil;*/
- (nullable AVAssetTrack *)trackWithTrackID:(CMPersistentTrackID)trackID;/*返回呈现指定类型媒体的资产的资产轨道数组;*/
- (NSArray<AVAssetTrack *> *)tracksWithMediaType:(AVMediaType)mediaType;/*返回呈现具有指定特征的媒体的AVAssetTrack对象的数组;*/
- (NSArray<AVAssetTrack *> *)tracksWithMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;/*返回asset中所有轨道组(不同的轨道分组)的数组*/
@property (nonatomic, readonly) NSArray<AVAssetTrackGroup *> *trackGroups;//访问元数据相关
/*获取asset的创建日期,该属性可能为nil,如果创建日期已被asset以可转换为NSDate对象的形式存储,则AVMetadataItem的dateValue属性将提供一个NSDate的实例。否则创建日期只能使用其stringValue值作为字符串值。*/
@property (nonatomic, readonly, nullable) AVMetadataItem *creationDate;/*提供对适合当前语言环境的asset的文字歌词的访问;*/
@property (nonatomic, readonly, nullable) NSString *lyrics;/*属性中包含着当前视频公共密钥空间中常见格式类型的元数据;*/
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *commonMetadata;/*属性中包含当前视频所有格式类型的元数据;*/
@property (nonatomic, readonly) NSArray<AVMetadataItem *> *metadata/*一组字符串,每个字符串都代表资产可用的元数据格式;*/
@property (nonatomic, readonly) NSArray<AVMetadataFormat> *availableMetadataFormats;/*根据元数据格式返回AVMetadataItem对象数组。*/
- (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;

六.猜你喜欢

  • AVAsset 加载媒体
  • AVAssetTrack 获取视频 音频信息
  • AVMetadataItem 获取媒体属性元数据
  • AVAssetImageGenerator 截图
  • AVAssetImageGenerator 获取多帧图片
  • AVAssetExportSession 裁剪/转码
  • AVPlayer 播放视频
  • AVPlayerItem 管理资源对象
  • AVPlayerLayer 显示视频
  • AVQueuePlayer 播放多个媒体文件
  • AVComposition AVMutableComposition 将多个媒体合并
  • AVVideoComposition AVMutableVideoComposition 管理所有视频轨道

未经允许不得转载:猿说编程 » AVFoundation – AVAsset 加载媒体

AVFoundation – AVAsset 加载媒体相关推荐

  1. 6-6 快速播放音频和视频预加载

    更快的播放开始意味着更多的人观看您的视频或收听您的音频.这是众所周知的事实.在本文中,我将探讨可用于通过根据您的用例主动预加载资源来加速音频和视频播放的技术. 我将描述预加载媒体文件的三种方法,从它们 ...

  2. 前端性能优化:使用媒体查询加载指定大小的背景图片

    日期:2013-7-8  来源:GBin1.com 直到CSS @supports被广泛支持,CSS媒体查询的使用接近于CSS中写逻辑控制.我们经常用CSS媒体查询来根据设备调整CSS属性(通常根据屏 ...

  3. webpack3 css,媒体查询不能使用CSS /样式加载器和Webpack3

    我使用css-loader和style-loader为我的CSS,但所有媒体查询不起作用.我正在使用"webpack": "^3.4.1","css- ...

  4. 百度ssp php源码,百度联盟SSP媒体广告异步加载代码最优解决方案

    百度联盟SSP媒体广告异步加载代码最优解决方案 相信很多站长跟我一样,建站之后第一时间就会去做百度.谷歌等联盟广告,原因很简单,就是希望能给自己增加一丢丢的收入,虽然可能几个月才收到100块(百度真小 ...

  5. 数码相框_通过随机选择的媒体文件轻松加载数码相框和MP3播放器

    数码相框 Has your digital picture or music library become so large that you have a hard time sifting thr ...

  6. 微信小程序媒体组件-image图片懒加载效果

    image 基础库 1.0.0 开始支持,低版本需做兼容处理. 图片.支持 JPG.PNG.SVG.WEBP.GIF 等格式,2.3.0 起支持云文件ID. 属性 类型 默认值 必填 说明 最低版本 ...

  7. OpenCV中使用类VideoCapture加载视频和打开摄像头

    先直接上示例代码,然后对代码进行讲解. #!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 248 ...

  8. video怎么重新加载 vue_vue.js中vue-video-player中的怎么插入多个视频,视频可以同时播放的问题及解决办法...

    多个视频解决问题 因为是从后台获取不同视频数据,要更改playerOptions里面的url,所以一个playerOptions对象没法解决,解决方法: 1. 把playerOptions对象变成空数 ...

  9. JS页面加载完成触发事件

    2019独角兽企业重金招聘Python工程师标准>>> JS  window.οnlοad=function(){ //do something } <script type= ...

最新文章

  1. js文件里获取路由 vue_「如何优雅的使用Vue?」不可不知的Vue实战技巧
  2. webpack学习资料
  3. oracle+nvlif函数,Oracle中的NVL()、NVL2()、NULLIF()、Coalesce()函数
  4. C/C++语言中字符串多行书写方法
  5. [论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN
  6. DataGridView 与货币管理器的位置关联的行不能设置为不可见
  7. EEGLAB及其插件下载安装
  8. 读书笔记之《价值》张磊
  9. Python 3 执行 MIUI 线刷包内 flash_gen_crc_list.py 文件
  10. SQL Server 函数汉字转首字母或全拼
  11. python网格交易法详解_干货 | 等分网格交易法详解
  12. python期货数据 库_如何用python或者基于vnpy框架将期货tick数据聚合成1分钟数据呢?...
  13. 2020 年全球程序员收入报告出炉,字节跳动工程师收入中国最高
  14. ios使用地图定位记录运动轨迹
  15. 西安市建筑物矢量数据(Shp格式+带高度)
  16. python音频转文字腾讯_使用Python三步完成文本到语音的转换
  17. javacv 视频转换
  18. 前端利器CodePen和Scrimba了解一下
  19. Intellij IDEA插件开发入门
  20. 将自己的python代码打包成exe的可执行文件

热门文章

  1. PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验
  2. 闲鱼对Flutter-Native混合工程解耦的探索
  3. 如何在优雅地Spring 中实现消息的发送和消费 1
  4. 我使用阿里云做直播,有什么手段保护直播安全?
  5. 【阿里云 MVP 月度分享】宋亚奇——应用MaxCompute实现电力设备监测数据的批量特征分析...
  6. 超详细!一文告诉你 SparkStreaming 如何整合 Kafka !附代码可实践
  7. 数据中心网络架构的问题与演进 — 传统路由交换技术与三层网络架构
  8. 美企调查华为设备安全性,华为发长文质疑;摩根大通预计苹果2020年将推5G iPhone;谷歌拟联手Dish成立美国第四大运营商...
  9. 为什么阿里飞猪、滴滴、携程都被质疑滥用大数据杀熟?
  10. echarts 树图样式美化_echarts2 tree树图自定义显示缩放大小、位置