MediaPlayer类库中的MPMoviePlayerController和MPMoviePlayerViewController在iOS 9下已经过期,本质上就是基于AVFoundation的封装,接下来演示AVFoundation实现视频播放
1.首先导入<AVFoundation/AVFoundation.h>头文件
2.创建播放器
// 与MPMoviePlayerController情况类似,需要强引用,防止被释放
@property (nonatomic,strong) AVPlayer *player;
AVFoundation创建播放器有两种方式:
方式一:与MediaPlayer方式一样,通过资源URL实例化对象
AVPlayer *player = [AVPlayer playerWithURL:[NSURL fileURLWithPath:filePath]];
方式二:创建一个播放项目,通过播放项目实例化播放器对象
// 创建资源
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:filePath]];
// 创建播放项目
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
// 创建播放器
self.player = [AVPlayer playerWithPlayerItem:playerItem];
3.自定义播放Layer
// 自定义播放Layer (根据AVPlayer创建播放Layer)
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
4.设置自定义播放Layer尺寸
playerLayer.frame = self.view.bounds;
5.添加Layer
[self.view.layer addSublayer:playerLayer];
6.进行播放
[self.player play];
这样就实现了视频的播放:
AVPlayer本身不带媒体控制视图,比较偏底层,需要我们手动实现媒体功能
完整示例代码:
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h> // 1. 导入头文件
@interface ViewController ()
@property (nonatomic,strong) AVPlayer *player;
@end
@implementation ViewController
// 开始播放按钮
- (IBAction)clickStartButtton:(UIButton *)sender{
// 本地资源文件
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"minion_01.mp4" ofType:nil];
// 2. 创建播放器
// 方式一: 根据资源URL
// 获取视频路径 (这里使用了本地视频文件,如果使用网络视频,设置网络视频URL即可)
// AVPlayer *player = [AVPlayer playerWithURL:[NSURL fileURLWithPath:filePath]];
// 方式二: 根据播放项目创建播放器
// 创建资源
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:filePath]];
// 创建播放项目
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
// 创建播放器
self.player = [AVPlayer playerWithPlayerItem:playerItem];
// 3. 自定义播放Layer (根据AVPlayer创建播放Layer)
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
// 4. 设置自定义播放Layer尺寸
playerLayer.frame = self.view.bounds;
// 5. 添加Layer
[self.view.layer addSublayer:playerLayer];
// 6. 进行播放
[self.player play];
}
// 停止播放按钮
- (IBAction)clickStopButton:(UIButton *)sender {
[self.player pause];
}
- (void)viewDidLoad {
[super viewDidLoad];
}
@end