Demo
实现功能:
1.视频的播放/暂停
2.播放进度前进后退
ViewController
import AVFoundation/AVFoundation.h
import “TQPlayView.h”
@interface ViewController ()
@property (nonatomic,strong) AVPlayer *player;
@property (nonatomic,strong) AVPlayerItem *item;
@property (nonatomic) CMTime time;
@property (weak, nonatomic) IBOutlet UISlider *proSlider;
- (IBAction)proChange:(id)sender;
- (IBAction)start:(id)sender;
@end
//UIView —> CALayer
//AVPlayer —> layer —> AVPlayerLayer.player
//UIView
@implementation ViewController
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.NSString *path = [[NSBundle mainBundle] pathForResource:@”3” ofType:@”mp4”];
//
self.item = [[AVPlayerItem alloc] initWithURL:[NSURL fileURLWithPath:path]];self.player = [[AVPlayer alloc] initWithPlayerItem:self.item];
TQPlayView *playView = [[TQPlayView alloc] initWithFrame:self.view.bounds];
//CALayer
((AVPlayerLayer *)playView.layer).player = self.player;
[self.view addSubview:playView];
[self.view sendSubviewToBack:playView];//
[self.item addObserver:self forKeyPath:@”status” options:NSKeyValueObservingOptionNew context:nil];
}
-(void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context
{
AVPlayerItemStatus s = [change[NSKeyValueChangeNewKey] integerValue];
if(s == AVPlayerItemStatusReadyToPlay)
{
//总时间
//帧率 CMTime value 总帧数 timescale 每秒播放的帧数
self.proSlider.maximumValue = self.item.duration.value / self.item.duration.timescale;
self.time = self.item.duration;
//防止循环引用
__weak UISlider *slider = self.proSlider;
//添加一个定时 间隔时间 1
[self.player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) {
//time 当前的播放时间
slider.value = time.value / time.timescale;
}];
}
}
(void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}(IBAction)proChange:(UISlider *)sender {
//sender.value * timescale
[self.player seekToTime:CMTimeMake(sender.value * self.time.timescale, self.time.timescale)];
}(IBAction)start:(UIButton *)sender {
if(!sender.selected)
{
[self.player play];
}
else
{
[self.player pause];
}sender.selected = !sender.selected;
}
TQPlayView.m
import AVFoundation/AVFoundation.h
@implementation TQPlayView
//改变layer的类型 AVPlayerLayer
+(Class)layerClass
{
return [AVPlayerLayer class];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end