蘋果提供的源生視頻播放器是非常強(qiáng)大的,功能都很齊全,基本都能滿足平時的開發(fā)需求。
首先介紹一下在iOS9.0以后已經(jīng)被廢棄掉的類:MPMoviePlayerViewController和MPMoviePlayerController. 前者是一個view,后者是個Controller。區(qū)別就是MPMoviePlayerViewController不需要自定義視圖的大小和位置,可以直接彈出播放控制器,而MPMoviePlayerController需要設(shè)置自己視圖的大小和位置,并把它添加到父視圖上。
MPMoviePlayerController介紹和簡單使用:支持MOV、MP4、M4V、3GP等常用格式的視頻,它可以進(jìn)行播放、暫停、停止、全屏的操作,使用簡單方便。
代碼:// 加載網(wǎng)絡(luò)資源
NSString *urlString = [@"http://baobab.wdjcdn.com/14676170652191(23).mp4" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
//創(chuàng)建控制器
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
CGRect frame = CGRectMake(0, 80, self.view.bounds.size.width, self.view.bounds.size.height * 0.5);
player.view.frame = frame;
//設(shè)置播放器的控制面板風(fēng)格,可以根據(jù)需要自行設(shè)置
//? ? player.controlStyle = MPMovieControlStyleFullscreen;
// 縮放模式
player.scalingMode = MPMovieScalingModeAspectFill;
[self.view addSubview:player.view];
// 必須強(qiáng)引用不然會自然釋放,無法播放文件
self.player = player;
// 提前加載資源
[player prepareToPlay];
如果想要實現(xiàn)橫屏的話,添加一個按鈕實現(xiàn)以下方法:
//在動畫中改變視圖的位置
[UIView animateWithDuration:0.3 animations:^{
//旋轉(zhuǎn)
self.player.view.transform = CGAffineTransformRotate(self.player.view.transform, M_PI_2);
//全屏
self.player.view.frame = [UIScreen mainScreen].bounds;
}];
該類其他屬性介紹,推薦大家看一篇文章,里面有非常詳細(xì)的介紹:鏈接
MPMoviePlayerViewController的介紹和簡單使用:它的使用更加簡單,只需要幾步就能集成上去,但為了讓大家了解更加全面,向大家介紹一下,通過系統(tǒng)通知來控制播放器功能的簡單實現(xiàn)。
代碼://設(shè)置資源文件路徑 //可以播放網(wǎng)絡(luò)資源,
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"minion_01.mp4" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:filePath];
// 添加播放器
MPMoviePlayerViewController *VC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[self.navigationController presentViewController:VC animated:YES completion:nil];
//添加全局屬性
self.playerVC= VC;
添加通知:
//添加通知監(jiān)聽播放器的動作
//監(jiān)聽播放器狀態(tài)改變
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidChangeAction) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
//監(jiān)聽通知播放結(jié)束
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidFinishAction) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
//監(jiān)聽視頻加載狀態(tài)改變
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChangeAction) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];
實現(xiàn)通知方法:
//播放器狀態(tài)改變事件會監(jiān)聽播放器所有的狀態(tài)變化
- (void)movieDidChangeAction
{
NSLog(@"播放器事件改變");
switch (self.playerVC.moviePlayer.playbackState) {
? ? ? ? ? ? ? ? ?case MPMoviePlaybackStatePlaying:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"正在播放");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case MPMoviePlaybackStatePaused:
? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"暫停播放");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case MPMoviePlaybackStateStopped:
? ? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"停止播放");
? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? case MPMoviePlaybackStateInterrupted:
? ? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"播放中斷");
? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ?case MPMoviePlaybackStateSeekingForward:
? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"向前");
? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ?case MPMoviePlaybackStateSeekingBackward:
? ? ? ? ? ? ? ? ? ? ? NSLog(@"向后");
? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ?break;
}
}
- (void)movieDidFinishAction{
? ?NSLog(@"視頻播放完畢"); ?
}
- (void)loadStateDidChangeAction{
if (self.playerVC.moviePlayer.loadState == MPMovieLoadStateUnknown) {
NSLog(@"播放下個視頻");
}
}
注意:不要忘記移除通知!
//移除通知
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
提供iOS四種源生視頻播放器框架比較(二)的鏈接:點擊跳轉(zhuǎn)