2012-04-17 89 views
2

*我创建一个iPhone应用程序,我们可以看视频... 我,一直在做我自己控制,所以我想实现下一个,后退按钮,我可以告诉主题所以对于UI一切ok了问题是用另一个内容重新启动MoviePlayer ... 任何想法???如何在同一个MPMoviePlayerController中播放另一个视频?

我可以使用相同的配置,当播放没有结束,我的意思是......如果视频播放结束,开始播放另一... 我试图设置的contentURL但trows一个例外:

2012-04-17 11:37:41.198 NexTest2[8218:11f03] *** Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [nan 11.5]' 

viewController.m

- (void)viewDidLoad{ 
[super viewDidLoad];  
fileURL = [NSURL URLWithString:urlString]; 
moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL]; 
moviePlayerController.controlStyle = MPMovieControlStyleNone; 
[moviePlayerController setShouldAutoplay:YES]; 
[self addObservers]; 

/* Inset the movie frame in the parent view frame. */ 
CGRect viewInsetRect = CGRectInset ([self.view bounds],0.0, 0.0); 
[[moviePlayerController view] setFrame: viewInsetRect ]; 
[self.view addSubview:moviePlayerController.view]; 
[self resizeControlViews]; 
} 

然后在resizeControlViews我有这样的,因为我使用像控制这两种观点:

-(void)resizeControlViews{ 
CGRect barFrame = self.controlBarView.frame; 
barFrame.origin.x = round((moviePlayerController.view.frame.size.width - barFrame.size.width)/2.0); 
barFrame.origin.y = round((moviePlayerController.view.frame.size.height - barFrame.size.height)/10.0); 
self.controlBarView.frame = barFrame; 
[moviePlayerController.view addSubview:controlBarView]; 
CGRect playFrame = self.controlPlaybackView.frame; 
playFrame.origin.x = round((moviePlayerController.view.frame.size.width - playFrame.size.width)/2.0); 
playFrame.origin.y = round((moviePlayerController.view.frame.size.height - playFrame.size.height)/1.1); 
self.controlPlaybackView.frame = playFrame; 
[moviePlayerController.view addSubview:controlPlaybackView]; 
} 

这里一切正常,在其中一个视图存在谁控制了寻求一个滑块,而在另外一个是玩,旁边和背部的按钮。 我想也许问题丝毫的这些观点的UI组件......

我已经添加了这些观察员控制回放:当玩家正在玩我使用

//Add the observers to the player 
-(void)addObservers{ 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackStarted:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setDurationLabel:) name:MPMovieDurationAvailableNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil]; 

} 

因此处理MPMoviePlayerPlaybackStateDidChangeNotification此选择:

//called when the playback state changes of state 
- (void)playbackStarted:(NSNotification*)notification { 
MPMoviePlayerController *player = notification.object; 
if (player.playbackState == MPMoviePlaybackStatePlaying) { 
    [self timerRunning]; 
} 
} 

,如果该玩家被“打”我用这种方法进行监控:

-(void)timerRunning{ 
self.currentTime.text = [self floatToStringTime:(moviePlayerController.currentPlaybackTime)]; 
self.timeBar.value = moviePlayerController.currentPlaybackTime/moviePlayerController.duration; 

if (moviePlayerController.playbackState == MPMoviePlaybackStatePlaying) { 
    [self performSelector:@selector(timerRunning) withObject:nil afterDelay:0.5]; 
}   
} 

所以也许这里的问题...但单个视频它完美...

我已经4,其中的错误是...是我,而在设置行正在监控值滑块,但我真的不知道为什么,我觉得这是因为当它仍然是执行另一个视频或视频回采所以玩家没有时间或者当前播放什么trows此异常......我怎么能解决它...这是错误...也许将此代码移动到另一部分...

self.timeBar.value = moviePlayerController.currentPlaybackTime/moviePlayerController.duration; 
+1

能否请您添加代码。通常再次使用电影播放器​​,您需要释放该播放器,然后添加新内容。 – DivineDesert 2012-04-17 10:31:29

+0

@DimplePanchal你需要释放玩家才能重复使用它是不正确的。只需设置contentUrl就足够了。 – Till 2012-04-17 11:33:11

+0

@Till雅,我也发现事,但只设置movieplayer通常创建iPhone SDK的一个不可捕获崩溃的contentURL。我不知道背后的原因,但我观察到的情况就是这样。 – DivineDesert 2012-04-17 11:38:47

回答

1

检查您的UI相关的代码。在获取和使用与内容相关的属性之前,您很可能没有正确检查玩家状态。

+0

是的,它应该是那里的问题......但是当我[player stop]时;它显示了同样的例外......任何想法? – 2012-04-17 14:13:53

1

最后它工作正常... setCurrentContentUrl工作正常,问题是我的代码,所以我解决了它...我只是验证持续时间是不同的0 ... 现在我有一个完全自定义的球员控制:) :)凉爽

-(void)timerRunning{ 
    if (moviePlayerController.playbackState == MPMoviePlaybackStatePlaying) {  
     self.currentTime.text = [self floatToStringTime:(moviePlayerController.currentPlaybackTime)]; 
     if (moviePlayerController.duration != 0) { 
      self.timeBar.value = moviePlayerController.currentPlaybackTime/moviePlayerController.duration; 
     } 

    [self performSelector:@selector(timerRunning) withObject:nil afterDelay:0.5]; 
    }   
} 

谢谢反正

+0

保存我的一天,谢谢。 – limon 2013-01-03 12:49:54

相关问题