Iphone MPMoviePlayerViewController无法播放mp4文件
我正在开发一个测试应用程序,它将从internet上运行mp4文件。 代码是:Iphone MPMoviePlayerViewController无法播放mp4文件,iphone,mp4,mpmovieplayer,Iphone,Mp4,Mpmovieplayer,我正在开发一个测试应用程序,它将从internet上运行mp4文件。 代码是: -(IBAction)playRemoteVideo { NSString *mp4File = @"http://archive.org/download/Pbtestfilemp4videotestmp4/video_test_512kb.mp4"; MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewContr
-(IBAction)playRemoteVideo
{
NSString *mp4File = @"http://archive.org/download/Pbtestfilemp4videotestmp4/video_test_512kb.mp4";
MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:mp4File]];
[self presentMoviePlayerViewControllerAnimated:playerController];
playerController.moviePlayer.movieSourceType=MPMovieSourceTypeStreaming;
[playerController.moviePlayer play];
[playerController release];
playerController=nil;
}
当我运行应用程序并播放视频时,播放器会尝试加载视频一段时间,但在控制台上出现此异常之后
2012-04-18 22:45:11.309 VideoPlayer[891:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An AVPlayerItem can occupy only one position in a player's queue at a time.'
*** First throw call stack:
(0x1df1052 0x1333d0a 0x27cfb31 0x27cbb2a 0x27e45cc 0x103b73 0xd4e6a 0x2ff2445 0x2ff44f0 0x1d28833 0x1d27db4 0x1d27ccb 0x16d8879 0x16d893e 0x24ea9b 0x1d12 0x1c85)
terminate called throwing an exception(gdb)
例如,如果我对m3u8文件执行相同的代码
http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8
我可以让视频运行,但同样的不适用于mp4文件
你知道我为什么会出现这个异常,我的代码有什么问题吗
我在Iphone模拟器上运行这个应用程序,我有XCode 4.2
顺致敬意,
Tugrul这样设置电影播放器的控制风格
[self.mPlayer.moviePlayer setControlStyle:MPMovieControlStyleDefault];
此外,本地文件设置了MPMovieSourceTypeFile,而不是MPMovieSourceTypeStreaming属性。这样设置电影播放器的控制样式
[self.mPlayer.moviePlayer setControlStyle:MPMovieControlStyleDefault];
此外,本地文件设置了MPMovieSourceTypeFile,而不是MPMovieSourceTypeStreaming属性。另一种可能发生这种情况的情况是,正如日志非常有用地告诉您的那样,当一个AVPlayerItem一次只能占据播放器队列中的一个位置时。基本上,当您试图让两个视频同时开始播放,或者甚至同时与两个视频/MPMoviePlayerController对象交互时 在我的应用程序中,我使用了两个MPMoviePlayerController,并不断地交换它们,为用户创造一种在不同视频之间无限移动和交换的错觉 到目前为止,这还不错,但我最近添加了一些事件的通知,这些事件会导致视频暂停并恢复。但是我没有意识到我的两个播放器对象同时在监听通知,因此我试图同时触发暂停或播放。这导致框架认为我试图同时播放多个视频,并抛出了此异常 我现在要做的就是确保在任何给定点上只有一个player对象在侦听通知。只是我的应用程序逻辑中的一个小调整
因此,如果你遇到了一个奇怪的错误,那么它不一定是有问题的框架,也不一定是一个恶意的操作系统,它会让你的生活陷入地狱,或者是天灾。它可能只是纯粹的、好的、老式的、糟糕的代码 另一个可能发生这种情况的场景是,正如日志非常有用地告诉您的那样,当一个AVPlayerItem一次只能占据玩家队列中的一个位置时。基本上,当您试图让两个视频同时开始播放,或者甚至同时与两个视频/MPMoviePlayerController对象交互时 在我的应用程序中,我使用了两个MPMoviePlayerController,并不断地交换它们,为用户创造一种在不同视频之间无限移动和交换的错觉 到目前为止,这还不错,但我最近添加了一些事件的通知,这些事件会导致视频暂停并恢复。但是我没有意识到我的两个播放器对象同时在监听通知,因此我试图同时触发暂停或播放。这导致框架认为我试图同时播放多个视频,并抛出了此异常 我现在要做的就是确保在任何给定点上只有一个player对象在侦听通知。只是我的应用程序逻辑中的一个小调整
因此,如果你遇到了一个奇怪的错误,那么它不一定是有问题的框架,也不一定是一个恶意的操作系统,它会让你的生活陷入地狱,或者是天灾。它可能只是纯粹的、好的、老式的、糟糕的代码 我知道这个错误。请在此处尝试此代码
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: url];
self.movieController = player;
self.movieController.fullscreen = YES;
self.movieController.controlStyle = MPMovieControlStyleDefault;
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.movieController];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerDidExitFullscreenNotification
object:self.movieController];
[self.movieController prepareToPlay];
[self.movieController.view setFrame: self.view.bounds]; // player's frame must match parent's
[self.view addSubview: self.movieController.view];
// ...
[self.movieController play];
我知道这个错误。请在此处尝试此代码
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL: url];
self.movieController = player;
self.movieController.fullscreen = YES;
self.movieController.controlStyle = MPMovieControlStyleDefault;
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.movieController];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerDidExitFullscreenNotification
object:self.movieController];
[self.movieController prepareToPlay];
[self.movieController.view setFrame: self.view.bounds]; // player's frame must match parent's
[self.view addSubview: self.movieController.view];
// ...
[self.movieController play];
我不能使用这种方法。控件需要自定义-这是绝对必须的。如果不使用这样的技巧,这个bug是无法修复的吗?显然,这是一个框架问题,但难道没有其他办法吗?抱歉,如果我听起来很勉强,但我只是对我为这个问题寻找解决方案的所有搜索感到完全失望。我很抱歉@DevKanchen,但是MPMovieFramework在定制方面也有点勉强。我相信还有其他选择…对。谢谢我也意识到我在寻找答案时是仓促行事。我将添加我面临的问题和解决方案,作为一个答案,以便搜索此问题的人能够获得更多的错误背景为什么不打开另一个问题,并引用对你没有帮助的问题?我一开始确实想到了这一点,但现在我知道了问题所在,我不完全确定我的答案是否有意义,作为一个整体回复AVPlayerItem错误或此处的现有线程。现在,考虑到这是我在用尽了大多数其他选择后的收获,我刚刚在这里发布了我的答案。我不能使用这种方法。控件需要自定义-这是绝对必须的。如果不使用这样的技巧,这个bug是无法修复的吗?显然,这是一个框架问题,但是否没有其他的w
是吗?抱歉,如果我听起来很勉强,但我只是对我为这个问题寻找解决方案的所有搜索感到完全失望。我很抱歉@DevKanchen,但是MPMovieFramework在定制方面也有点勉强。我相信还有其他选择…对。谢谢我也意识到我在寻找答案时是仓促行事。我将添加我面临的问题和解决方案,作为一个答案,以便搜索此问题的人能够获得更多的错误背景为什么不打开另一个问题,并引用对你没有帮助的问题?我一开始确实想到了这一点,但现在我知道了问题所在,我不完全确定我的答案是否有意义,作为一个整体回复AVPlayerItem错误或此处的现有线程。现在,考虑到这是我在用尽了大多数其他选择后得到的结果,我刚刚在这里发布了我的答案。