Objective c MPMoviePlayerController不加载滚动库中的第一个视频
我正在开发iOSSDK4.3。 我有一个水平滚动页面的图库,可以显示来自远程提要的图像或视频。对于分页视图,我使用的是公开的ATPagingView:页面的重用与TableViewCells类似。但对于视频,我使用的是一个MPMoviePlayerController,我将其.view属性作为子视图分配给多个页面(我知道,我知道…): 您可以看到我已经注册了MoviePlayer事件加载状态通知。 当屏幕上出现新页面时,如果需要,我会开始加载视频:Objective c MPMoviePlayerController不加载滚动库中的第一个视频,objective-c,ios,video,Objective C,Ios,Video,我正在开发iOSSDK4.3。 我有一个水平滚动页面的图库,可以显示来自远程提要的图像或视频。对于分页视图,我使用的是公开的ATPagingView:页面的重用与TableViewCells类似。但对于视频,我使用的是一个MPMoviePlayerController,我将其.view属性作为子视图分配给多个页面(我知道,我知道…): 您可以看到我已经注册了MoviePlayer事件加载状态通知。 当屏幕上出现新页面时,如果需要,我会开始加载视频: - (void)currentPageDidC
- (void)currentPageDidChangeInPagingView:(ATPagingView *)pagingView
{
if (pagingView.currentPageIndex < 0)
return;
NSLog(@"currentPageDidChangeInPagingView");
GalleryPageView *currentPage = (GalleryPageView *)[pagingView viewForPageAtIndex:pagingView.currentPageIndex];
if (![currentPage.gestureRecognizers count]) {
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resetZoom)];
recognizer.numberOfTapsRequired = 2;
[currentPage.zoomView addGestureRecognizer:recognizer];
recognizer.delegate = self;
[recognizer release];
}
moviePlayButton.hidden = YES;
[activityView stopAnimating];
FeedItem *feedItem = (FeedItem *)[dataRoot objectAtIndex:pagingView.currentPageIndex];
if (feedItem.contentType == FeedContentTypeMovie) {
moviePlayerController.contentURL = [NSURL URLWithString:feedItem.movieUrl];
[moviePlayerController prepareToPlay];
[activityView startAnimating];
}
-(void)currentPageDidChangeInPagingView:(ATPagingView*)pagingView
{
如果(pagingView.currentPageIndex<0)
返回;
NSLog(@“currentPageDidChangeInPagingView”);
GalleryPageView*当前页面=(GalleryPageView*)[pagingView视图用于页面索引:pagingView.currentPageIndex];
如果(![currentPage.GestureRecognitors count]){
UITapGestureRecognizer*识别器=[[UITapGestureRecognizer alloc]initWithTarget:自操作:@selector(resetZoom)];
recognizer.numberOfTapsRequired=2;
[currentPage.zoomView AddgestureRecognitor:识别器];
recognizer.delegate=self;
[识别器释放];
}
moviePlayButton.hidden=是;
[活动视图停止动画制作];
FeedItem*FeedItem=(FeedItem*)[dataRoot对象索引:pagingView.currentPageIndex];
如果(feedItem.contentType==FeedContentTypeMovie){
moviePlayerController.contentURL=[NSURL URLWithString:feedItem.movieUrl];
[电影播放控制器准备播放];
[activityView startAnimating];
}
现在,如果第一个页面包含视频,即使在我调用moviePlayerController.prepareToPlay之后,它也不会加载:不会触发loadState事件。下面的页面会按预期工作。
我尝试在MPlayerController初始化时预加载固定视频,但在这种情况下,固定视频已正确加载(MPMovieLoadState==3),而第一页上的视频会导致更改为MPMovieLoadStateUnknown
电影URL是正确的。
当我从第2页向后滚动到第1页时,第一个视频被加载(MPMovieLoadState==3),但它不显示
你建议调查什么?共享视图架构真的很可怕吗?毕竟,它适用于以下页面。prepareToPlay是否有任何已知的怪异行为?例如,如果视图被“虐待”,MPC是否可能生气由任何人,然后它拒绝加载的东西?否则你会如何解释MPMovieLoadStateUnknown?我很确定没有其他鬼的MPC实例乱来(我读过它可能是一个问题)
感谢您并为这篇冗长的帖子感到抱歉。我不得不使用AVPlayer,因为我的代码中与此非常相似。我不得不使用AVPlayer,因为我的代码中与此非常相似。我也有同样的问题。在iOS 7中,这不会发生,但在iOS 6中,loadState是3,这在:
enum {
MPMovieLoadStateUnknown = 0,
MPMovieLoadStatePlayable = 1 << 0,
MPMovieLoadStatePlaythroughOK = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
MPMovieLoadStateStalled = 1 << 2, // Playback will be automatically paused in this state, if started
};
typedef NSInteger MPMovieLoadState;
可能在iOS6中,loadState是一个可以同时包含多个状态的按位值。我也有同样的问题。在iOS7中,这不会发生,但在iOS6中,loadState是3,这在以下内容中没有考虑:
enum {
MPMovieLoadStateUnknown = 0,
MPMovieLoadStatePlayable = 1 << 0,
MPMovieLoadStatePlaythroughOK = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
MPMovieLoadStateStalled = 1 << 2, // Playback will be automatically paused in this state, if started
};
typedef NSInteger MPMovieLoadState;
可能在iOS6中,loadState是一个可以同时包含多个状态的按位值。现在没有时间这样做,但肯定值得一试。我必须更改通知模型以符合键值。注意:现在没有时间这样做,但肯定值得一试。我必须更改通知模型以符合键值-观察:
if (self.moviePlayerC.loadState & MPMovieLoadStatePlayable || self.moviePlayerC.loadState & MPMovieLoadStatePlaythroughOK)