MPMoviePlayerController播放视频步骤:
- 准备好视频路径,创建MPMoviePlayerController,即使是本地视频文件,也要生成NSURL路径。
NSString *file = [[NSBundle mainBundle] pathForResource:@"test_movie" ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:file];
if (_moviePlayer == nil) {
_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];
}else {
[_moviePlayer setContentURL:url];
}
- MPMoviePlayerController各种设置,拉伸、控制模式、循环模式、自动播放等等,自己看着API文档挨个儿试吧,总有一款适合你,最后一步就是别忘了播放呗。
_moviePlayer.controlStyle = MPMovieControlStyleNone;
_moviePlayer.shouldAutoplay = YES;
_moviePlayer.repeatMode = MPMovieRepeatModeOne;
[_moviePlayer setFullscreen:YES animated:YES];
_moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
[_moviePlayer play];
- 在适当的位置开始/停止监听播放状态事件。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:_moviePlayer];
监听视频播放完成的事件,播放完成将执行moviePlayBackDidFinish方法,在该方法中执行自己想要的操作。
因为我之前设置了循环播放、而且控制模式也是不可控制,因此播放器上是不会有“完成”按钮的。也就不会正常的通过完成播放来进入这个方法。
类似的,还可以监听MPMoviePlayerPlaybackStateDidChangeNotification等很多关于播放期间状态改变的事件,可以根据自己的需要去选择。
别忘了不需要时,记得removeObserver。
改进应用
代码改成:
-
new一个MPMoviePlayerViewController对象,将其view添加到我们自己的viewcontroller里面;
-
不需要自己创建MPMoviePlayerController,使用MPMoviePlayerViewController里面的MPMoviePlayerController执行实际的播放操作;
-
监听的对象改成2中所述的MPMoviePlayerController就行了。
// create MPMoviePlayerViewController
MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:[playerViewController moviePlayer]];
// add to view
[self.view addSubview:playerViewController.view];
// play movie
MPMoviePlayerController *player = [playerViewController moviePlayer];
player.controlStyle = MPMovieControlStyleNone;
player.shouldAutoplay = YES;
player.repeatMode = MPMovieRepeatModeOne;
[player setFullscreen:YES animated:YES];
player.scalingMode = MPMovieScalingModeAspectFit;
[player play];
这样就ok了。
当然,自己在viewController里面对手势操作进行捕捉和处理肯定也是没问题的,不过我对这块儿还不是太熟悉,呵呵,当时就走了个捷径。
手势操作是iOS的特色,也是改进产品用户体验的大趋势,以后我也得好好学学这一块的技术!!!
网友评论