iPhone:按顺序自动播放视频
我在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文件并将其导入到项目中。但这并不好,因为它使我的项目规模扩大了一倍。我想打电话给现有的文件,一个接一个地播放,没有中断。我希望我不会重复。 谢谢 - 安东尼
在这种情况下,你将需要使用一些更高级的API像AVQueuePlayer
替代基本MPMoviePlayerController
试图通过文档看这里第一http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html
+1正确的答案。为了整理这一点:你当然可以使用MPMoviePlayerController来播放有点缺点的视频;该选项**将**导致小差距(预缓冲时间)。为了消除这个缺点,正确的选择是使用AVQueuePlayer。然而,这个选项有一个缺点,没有为你提供的用户界面,你将不得不自己设计和实现。 – Till 2012-04-01 21:33:51
@Till你是绝对正确的,我也认为'AVQueuePlayer'是一种更好的方法,但预缓冲时间对本地文件来说可以忽略不计。 “AVQueuePlayer”的另一个缺点是支持有限(iOS 4.1及更高版本)! – tipycalFlow 2012-04-02 03:52:20
您可以随时启动其他视频每当视频播放完毕。一种方法是设置自定义的方法被调用时创建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
),然后继续像以前公布。
@Tipycalflow ......我想你让我走上正轨。然而,这些视频是我的项目的一部分,并没有使用URL调用。假设我的视频文件名为“carman1.m4v carman2.m4v和carman3.m4v”。这些文件在我的项目文件夹中并添加到我的项目中。你能否再次回答我的问题?所有这一切我都有点新鲜感。感谢您让我走上正确的道路。堆叠在流动是翻转'真棒!!!!!!! – 2012-04-01 14:15:03
另外我应该说,我想要有选择单独播放视频。每个视频一个按钮,然后一个按钮是“全部播放”按钮,可以完成我原来提出的问题。谢谢 – 2012-04-01 14:19:06
@AnthonyArtillondio编辑答案! – tipycalFlow 2012-04-02 03:14:12
将三个视频合并为一个并不会帮助您减小应用程序大小。如果您希望所有视频都以离线模式播放,您必须妥善处理应用程序大小。 – 2012-04-01 06:22:41
您可以在tableView中显示这些视频,并播放相应的视频以选择它们。如果你想实现这一点,让我知道我实施了它.. – 2012-04-01 06:23:30