2012-04-01 178 views
2

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

- (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文件并将其导入到项目中。但这并不好,因为它使我的项目规模扩大了一倍。我想打电话给现有的文件,一个接一个地播放,没有中断。我希望我不会重复。 谢谢 - 安东尼

+0

将三个视频合并为一个并不会帮助您减小应用程序大小。如果您希望所有视频都以离线模式播放,您必须妥善处理应用程序大小。 – 2012-04-01 06:22:41

+0

您可以在tableView中显示这些视频,并播放相应的视频以选择它们。如果你想实现这一点,让我知道我实施了它.. – 2012-04-01 06:23:30

回答

2

在这种情况下,你将需要使用一些更高级的API像AVQueuePlayer替代基本MPMoviePlayerController 试图通过文档看这里第一http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html

+1

+1正确的答案。为了整理这一点:你当然可以使用MPMoviePlayerController来播放有点缺点的视频;该选项**将**导致小差距(预缓冲时间)。为了消除这个缺点,正确的选择是使用AVQueuePlayer。然而,这个选项有一个缺点,没有为你提供的用户界面,你将不得不自己设计和实现。 – Till 2012-04-01 21:33:51

+0

@Till你是绝对正确的,我也认为'AVQueuePlayer'是一种更好的方法,但预缓冲时间对本地文件来说可以忽略不计。 “AVQueuePlayer”的另一个缺点是支持有限(iOS 4.1及更高版本)! – tipycalFlow 2012-04-02 03:52:20

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),然后继续像以前公布。

+0

@Tipycalflow ......我想你让我走上正轨。然而,这些视频是我的项目的一部分,并没有使用URL调用。假设我的视频文件名为“carman1.m4v carman2.m4v和carman3.m4v”。这些文件在我的项目文件夹中并添加到我的项目中。你能否再次回答我的问题?所有这一切我都有点新鲜感。感谢您让我走上正确的道路。堆叠在流动是翻转'真棒!!!!!!! – 2012-04-01 14:15:03

+0

另外我应该说,我想要有选择单独播放视频。每个视频一个按钮,然后一个按钮是“全部播放”按钮,可以完成我原来提出的问题。谢谢 – 2012-04-01 14:19:06

+0

@AnthonyArtillondio编辑答案! – tipycalFlow 2012-04-02 03:14:12