博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AVComposition
阅读量:6331 次
发布时间:2019-06-22

本文共 1714 字,大约阅读时间需要 5 分钟。

hot3.png

当我们通过URL获得一个AVAseet对象后,如果想要对源文件进行处理时,我们就得用到上面提到的东西。当然,没有上面显示的那么多。但了解他们之间的关系对于我们处理文件是十分必要的。

一,扑朔迷离的关系

a、AVComposition

合成文件时,我们是先从AVAsset中获取文件。虽然操作AVAsset里面的东西,但是我们实际上使用的类比不是AVAsset。我们使用一个他的子类AVComposition,AVComposition在AVAsset上为我们提供了更加强大的服务。如同NSString和NSMutableString一样,AVComposition也有可变的对象AVMutableComposition。当我们实现不同文件组合时,我们就需要AVMutableComposition。比如实现给视频配音乐的话,就得使用AVMutableComposition。我们可以把它看做是一个用来盛放轨道的容器,里面包含不同的轨道。如MP4有一个轨道用来盛放声音,也有一个用来盛放视频(当然还有其他复杂的),然后都放在它里面。

b、AVAssetTrack

我们使用AVAssetTrack可以获得在AVAseet中源文件不同轨道上得东西。AVAssetTrack可以从AVAsset资源容器中拿到轨道信息和上面的内容。这块上代码可能更加明了

AVAssetTrack *assetTrack ;  //声明一个轨道对象//从对应asset中获取视频轨道。assetTrack = [[[AVAsset assetWithURL:url] tracksWithMediaType:AVMediaTypeVideo] firstObject];

AVAssetTrack也有可变的,通过可变的我们可以实现拼接,将不同的视频放到一起。

self.composition = [AVMutableComposition composition]; //创建一个轨道容器AVAssetTrack *assetTrack ;  //声明一个轨道对象//创建一个视频类型的可变轨道并放入轨道容器中AVMutableCompositionTrack *videoTrack = [self.composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];//AVAssetTrack可以从AVAsset资源容器中拿到轨道信息和上面的内容assetTrack = [[[AVAsset assetWithURL:url] tracksWithMediaType:AVMediaTypeVideo] firstObject];//将AVAssetTrack中得到的资源信息插入到AVMutableCompositionTrack中。方法的完整意思为把AVAssetTrack插入AVMutableCompositionTrack中插入的起始位置为cusorTime(CMTime时间类型),插入的长度为videoTimeRangee(CMTimeRange可以代表持续时间,里面包含一个起始点和持续时常,在此是针对assetTrack使用的,通过它可以截取到assetTrack轨道上对应段的内容)。[videoTrack insertTimeRange:videoTimeRangee ofTrack:assetTrack atTime:cusorTime error:nil];

c、AVCompositionTrackSegment

AVCompositionTrackSegment比较好理解。比如我们给AVMutableComposition插入不同的东西时,每一个不同的东西实际上在系统中表示就是用它

211512_MopH_2814714.png

AVComposition中可以包含多个AVCompositionTrack。

转载于:https://my.oschina.net/zhengjianhua/blog/693943

你可能感兴趣的文章
Flash文字效果
查看>>
各种排序算法总结篇(高速/堆/希尔/归并)
查看>>
使用c#訪问Access数据库时,提示找不到可安装的 ISAM
查看>>
Highcharts X轴纵向显示
查看>>
windows 注册表讲解
查看>>
【算法】论平衡二叉树(AVL)的正确种植方法
查看>>
基于DDD的现代ASP.NET开发框架--ABP系列之1、ABP总体介绍
查看>>
【原】东拼西凑PBR(1):PBR基础
查看>>
react 从零开始搭建开发环境
查看>>
scala recursive value x$5 needs type
查看>>
ps -ef |grep 输出的具体含义
查看>>
markdown编辑
查看>>
ASCII 在线转换器
查看>>
Linux内核同步:RCU
查看>>
Android逆向进阶——让你自由自在脱壳的热身运动(dex篇)
查看>>
Java设计模式之五大创建型模式(附实例和详解)
查看>>
60 Permutation Sequence
查看>>
主流的RPC框架有哪些
查看>>
Hive学习之路 (七)Hive的DDL操作
查看>>
[转]mysql使用关键字作为列名的处理方式
查看>>