读AVFoundation官方文档记录

前言

官方提供了AVFoundation库来帮助我们进行影音媒体的一系列操作如创建,编辑,录制等。也可以通过输入设备获取输入流并在实时捕获或者回放期间进行影音的操作。但是如果你的需求并不复杂推荐使用更高级的抽象层去实现。

  • 如果只是简单地进行视频播放推荐使用AVKIt。
  • 在iOS平台上,如果对于录制视频格式仅仅进行最小程度的控制,推荐使用UIKIt,如UIImagePickerController。

At a Glance

  • 播放音频可以使用AVAudioPlayer。
  • 录制音频可以使用AVAudioRecorder。
  • 配置音频的一系列行为可以使用AVAudioSession。

Using Assets

Asset

AVFoundation framework用来表示媒体的主要类,一个AVAsset实例用来表示一个或多个媒体的集合。它提供了了该集合的信息。一个AVAsset对象可能包含多个AVAssetTrack实例,一个AVAssetTrack可能代表这audio track或者video track等。

The Source Of The Asset

可以通过文件或者用户设备的媒体库,远程HTTP Live Streaming获取,当你获取到一个movie asset时,你就可以对该asset进行提取静态图像或者转码成其他格式等操作。

Create Asset

AVAsset是一个抽象类,当你创建一个asset的时候实际上是创建了一个AVAsset的子类AVURLAsset。

多数情况下这是一个创建asset最合适的方式。但是当你想更详细的操控这个实例的时候你也可以直接创建AVURLAsset实例。 

其中options中可选的设置项包含

  • AVURLAssetPreferPreciseDurationAndTimingKey,对应值为bool,确认是否提供精确的持续时长,并按时间提供精确的随机访问。该值为yes时会有一定的计算时间消耗。

  • AVURLAssetReferenceRestrictionsKey,对应AVAssetReferenceRestrictions枚举值,用于限制外部数据访问。

  • AVURLAssetHTTPCookiesKey,AVURLAsset为这些HTTP(S)请求使用额外的HTTP cookie。

  • AVURLAssetAllowsCellularAccessKey,对应值为bool,确认是否可以使用移动网络资源。

你也可以用一些其他的子类来实例化一个asset,比如用于临时编辑视听媒体是使用AVComposition。

在实例化一个视听媒体的时,它所包含的键值可能是不能被立刻使用的,asset通常使用同步方式来返回键所包含的值,这就不得不导致线程的阻塞,所以你可以通过注册你所感兴趣的key在该值在可用时得到通知。

Play Asset

通过asset实例化AVPlayerItem对象并将该对象交付于AVPlayer对象,由AVPlayer对象决定是单独播放还是加入到asset集合中。

AVPlayerItem

总的来说,AVPlayerItem对象存储着一个需要播放的媒体对象的引用,如果你想在asset播放之前获取asset的相关信息可以使用AVAsynchronousKeyValueLoading协议里的方法。另外在initWithAsset:automaticallyLoadedAssetKeys:方法中指定的key会在初始化成功后立刻获取到可用的值。

AVPlayerItem是一个动态对象,你可以改变一些暴露出来的属性,一些只读的属性也会在播放期间被所关联的AVPlayer改变,所以你可以通过Key-value observing观察这些值的改变。

AVPlayer

未完待续

原文地址:https://www.cnblogs.com/kaisi/p/10077135.html