AVAsset相关API翻译

来源:互联网 发布:tcp 发送syslog java 编辑:程序博客网 时间:2024/06/02 04:50

@constant AVURLAssetPreferPreciseDurationAndTimingKey

定义:

AVF_EXPORT NSString *const AVURLAssetPreferPreciseDurationAndTimingKey NS_AVAILABLE(10_7, 4_0);

@abstract
表明该asset是否应该提供一个精确的时长和提供在任意精确的时间上访问。

@discussion
1.如果向[AVURLAsset initWithURL:options:]的options参数传递的是nil,或者如果传递一个缺少value值的AVURLAssetPreferPreciseDurationAndTimingKey的dictrionary,默认的value值是NO.如果这个asset只是用来播放,因为AVPlayer在精确时间随机访问不可用的情况下会提供时间上的近似随机访问,默认值NO是可以满足要求的;
2.如果你需要精确的时间访问,并且你可以忍受长时间的加载,那么就传递YES。如果该asset是被用来插入一个AVMutableComposition中的,那么典型情况下是需要精确的随机访问的,所以建议传递YES值;
3.你需要意识到,当提取该资源的某个部分时,在这种“精确模式”进行操作可能需要对资源做额外的解析,这取决于该容器的格式。许多容器类型为精确时间操作提供了足够的信息,因此不需要额外的解析来准备,如QuikTime movie和MPEG-4。其他没有提供足够信息的格式可能需要前期检查,才能提供精确随机访问;
4.如果你为一个准备用AVPlayerItem实例来播放的asset传递YES,而且你在[AVPlayerItem duration]的值变成有效之前你已经开始播放了(?不太确定),你可以忽略(还是删除?)这个你传递给[AVPlayerItem initWithAsset:automaticallyLoadedAssetKeys:]的AVAsset的keys数组的key @”duration”,以防止AVPlayerItem在item准备播放之前自动加载了duration的值;
5.如果asset的URL对应的资源本身不能提供精确的时长和时间戳,那么AVAsset.providesPreciseDurationAndTiming将会是NO,即使你你设置了需要精确时间访问。

@class AVAsset

@abstract
1.AVAsset是一个抽象类,定义了有时间属性的(timed)音视频媒体资源的AVFoundation’s model;
2.每一个asset包含了一系列的tracks,他们是准备一起展现或处理的,每一个唯一的media type,包括但不限于audio, video, text, closed captions, and subtitles.

@discussion
1.AVAssets通常是通过具体的子类AVURLAsset以指示音视频资源的NSURLs来实例化的,音视频资源包括streams (including HTTP live streams), QuickTime movie files, MP3 files, and files of other types.

2.他们也可以通过其他音视频之外的具体子类来实例化,因为AVComposition不是为了临时编辑的?

3.AVAsset定义了所有的assets的属性。另外,可以拥有一系列的AVAssetTracks实例的引用,这些引用可以单独测试;

4.因为timed音视频媒体资源的本质,在AVAsset被成功实例化之前,它部分或全部的keys的value值不是马上有效的。key的value值可以在任意时间被请求,而且AVAsset经常同步的返回这些value,其实它可能会阻塞调用的线程;

5.为了避免阻塞,clients可以注册他们感兴趣的部分keys,当他们的values有效时通知。可以查看AVAsynchronousKeyValueLoading.h了解更多细节;

6.在iOS中,避免阻塞非常重要。为了保持及时响应,一个同步的请求阻塞太长时间可能会引起media服务重启;

7.要播放AVAsset实例,你可以初始化一个AVPlayerItem实例,使用AVPlayerItem来设置展示的状态,而且根据这个AVPlayerItem是只播放自身还是和其他items一起播放,将它提供给AVPlayer.更多细节看AVPlayerItem.h and AVPlayer.h.

8.AVAssets也可以被插入到AVMutableCompositions来将一个或多个音视频assets聚合在一起。

@class AVComposition

@abstract
一个AVComposition合并多个来自本地文件media data,为了一起展现或处理来自多个源的媒体数据。所有的基于本地文件的assets都可以合并,不管他们是什么格式;

@discussion
1.在他的最高层,AVComposition是tracks的集合,每一个展现的media有一个特殊的类型,如audio或video.每一个track被一个AVCompositionTrack展现;

2.每一个track由一个track segment(片段)数组组合而成,每一个segment代表了存储在source容器的媒体数据的一部分,被URL,track ID,和time mapping定义, 表现为一个AVCompositionTrackSegment;

3.URL指定要被展现的source container和指示这个source container的track id;

4.time mapping指定将被展现的source track的临时范围,也指定composition track内部的presentation的临时范围。如果source的时长和time mapping的目标范围是一样的,这个segment对应的media data将以正常的速度展现,否则,这个segment将以source.duration / target.duration的速度展现。

5.一个track的多个track segments通过AVCompositionTrack的trackSegment属性来使用,trackSegment是一个AVCompositionTrackSegment数组。

6.这个tracks的集合(每个track有着media type信息和track segments数组),组成了一个composition的低层的代表(representation);

7.这个representation可以被clients以任意方便的形式写出来,随后这个composition可以重建,通过有合适media type的AVMutableCompositionTracks来实例化一个新的AVMutableComposition这种方式,每个AVMutableCompositionTrack有一个trackSegment属性,它存储了一个数组,里面有URL, track identifier, and time mapping.

8.一个构建compositions的高层接口,也是以AVMutableComposition和AVMutableCompositionTrack来展现的,它提供了插入,删除和scale等操作,这些操作不需要直接操作composition tracks的trackSegment数组。这些接口利用如AVAsset and AVAssetTrack这些高层建筑,允许client对已经创建的candidate sources使用相同的引用。

Immutable Snapshots(不可变快照?)

合并video tracks
在播放或其他处理(如导出)的过程中,如果不使用AVVideoComposition,那么只有第一个video track将被处理,其他video track将被忽略。为了控制多个可用的video tracks,你必须创建和配置一个AVVideoComposition实例,并将它设置到你将要使用的AVFoundation object(如AVPlayerItem或AVAssetExportSession)的videoComposition属性中。

audio tracks的混音
在播放或其他处理的过程中,如果不使用AVAudioMix,那么asset中所有可用的audio tracks都会以相同的level被mixed到一起。为了控制被mix的audio tracks, 你必须创建和配置一个AVAudioMix实例,并把它设置到AVFoundation object的audioMix属性中。

@AVMutableCompositionTrack的

@method insertTimeRange:ofTrack:atTime:error:

@abstract
插入一个source track的timeRange到一个composition的一个track。

@param timeRange
指定插入的track的时间范围。

@param track
指定将被插入的source track。只支持AVURLAssets和AVCompositions的AVAssetTracks。(AVCompositions是在MacOS X 10.10 and iOS 8.0后才支持)。

@param startTime
指定被插入的track被composition track展示的时间。你可以传递kCMTimeInvalid来指定这个timeRange添加到原来的track的尾部。

@param error

@param error

@discussion
1.你提供一个AVAssetTrack的引用和你想插入的timeRange。你指定这个timeRange将被插入到目标composition track的开始时间。

2.注意这个被插入的track的timeRange将以它本来的时长和速度来展现。它可以通过-scaleTimeRange:toDuration:来scale到不同的时长和以不同的速度展现;

@class AVVideoComposition

@abstract
一个AVVideoComposition对象代表一个不可变的video composition.

@discussion
1.一个video composition描述了,在一个时间聚合中的任意时间一个video track的指令,数字和IDs将 被使用,为了产生一个composed video frame对应这个时间。当AVFoundation中内置的video compositor被使用时,一个AVVideoComposition包含的指令为每一个video source可以指定一个空间转换,一个opacity(透明度?), 一个裁剪矩形范围,而且这些可以随时间改变(通过一个简单的线性斜坡函数);

2.一个client可以通过实现AVVideoCompositing来实现他们自己定制的video compositor,一个定制的video compositor可以在播放或其他操作中提供每一个video sources的像素缓冲区,也可以执行任意的图形操作来提供视觉输出。

AVMutableVideoCompositionInstruction的layerInstructions属性

@property (nonatomic, copy) NSArray<AVVideoCompositionLayerInstruction *> *layerInstructions;

提供一个1.AVVideoCompositionLayerInstruction数组,指定source tracks的video frames应该如何分层和合并。Tracks按照layerInstructions数组的顺序来从顶部到底部来安放;数组中第一个instruction的对应的track会被安放在最上层,跟着第二个instruction对应的track放在它的下面,etc。
2.如果这个key为nil, 输出将全是背景颜色。

原创粉丝点击