PlayerView
首先,导入系统库 AVFoundation.framework 、 CoreMedia.framework
然后,创建PlayerView类
PlayerView.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface PlayerView :UIView
//把播放器(AVPlayer)和view(PlayerView)进行关联
-(void)setPlayer:(AVPlayer *)player;
@end
PlayerView.m
#import "PlayerView.h"
@implementation PlayerView
/*
UIView *view = [[PlayerView alloc]init];
view.layer
*/
+(Class)layerClass
{
//AVPlayerLayer这个layer是可以播放视频的
return [AVPlayerLayerclass];
}
-(void)setPlayer:(AVPlayer *)player
{
AVPlayerLayer *layer = (AVPlayerLayer *)self.layer;
[layersetPlayer:player];
}
@end
在主界面ViewController.m中
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "PlayerView.h"
@interfaceViewController ()
{
PlayerView *_playerView;
UISlider *_proSlider;
AVPlayer *_player;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
//屏幕
_playerView = [[PlayerViewalloc] initWithFrame:CGRectMake(0,20, 320, 240)];
[self.viewaddSubview:_playerView];
//进度条
_proSlider = [[UISlideralloc] initWithFrame:CGRectMake(50,280, 220, 20)];
[_proSlideraddTarget:selfaction:@selector(setprogress:)forControlEvents:UIControlEventValueChanged];
[_proSlideraddTarget:selfaction:@selector(setPause)forControlEvents:UIControlEventTouchDown];
[_proSlideraddTarget:selfaction:@selector(setPlay)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:_proSlider];
//播放
UIButton *playerButton = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
playerButton.frame =CGRectMake(100,320, 120, 40);
[playerButton setTitle:@"play"forState:UIControlStateNormal];
[playerButton addTarget:selfaction:@selector(play)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:playerButton];
//暂停
UIButton *pauseButton = [UIButtonbuttonWithType:UIButtonTypeRoundedRect];
pauseButton.frame =CGRectMake(100,370, 120, 40);
[pauseButton setTitle:@"pause"forState:UIControlStateNormal];
[pauseButton addTarget:selfaction:@selector(pause)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:pauseButton];
//播放地址
NSString *path = [[NSBundlemainBundle] pathForResource:@"test1"ofType:@"mp4"];
//AVAudioPlayer → url
//AVPlayer → AVPlayerItem → AVURLAssert → url
NSURL *url = [NSURLfileURLWithPath:path];
//url资源类
AVURLAsset *asset = [AVURLAssetassetWithURL:url];
//异步读取信息
[asset loadValuesAsynchronouslyForKeys:@[@"tracks"]completionHandler:^{
//播放项
AVPlayerItem *playerItem = [AVPlayerItemplayerItemWithAsset:asset];
//播放器
_player = [[AVPlayeralloc] initWithPlayerItem:playerItem];
//播放器和屏幕关联起来
[_playerViewsetPlayer:_player];
NSLog(@"准备完成");
__weak AVPlayer *player =_player;
__weak UISlider *slider =_proSlider;
//更新进度 帧数 帧率
[_playeraddPeriodicTimeObserverForInterval:CMTimeMake(1,1) queue:dispatch_get_main_queue()usingBlock:^(CMTime time) {
//当前时间
CMTime currentTime = player.currentItem.currentTime;
//总时间
CMTime duration = player.currentItem.duration;
//设置进度 当前时间/总时间
float pro = CMTimeGetSeconds(currentTime)/CMTimeGetSeconds(duration);
[slidersetValue:pro animated:YES];
}];
}];
//
}
//设置进度条
-(void)setprogress:(UISlider *)slider
{
//总时间
CMTime duration =_player.currentItem.duration;
//当前时间
CMTime currentTime = CMTimeMultiplyByFloat64(duration, slider.value);
//从当前时间播放
[_playerseekToTime:currentTime];
}
//播放
-(void)play
{
[_playerplay];
}
//暂停
-(void)pause
{
[_playerpause];
}
-(void)setPause
{
[_playerpause];
}
-(void)setPlay
{
[_playerplay];
}