使用MPMoviePlayerController播放视频

MPMoviePlayerController播放视频

基本的视频播放,应该都是用MPMoviePlayerController吧,SDK文档里给出的例子也是这样的。小程序

通常的步骤:缓存

1. 准备好视频路径,建立MPMoviePlayerController,即便是本地视频文件,也要生成NSURL路径。网络

 

[cpp] view plain copyapp

 

 

  1. NSString *file = [[NSBundle mainBundle] pathForResource:@"test_movie" ofType:@"mp4"];  
  2. NSURL *url = [NSURL fileURLWithPath:file];  
  3. if (_moviePlayer == nil) {  
  4.     _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];  
  5. }else {  
  6.     [_moviePlayer setContentURL:url];  
  7. }  

 

 

2. MPMoviePlayerController各类设置,拉伸、控制模式、循环模式、自动播放等等,本身看着API文档挨个儿试吧,总有一款适合你大笑!最后一步就是别忘了播放呗。测试

 

[cpp] view plain copyurl

 

 

  1. _moviePlayer.controlStyle = MPMovieControlStyleNone;    
  2. _moviePlayer.shouldAutoplay = YES;    
  3. _moviePlayer.repeatMode = MPMovieRepeatModeOne;  
  4. [_moviePlayer setFullscreen:YES animated:YES];    
  5. _moviePlayer.scalingMode = MPMovieScalingModeAspectFit;  
  6.        [_moviePlayer play];  

  

 

3. 在适当的位置开始/中止监听播放状态事件。spa

 

[cpp] view plain copy.net

 

 

  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)    
  2.                                              name:MPMoviePlayerPlaybackDidFinishNotification    
  3.                                            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

 

  1.    // create MPMoviePlayerViewController  
  2.    MPMoviePlayerViewController *playerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];    
  3.    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)    
  4.                                                 name:MPMoviePlayerPlaybackDidFinishNotification    
  5.                                               object:[playerViewController moviePlayer]];    
  6.    // add to view  
  7.    [self.view addSubview:playerViewController.view];   
  8.   
  9.    // play movie   
  10.    MPMoviePlayerController *player = [playerViewController moviePlayer];    
  11. player.controlStyle = MPMovieControlStyleNone;    
  12. player.shouldAutoplay = YES;    
  13. player.repeatMode = MPMovieRepeatModeOne;  
  14. [player setFullscreen:YES animated:YES];    
  15. player.scalingMode = MPMovieScalingModeAspectFit;  
  16.    [player play];   
相关文章
相关标签/搜索