AVComposition

当我们通过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值