之前很少有时间看视频这块,赶在现在比较闲,从零开始拾起。
iOS 中关于视频播放框架已更新换代多次,先从最开始的走起。
iOS9之前,iOS播放视频文件一般使用MPMoviePlayerViewController 和 MPMoviePlayerController。
区别:
1、MPMoviePlayerViewController继承自
2、UIViewControllerMPMoviePlayerController继承NSObject。
3、MPMoviePlayerViewController里面包含了一个MPMoviePlayerController。
要想使用上述两者,首先要导入MediaPlayer.framework,包含 @import MediaPlayer;
MPMoviePlayerController从写的例子来看目前支持有些问题,不过还是记录一下:
#pragma mark - MPMoviePlayerController
- (void)createMPPlayerController:(NSString *)filePath {
//目前播放有问题
NSURL *movieURL = [NSURL fileURLWithPath:filePath];
MPMoviePlayerController *movewController =[[MPMoviePlayerController alloc] initWithContentURL:movieURL];
//准备播放
[movewController prepareToPlay];
// 这里是addSubView
[self.view addSubview:movewController.view];
//设置写在添加之后
[movewController.view setBackgroundColor:[UIColor clearColor]];
//自动播放
movewController.shouldAutoplay=YES;
//播放控件的样式
[movewController setControlStyle:MPMovieControlStyleDefault];
//全屏播放
[movewController setFullscreen:YES];
//播放视图frame
[movewController.view setFrame:self.view.bounds];
//这里注册相关操作的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:movewController]; //播放完后的通知
}
-(void)movieFinishedCallback:(NSNotification*)notify {
MPMoviePlayerController* player = [notify object];
[player stop];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[player.view removeFromSuperview];
}
MPMoviePlayerViewController 视频播放控制
#pragma mark - MPMoviePlayerViewController
- (void)createMPPlayerViewController:(NSString *)filePath {
MPMoviePlayerViewController *moviePlayer =[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:filePath]];
[moviePlayer.moviePlayer prepareToPlay];
[self presentViewController:moviePlayer animated:YES completion:nil];
//全屏显示
[moviePlayer.moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
//设置背景色
[moviePlayer.view setBackgroundColor:[UIColor clearColor]];
//设置frame
[moviePlayer.view setFrame:self.view.bounds];
//注册播放完毕通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieFinishedToCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:moviePlayer.moviePlayer];
//注册播放状态发生改变通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieStateChangeCallback:)
name:MPMoviePlayerPlaybackStateDidChangeNotification
object:moviePlayer.moviePlayer];
}
#pragma mark - MPMoviePlayerViewController NSNotificationCenter
-(void)movieStateChangeCallback:(NSNotification*)notify {
//点击播放器中的播放/ 暂停按钮响应的通知
MPMoviePlayerController* player = [notify object];
switch (player.playbackState) {
case MPMoviePlaybackStateStopped:
NSLog(@"MPMoviePlaybackStateStopped");
break;
case MPMoviePlaybackStatePlaying:
NSLog(@"MPMoviePlaybackStatePlaying");
break;
case MPMoviePlaybackStatePaused:
NSLog(@"MPMoviePlaybackStatePaused");
break;
case MPMoviePlaybackStateInterrupted:
NSLog(@"MPMoviePlaybackStateInterrupted");
break;
case MPMoviePlaybackStateSeekingForward:
NSLog(@"MPMoviePlaybackStateSeekingForward");
break;
case MPMoviePlaybackStateSeekingBackward:
NSLog(@"MPMoviePlaybackStateSeekingBackward");
break;
default:
break;
}
}
#pragma mark - 视频播放完毕
-(void)movieFinishedToCallback:(NSNotification*)notify{
MPMoviePlayerController* player = [notify object];
[player stop];
//视频播放完或者在presentMoviePlayerViewControllerAnimated下的Done按钮被点击响应的通知。
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self dismissMoviePlayerViewControllerAnimated];
}
总结:
MPMoviePlayerViewController播放的简单步骤
1、初始化
- (instancetype)initWithContentURL:(NSURL *)contentURL
2、把这个VC Present出来
- (void)presentMoviePlayerViewControllerAnimated:(MPMoviePlayerViewController *)moviePlayerViewController
3、播放完毕,把这个VC dismiss掉
- (void)dismissMoviePlayerViewControllerAnimated