我在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文件并将其导入项目。但这并不好,因为它使我的项目规模翻了一番。我想呼吁现有的文件一个接一个地播放,没有休息。我希望我听起来不重复。 谢谢 - 安东尼
答案 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
),然后继续之前发布。