【iOS】视频播放之AVPlayer
iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下:
使用环境 | 优点 | 缺点 | |
---|---|---|---|
AVPlayerViewController | AVKit | 简单易用 | 不可定制 |
MPMoviePlayerController | MediaPlayer | 简单易用 | 不可定制 |
IJKPlayer | IJKMediaFrameWork | 定制度高,可支持流媒体播放 | 使用复杂 |
AVPlayer | AVFoundation | 可定制度高,功能强大 | 不支持流媒体 |
由此可以看出,如果我们不做直播功能AVPlayer就是一个最优的选择。
另外AVPlayer是一个可以播放任何格式的全功能影音播放器
支持视频格式: MP4,MOV,M4V,3GP,AVI等。
支持音频格式:MP3,AAC,WAV,AMR,M4A等。
详见AVPlayer支持的视频格式
如何使用
AVPlayer存在于AVFoundation框架,我们使用时需要导入:
#import <AVFoundation/AVFoundation.h>
几个播放相关的参数
在创建一个播放器之前我们需要先了解一些播放器相关的类
AVPlayer:控制播放器的播放,暂停,播放速度
AVURLAsset : AVAsset 的一个子类,使用 URL 进行实例化,实例化对象包换 URL 对应视频资源的所有信息。
AVPlayerItem:管理资源对象,提供播放数据源
AVPlayerLayer:负责显示视频,如果没有添加该类,只有声音没有画面
我们这片文章就围绕这几个参数展开,光说这些你可能还有点不明白,那我们就围绕一个最简单的播放器做起,一点点扩展功能,在具体讲解这几个参数的作用。
最简单的播放器
根据上面描述,我们知道AVPlayer是播放的必要条件,所以我们可以构建的简单播放器就是:
NSURL*url=[NSURLfileURLWithPath:@"视频地址"];
AVPlayerItem*playerItem=[AVPlayerItemplayerItemWithURL:url];
self.player=[AVPlayer playerWithPlayerItem:playerItem];
[self.player addObserver:self forKeyPath:@"status"options:NSKeyValueObservingOptionNew context:nil];
self.player.actionAtItemEnd=AVPlayerActionAtItemEndNone;
self.playerLayer=[AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.videoGravity=AVLayerVideoGravityResizeAspect;
self.playerLayer.frame=self.view.bounds;
[self.view.layer addSublayer:self.playerLayer];
[self.player play];
为完成这些,我们需要对AVPlayerItem和AVPlayerLayer进一步了解一下。
一、AVPlayer的控制
前面讲过该类是控制视频播放行为的,他的使用比较简单。
播放视频:
[self.player play];
暂停视频:
[self.player pause];
更改速度:
self.player.rate =1.5;//注意更改播放速度要在视频开始播放之后才会生效
还有一下其他的控制,我们可以调转到系统API进行查看
二、AVPlayerItem的控制
AVPlayerItem作为资源管理对象,它控制着视频从创建到销毁的诸多状态。
1. 播放状态 status
typedef NS_ENUM(NSInteger,AVPlayerItemStatus) {
AVPlayerItemStatusUnknown,//未知
AVPlayerItemStatusReadyToPlay,//准备播放
AVPlayerItemStatusFailed//播放失败
};
我们使用KVO监测playItem.status,可以获取播放状态的变化
[self.playerItem addObserver:selfforKeyPath:@"status"options:NSKeyValueObservingOptionNewcontext:nil];
在监听回调中:
- (voi