使用MPMoviePlayerController播放视频

本文介绍如何使用MPMoviePlayerController在iOS应用中实现视频播放功能,包括设置播放模式、监听播放状态变化及解决特定应用场景下的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用MPMoviePlayerController播放视频

分类: iPhone开发 17209人阅读 评论(4) 收藏 举报

MPMoviePlayerController播放视频

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

一般的步骤:

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

  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. }  
	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文档挨个儿试吧,总有一款适合你大笑!最后一步就是别忘了播放呗。

  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];  
	_moviePlayer.controlStyle = MPMovieControlStyleNone;  
	_moviePlayer.shouldAutoplay = YES;  
	_moviePlayer.repeatMode = MPMovieRepeatModeOne;
	[_moviePlayer setFullscreen:YES animated:YES];  
	_moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
        [_moviePlayer play];
  

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

  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:)    
  2.                                              name:MPMoviePlayerPlaybackDidFinishNotification    
  3.                                            object:_moviePlayer];   
    [[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就行了。

  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];   
    // 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的特色,也是改进产品用户体验的大趋势,以后我也得好好学学这一块的技术!!!

电影网址大全,吸取了以往各种导航网址程序的优点,最大程度的完善优化了各项功能和指标,采用谁对我站贡献大,我站也给予他宣传和展示的机会就越多的流量交换模式,只要您在本系统注册登记您的网址,然后在你网站做好我站连接或是挂上流量互换代码,每次您网站有用户访问到放置我站流量互换代码的站,那么你的网站将在最近入站以及你网站所在分类的第一位置!连接双方公正平等。 1.管理目录admin,管理员用户名19mt,密码19mtcom 2.修改数据库名19mtcom.asa修改成自己想要的名即可! 3.后台分类建议自己修改,要不大家的分类都相同影响百度收录。 ☆系统前台简介☆ 1.采用ASP+ACCESS架构,安全稳定,防注入功能; 2.新闻文章发布功能支持无限级分类,方便自由; 3.数据库经过防下载等安全处理,后台可超强命名,随意改动; 4.每来访一个IP,来访网站就会自动排到第一,当天来路不同,显示颜色也不同,鼓励点入; 5.前台统计数据调用,最新点入网站调用,未审核网站调用等; 6.申请加入电影网址大全的网站按最后点进的时间排序首页和分类显示链接; 7.分类以昨日点入时间为准,每晚十二点后生成静态; 8.每来访一个IP,就会自动排到第一,当天来路次数不同,显示颜色也不同:有1次即显示,10次即套蓝色,30次即套红色加粗; 9.首页白天3分钟,晚上5分钟自动更新一次,全站24小时手动更新一次; 10.站内搜索功能,方便用户找到自己想要的网址; 11.程序全面优化和升级,增强对搜索引擎的收录功能; 12.流量互换功能,最大程度互换流量。 ☆系统后台功能详细说明☆ ☆网站管理系统 1.网站基本信息,说明:里面设置,网站标题,LOGO,关键词,统计代码,版权信息! 2.图片广告管理,说明:网站所有图片广告修改的地方,在首页可以看到所有图片广告,其中ads09是在网址内页显示!其它的都在首页和分类页有位置显示! 3.顶部文字广告管理,说明:这里的文字,首页,特别推荐里面显,分类首页和分类页,记得,改后要在生成html管理里,生成一下首页! 4.添加商家文字广告,说明:这里的文字,首页,中间部分,广告,那里的文字,在图片广告下面,一行七个! 5.管理商家文字广告,说明:修改删除商家文字广告! 6.管理帐号设置,说明:管理员用户名,密码的修改! 9.客户留言管理,说明:留言本的回复,修改和删除! ☆网站分类管理 1.类别添加管理,说明:分类添加删除管理,这里说明一下添加时有首页显示,导航就显示在首页上面,添加时选酷站显示,就在首页下面酷站里调用! 2.类别删除管理,说明:删除不想要的分类! 3.类别修改管理,说明:分类修改里,有显示,[首][酷]就是上面说明的首页显示,和酷站显示! ☆网址管理系统 1.添加网址链接,说明:用于后台管理员手工添加网址 2.添加实用查询|管理实用查询,说明:添加后在首页实用工具里显示! 3.添加名站导航|管理名站导航,说明:添加后在首页名站导航里显示! 4.添加友情链接|管理友情链接,说明:添加后在首页下部友情链接里显示! 5.查看所有的网址,说明:包含站长加的和用户自己加的! 6.站长加入的网址,说明:站长加入的网址! 7.用户加入已审核,说明:用户提交的网址,并通过审核的,说明一下,本站有自动审核功能,开启关闭,在 网站管理系统-网站基本信息里设置! 8.用户加入未审核,说明:用户提交的网址没审的,也就是没有作上本站链接的,或是作上链接没有点击到本站的! 9.有来路入未审核,说明:一般用户认为,有来路就应当审核了,这个功能,是为了关闭自动审核而设计的,手工审核的不管有没有来路,都要站长审核的! 10.加入黑名单网站,说明:加入黑名单的网址,点击这个导航,进入后,可以删除,和取消黑名单! 11.总来路小于五次,说明:本设计用于客户作上本站链接,点入量过小,没有贡献的站,可以多选删除! 12.常用维护共三项,说明:(1)开通所有未审的,一般不用这个,如果想要提交的站就收录,可以点击这个功能!(2)删除重复的网站,有一些站长提交过了,又提交了多次或是用二级域名提交,这样可以删除重复的网站!(3)删除所有未审核的站点,(4)清空所有网址,这个点时要注意,点击了,所有网址就都没有了! 13.站内报错,说明:用户在网址详提交网址打不开的情况页点击的! 14.站内网站搜索,说明:可以按名称,按网址,按分类,按ID号进行搜索! ☆模版修改管理 首 页 模版修改 分类页模版修改 关于本站页模板 (这里建议会一些HTML知识的站长修改,如果不会不建议修改以免出错,修改时一定要备份) ☆生成html管理 生成分类页面 生成生成主页及其他页 重置统计数据 清除昨天点入数据 清除总点入数据 清除总点出数据 (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值