MPMoviePlayerController播放视频
基本的视频播放,应该都是用MPMoviePlayerController吧,SDK文档里给出的例子也是这样的。小程序
通常的步骤:缓存
1. 准备好视频路径,建立MPMoviePlayerController,即便是本地视频文件,也要生成NSURL路径。网络
[cpp] view plain copyapp
- 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];
- }
2. MPMoviePlayerController各类设置,拉伸、控制模式、循环模式、自动播放等等,本身看着API文档挨个儿试吧,总有一款适合你
!最后一步就是别忘了播放呗。测试
[cpp] view plain copyurl
- _moviePlayer.controlStyle = MPMovieControlStyleNone;
- _moviePlayer.shouldAutoplay = YES;
- _moviePlayer.repeatMode = MPMovieRepeatModeOne;
- [_moviePlayer setFullscreen:YES animated:YES];
- _moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
- [_moviePlayer play];
3. 在适当的位置开始/中止监听播放状态事件。spa
[cpp] view plain copy.net
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)
- name:MPMoviePlayerPlaybackDidFinishNotification
- object:_moviePlayer];
监听视频播放完成的事件,播放完成将执行moviePlayBackDidFinish方法,在该方法中执行本身想要的操做。调试
由于我以前设置了循环播放、并且控制模式也是不可控制,所以播放器上是不会有“完成”按钮的。也就不会正常的经过完成播放来进入这个方法。视频
相似的,还能够监听MPMoviePlayerPlaybackStateDidChangeNotification等不少关于播放期间状态改变的事件,能够根据本身的须要去选择。
别忘了不须要时,记得removeObserver。
至此,简单的播放本地视频文件的操做就完成了,我尚未尝试过播放网络视频,不过应该也是一样的道理。这只是最基本的操做,若是深刻使用应该还会涉及缓存处理、下载处理、播放控制等不少方面的细节技术,若是之后有机会作视频、音频方面的应用,再好好研究一下吧。
改进应用
以前给别人作了一个展会播放视频的小程序,就是用了上面的代码,结果遇到点儿小问题。
由于是展会播放视频,因此不容许用户控制,就放在那儿重复重复再重复 的播放,可是测试最后忽然发现个问题,虽然播放器上没有“完成”按钮了,可是仍是能对手势操做进行响应的,在播放器上“两指捏合”,播放器就退出了,并且 调试发现退出以前也不会走到moviePlayBackDidFinish方法里,呃!!!应该是在本身的viewcontroller里没有对手势操做 行处理。这可咋办呢?
后来在sdk里发现了系统提供的MPMoviePlayerViewController类!!!太好了!!
代码改为:
1. new一个MPMoviePlayerViewController对象,将其view添加到咱们本身的viewcontroller里面;
2. 不须要本身建立MPMoviePlayerController,使用MPMoviePlayerViewController里面的MPMoviePlayerController执行实际的播放操做;
3. 监听的对象改为2中所述的MPMoviePlayerController就好了。
[cpp] view plain copy
- // 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];