博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MPMoviePlayerController播放视频
阅读量:6207 次
发布时间:2019-06-21

本文共 2718 字,大约阅读时间需要 9 分钟。

 

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

一般的步骤:

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

 

[cpp] 
  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] 
  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. 在适当的位置开始/停止监听播放状态事件。

 

[cpp] 
  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] 
  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];   

 

这样就ok了。

当然,自己在viewController里面对手势操作进行捕捉和处理肯定也是没问题的,不过我对这块儿还不是太熟悉,呵呵,当时就走了个捷径。

手势操作是ios的特色,也是改进产品用户体验的大趋势,以后我也得好好学学这一块的技术!!!

 

 
 

转载于:https://www.cnblogs.com/karling/p/5128461.html

你可能感兴趣的文章
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
高仿Instagram 页面效果android特效
查看>>
我的友情链接
查看>>
如何查找JSP页面中的错误
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
Google API设计指南-资源名称
查看>>
最全React技术栈技术资料汇总(收藏)
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
UML设计一个电影票务销售系统(四)
查看>>
AlphaGo Zero用它来调参?【高斯过程】到底有何过人之处?
查看>>
《Redis官方教程》Redis集群规范(二)
查看>>
Linux平台Oracle多个实例启动说明
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>