iPhone:一个接一个地按顺序自动播放视频

时间:2012-04-01 06:12:08

标签: iphone xcode ipad mpmovieplayercontroller ipod

我在Xcode 4.3.2中构建了一个非常基本的视频播放器应用程序 我有3个小视频,在我的主菜单上我有3个按钮。每个视频一个按钮 我的代码看起来像这样......

- (IBAction)playMoviePressed1:(id)sender 
{

NSString *path = [[NSBundle mainBundle]
                  pathForResource:@"HomeVideoOne" ofType:@"m4v"];

player = [[MPMoviePlayerViewController alloc]
          initWithContentURL:[NSURL fileURLWithPath:path]];

[self presentMoviePlayerViewControllerAnimated:player];
}

它重复了视频2和3.我想有一个第4个按钮按顺序播放所有3个视频而不停止并且必须选择下一个。这几乎就像一次只能在电影中播放章节一样。

这是踢球者,我不想让任何额外的视频文件添加到项目大小。换句话说,到目前为止我能够完成目标的唯一方法是将所有3个视频编辑成一个.m4v文件并将其导入项目。但这并不好,因为它使我的项目规模翻了一番。我想呼吁现有的文件一个接一个地播放,没有休息。我希望我听起来不重复。 谢谢 - 安东尼

2 个答案:

答案 0 :(得分:2)

在这种情况下,您需要使用一些更高级的API,例如AVQueuePlayer而不是基本MPMoviePlayerController 请先在此处查看文档http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html

答案 1 :(得分:0)

只要视频播放完毕,您就可以随时启动另一个视频。一种方法是设置自定义方法,以便在创建youMoviePlayerController时控制行为:

[[NSNotificationCenter defaultCenter] addObserver:self 
               selector:@selector(aMoviePlaybackComplete:)
                   name:MPMoviePlayerPlaybackDidFinishNotification
                 object:youMoviePlayerController];

然后:

- (void)aMoviePlaybackComplete:(NSNotification*)notification
{
  MPMoviePlayerController *moviePlayerController = [notification object];
  if(urlIndex < yourUrlArray.count){
     NSUrl* myUrl = [yourUrlArray objectAtIndex:urlIndex];
     [moviePlayerController setContentURL:myUrl];
     [moviePlayerController play];
     urlIndex++;
  }
  else{
     [[NSNotificationCenter defaultCenter] removeObserver:self
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:moviePlayerController];

     [moviePlayerController.view removeFromSuperview];
     [moviePlayerController release];
  }
}

我假设yourUrlArray是您要播放的电影网址的预定义数组,而urlIndex则会保留当前正在播放的电影的数量。当然,你必须根据自己的需要调整它。

编辑 - 对于本地文件,您可以使用NSUrl形成bundle

NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"];
NSUrl* url = [NSURL fileURLWithPath:moviePath];
[yourUrlArray addObject:url];

并初始化url数组(yourUrlArray),然后继续之前发布。