demo地址:https://github.com/xuaimian/AVPlayerViewController.git
看到網(wǎng)上很多都說稼跳,avplayer的layer沒有創(chuàng)建吃沪,所以無法加載頁面,估計(jì)是探路人一個(gè)人理解錯(cuò)了红淡,導(dǎo)致很多人理解錯(cuò)了吧降铸。其實(shí)不是這樣的,是avplayerviewcontroller沒有經(jīng)過viewdidappear 直接add桶蝎,導(dǎo)致avplayerviewcontroller的view 不能獲得frame的大小谅畅,導(dǎo)致我們感覺沒有add上去,其實(shí)只要設(shè)置一下view的frame就好了绍豁。
方法一:
注意點(diǎn):
1._controller要聲明成全局變量牙捉,不然無法控制播放敬飒。不聲明成全局變量,要想辦法retain一下无拗,比如英染,self addchildcontrollers.
2.addobserver的時(shí)候,不要傳object被饿,這時(shí)候傳遞的object是指的發(fā)送方搪搏,而不是參數(shù)。當(dāng)postnotification的對(duì)象與object不一致時(shí)论颅,是不會(huì)響應(yīng)通知方法的囱嫩。
_controller= [[AVPlayerViewController alloc]init];
AVPlayerItem *model =[[AVPlayerItem alloc]initWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"bhl912.mov" ofType:nil]]];
AVPlayer *player = [AVPlayer playerWithPlayerItem:model];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(playFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[_controller setPlayer:player];
_controller.view.frame = self.view.bounds;
_controller.videoGravity = AVLayerVideoGravityResizeAspect;
_controller.showsPlaybackControls = YES;
[self.view addSubview:_controller.view];
[_controller.player play];
方法二
- (void)playeVideo
{
MoviePlayerViewController* avPlayer = [[MoviePlayerViewController alloc] init];
[avPlayer setName:@"bhl912.mov"];
[self presentViewController:avPlayer animated:YES completion:nil];
}
#import@interface MoviePlayerViewController : AVPlayerViewController
@property(nonatomic,strong)NSString *name ;
@end
@implementation MoviePlayerViewController
-(void)setName:(NSString *)name
{
_name = name;
NSString *playString = [[NSBundle mainBundle] pathForResource:name ofType:nil];
//視頻播放的url
NSURL *playerURL = [NSURL fileURLWithPath:playString];
self.player = [[AVPlayer alloc] initWithURL:playerURL];
self.videoGravity = AVLayerVideoGravityResizeAspect;
}
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dismiss) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
// Do any additional setup after loading the view.
}
-(void)dismiss
{
[self dismissViewControllerAnimated:YES completion:nil];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
[self.player play];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)dealloc
{
[[NSNotificationCenter defaultCenter]removeObserver:self];
}