AVFoundation – AVAsset 加载媒体

目录

  • 一.前言
    • 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 加载媒体

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

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

相关文章

阿里产品岗需是技术出身?分享技术转型产品的成功经验

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 |卡小基本文转载自公众号&#xff1a; 卡小基看世界最近看了一个爆料&#xff1a;不管这爆料是不是真的&#xff0c;至少在我9年的开发生涯中没遇到过几个靠谱的产品经理&#xff0c;究其原因就是大多非技术出身&#xff0c;非…

state的简写方式

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>state的简写方式</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <!-- 核心库 --> <…

云漫圈 | 什么是DNS?什么是DNS污染?什么又是DNS劫持?

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章转载自公众号&#xff1a;漫画编程2019年1月23日下午&#xff0c;我正在公司疯狂的撸着代码&#xff0c;沉浸在我的代码世界中&#xff0c;正在欣赏着自己刚刚写下的一行lambda表达式&#xff0c;突然微信上传来女朋友的消息。在…

全面剖析企业私有云

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 |孙杰本文转载自公众号&#xff1a;华章计算机在以AWS、Google、阿里等为代表的公有云发展的同时&#xff0c;很多大型企业出于数据安全性、系统稳定性、软硬件自主权、对自主可控以及TCO低的考虑&#xff0c;更加倾向于建设企…

React之props批量传递

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>2_props批量传递</title> </head> <body> <!-- 准备好一个容器 --> <div id"test1"></div> <div id"test2&qu…

趣挨踢 | 如何修改个人简历?一些过来人的经验

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 汕大小吴出处&#xff1a;https://www.nowcoder.com/discuss/154151一、前言又到了招聘的季节&#xff0c;看到很多师弟师妹们不太懂得如何写简历来展现自己&#xff0c;这里我想给出我个人的一些建议。因为我的简历修改了很…

React之props限制

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>2_props限制</title> </head> <body> <!-- 准备好一个容器 --> <div id"test1"></div> <div id"test2"&…

云评测 | OpenStack智能运维解决方案 @文末有福利!

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章摘自 | 《OpenStack架构分析与实践》谈到OpenStack&#xff0c;一个难以避免的话题就是运维&#xff0c;对于OpenStack的运维而言&#xff0c;随着其项目的不断增多&#xff0c;传统的“人肉运维”方式显然不能满足当下及以后的…

要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 大家好&#xff01;偶是要闻君。活动多多、新闻不少&#xff0c;精神饱满的周一&#xff0c;学起来&#xff01;&#xff01;&#xff01;文/要闻君一年一度&#xff0c;十分重磅&a…

Spring精华问答 | Spring Boot有哪些优点?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring是于2003 年兴起的一个轻量级的Java 开发框架&#xff0c;为了解决企业应用开发的复杂性而创建的。今天&#xff0c;我们一起来看看关于Spring更加有深度的问答吧。。1Q&#xff1a;Spring Boot有哪些优点&#xff1f;A&#…

基于Kubernetes的持续部署方案

戳蓝字“CSDN云计算”关注我们哦&#xff01;文章转载自Docker方案概述本技术方案为基于Kubernetes为核心的持续部署&#xff08;下文简称CD&#xff09;方案&#xff0c;可以满足开发方的程序级日志查看分析&#xff0c;运维方的快速扩容与日常运维分析&#xff0c;并且可以保…

Tcp实现文件上传

package com.wuming.lesson02;import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class TcpServerDemo02 {public static void main(String[] args) throws Exception {//1.创服务ServerSocket serverSocket new ServerSocket(9000);//2.监听客…

云存储精华问答 | 如何选择云迁移策略?

戳蓝字“CSDN云计算”关注我们哦&#xff01;云存储是在云计算概念上延伸和发展出来的一个新的概念&#xff0c;是一种新兴的网络存储技术&#xff0c;是指通过集群应用、网络技术或分布式文件系统等功能&#xff0c;将网络中大量各种不同类型的存储设备通过应用软件集合起来协…

UDP消息发送

package com.wuming.lesson03;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;//还是要等待客户端的连接 public class UdpServerDemo01 {public static void main(String[] args) throws Exception {//1.开放端口Datagram…

C/C++ 余弦函数 cos - C语言零基础入门教程

目录 一.cos 函数简介二.cos 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐 : C…

云重磅|中西合璧 联想凌拓瓜熟蒂落;5G实锤 华为推出首部5G折叠手机;​IBM打造Kubernetes无处不在”的模式...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周二第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

C/C++ 正弦函数 sin - C语言零基础入门教程

目录 一.sin 函数简介二.sin 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 面向对象 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 设计模式 零基础 C/C 学习路线推荐 : C…

云计算精华问答 | 边缘计算、雾计算、霾计算,它们究竟是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;物联网对于数据的处理能力要求很高&#xff0c;怎么能够从庞大的数据海中挖掘一些有价值的信息对于物联网的发展至关重要&#xff0c;因此云计算&#xff0c;雾计算&#xff0c;边缘计算等等都将发挥其左右。今天&#xff0c;就让我…

IOS – OPenGL ES 设置图像亮度 GPUImageBrightnessFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

React之props的简写方式和报错示范

1.修改name值&#xff0c;这里可以直接改 1&#xff09;这样写报错&#xff0c;因为props是只读的 2.修改age值 1&#xff09;这样写没问题&#xff0c;age1 2&#xff09;这样写报错&#xff0c;因为props是只读的 3.简写&#xff0c;将这两个放入class Person里面&#xff0…