1.AVPlayer介绍
iOS提供了多种方法来实现视频播放,包括MPMoviePlayerController,MPMoviePlayerViewController,AVPlayer,AVPlayerViewController等。其中MPMoviePlayerController,MPMoviePlayerViewController在iOS9.0之后被弃用。四种播放方式的区别如下:
其中公司内项目使用的是AVPlayer实现视频播放,AVPlayer使用十分灵活,也更加接近底层,但是AVPlayer本身是不能直接显示视频,必须创建一个播放层AVPlayerLayer并将其添加到其他的视图Layer上才能显示。
AVAsset:
-
一个用于获取多媒体信息的抽象类,不能直接使用。
-
为定时试听媒体定义AVFoundation模型的抽象的,不可变的类。
-
每个asset包含想要一起呈现或处理的统一的媒体类型轨道的集合。
-
asset中的每个媒体数据片段都是统一的类型,称为轨道(track)。
-
AVAsset是一个容器对象,由一个或多个AVAssetTrack实例组成,最常用的track类型是音频和视频track,AVAssetTrack还可以模拟其他辅助轨道,如隐藏式字幕,字幕和定时元数据。
-
AVAsset通常通过具体的子类AVURLAsset通过NSURL实例化,该NSURL引用试听媒体资源,如流(包括HTTP实时流),QuickTime电影文件,MP3文件和其他类型的文件。
AVPlayerItem:
-
一个媒体资源管理对象,用于管理视频的基本信息和状态,一个AVPlayerItem对应一个视频资源。
-
AVPlayerItem会建立媒体资源动态视角的数据模型并保存AVPlayer在播放资源时呈现状态。
-
AVPlayerItem由一个或多个媒体曲目组成,由AVPlayerItemTrack类建立模型。
-
AVPlayerItemTrack实例用于表示播放器条目中的类型统一的媒体流,比如音频或视频。
-
AVPlayerItem中的曲目直接与基础AVAsset中的AVAssetTrack实例相对应。
-
AVPlayerItem 播放完成时,会发送一个AVPlayerItemDidPlayToEndTimeNotification通知,可以监听此通知做些相应的处理.
AVPlayer:
-
一个用来播放基于时间的视听媒体的控制器对象,支持播放从本地,分布下载或通过HTTP Live Streaming协议得到的流媒体。
-
AVPlayer是一个不可见组件,要将视频资源导出到用户界面目标位置,需要用到AVPlayerLayer类。
-
AVPlayer只管理一个单独资源的播放,AVQueuePlayer是AVPlayer的子类,可以管理一个资源队列。
-
负责视频播放、暂停、时间控制等操作。
AVPlayerLayer:
-
相对简单的类,负责显示视频的图层,如果不设置此属性,视频就只有声音没有图像。
-
创建AVPlayerLayer需要一个指向AVPlayer实例的指针,将图层和播放器绑定在一起,保证了当播放器基于事件的方法出现时使二者保持同步。
2.AVPlayer使用
1.引入AVFoundation框架,添加播放器属性
#import <AVFoundation/AVFoundation.h>
@property (nonatomic, strong) AVPlayer *player;//播放器对象
@property (nonatomic, strong) AVPlayerItem *currentPlayerItem;//播放资源管理对象
2.获取需要播放的视频地址
//本地视频路径
NSString *localFilePath = [[NSBundle mainBundle] pathForResource:@"video" ofType:@"mp4"];
NSURL *localVideoUrl = [NSURL fileURLWithPath:localFilePath];
//网络视频路径
// NSString *webVideoPath = &