2014-10-12 65 views
0

我有一个URL扩展数组。目标是分段的:迭代视频数组iOS

  1. 将扩展名添加到基本URL以创建特定视频的URL。使用YTViewExtractor在MPMovieViewController

  2. 播放视频。

  3. 重复用于在阵列下一URL扩展时MPMovieFinishReasonPlaybackEnded = TRUE或当下次按钮被按下

这是迄今我的工作:

int i; 
for (i=0; i < [_uriToBeAppended count]; i++) 
{ 

    NSString *uriString = [_uriToBeAppended objectAtIndex:i]; 
    NSString *urlString = [NSString stringWithFormat:@"http://vimeo.com/%@", uriString]; 

    NSLog(@"URL String: %@", urlString); 

    [YTVimeoExtractor fetchVideoURLFromURL:urlString 
            quality:YTVimeoVideoQualityMedium 
         completionHandler:^(NSURL *videoURL, NSError *error, YTVimeoVideoQuality quality) { 
          if (error) { 
           // handle error 
           NSLog(@"Video URL: %@", [videoURL absoluteString]); 
          } else { 
           // run player 
           self.moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL]; 
           [self.moviePlayer.moviePlayer prepareToPlay]; 
           [self presentViewController:self.moviePlayer animated:YES completion:nil]; 
          } 
         }]; 
} 

日志:

2014-10-11 22:30:05.528 Voulette[668:162653] URL String: http://vimeo.com/96558506 
. 
. 
2014-10-11 22:30:05.577 Voulette[668:162653] URL String: http://vimeo.com/6615855 



2014-10-11 22:30:06.997 Voulette[668:162653] -[UIApplication beginIgnoringInteractionEvents] overflow. Ignoring. 
. 
. 
2014-10-11 22:30:09.700 Voulette[668:162653] -[UIApplication beginIgnoringInteractionEvents] overflow. Ignoring. 



2014-10-11 22:30:10.063 Voulette[668:162653] -[UIApplication endIgnoringInteractionEvents] called without matching -beginIgnoringInteractionEvents. Ignoring. 
. 
. 
2014-10-11 22:30:10.189 Voulette[668:162653] -[UIApplication endIgnoringInteractionEvents] called without matching -beginIgnoringInteractionEvents. Ignoring. 



2014-10-11 22:30:11.519 Voulette[668:162653] Warning: Attempt to present <MPMoviePlayerViewController: 0x1568fcd0> on <ViewController: 0x1554e3e0> whose view is not in the window hierarchy! 
. 
. 
2014-10-11 22:30:11.729 Voulette[668:162653] Warning: Attempt to present <MPMoviePlayerViewController: 0x16818810> on <ViewController: 0x1554e3e0> whose view is not in the window hierarchy! 



2014-10-11 22:30:11.739 Voulette[668:162653] -[UIApplication beginIgnoringInteractionEvents] overflow. Ignoring. 
2014-10-11 22:30:11.742 Voulette[668:162653] Warning: Attempt to present <MPMoviePlayerViewController: 0x1681d690> on <ViewController: 0x1554e3e0> whose view is not in the window hierarchy! 
. 
. 
2014-10-11 22:30:11.887 Voulette[668:162653] -[UIApplication beginIgnoringInteractionEvents] overflow. Ignoring. 
2014-10-11 22:30:11.903 Voulette[668:162653] Warning: Attempt to present <MPMoviePlayerViewController: 0x157b1e70> on <ViewController: 0x1554e3e0> whose view is not in the window hierarchy! 



2014-10-11 22:30:12.674 Voulette[668:162653] -[UIApplication endIgnoringInteractionEvents] called without matching -beginIgnoringInteractionEvents. Ignoring. 
. 
. 
2014-10-11 22:30:12.699 Voulette[668:162653] -[UIApplication endIgnoringInteractionEvents] called without matching -beginIgnoringInteractionEvents. Ignoring. 

日志表明for循环遍历所有元素的每个动作然后继续执行循环中包含的下一个操作。

我有什么是不能产生所需的输出,我很感激任何反馈或建议。

+0

这是一个非常狭窄的问题。在将来可能不会有用吗? – Sirens 2014-10-12 05:08:59

+0

我不同意你的观点,我不知道如何更一般地设计它。如果您有任何建议可以为其他用户提供更大的价值,我很乐意进行编辑。 – 2014-10-12 15:06:21

回答

1

由于影片的播放是一个异步事件,你的循环将通过之前的第一部电影才刚刚开始,甚至(可能之前实际)执行的所有道路。您需要将代码放入您在电影完成时调用的方法中,并使用计数器来跟踪要选择哪个网址而不是使用循环。

-(void)playNextMovie { 
    static int i = 0; 
    if (i < _uriToBeAppended.count) { 
     NSString *uriString = [_uriToBeAppended objectAtIndex:i]; 
     NSString *urlString = [NSString stringWithFormat:@"http://vimeo.com/%@", uriString]; 

     NSLog(@"URL String: %@", urlString); 

     [YTVimeoExtractor fetchVideoURLFromURL:urlString 
            quality:YTVimeoVideoQualityMedium 
         completionHandler:^(NSURL *videoURL, NSError *error, YTVimeoVideoQuality quality) { 
          if (error) { 
           // handle error 
           NSLog(@"Video URL: %@", [videoURL absoluteString]); 
          } else { 
           // run player 
           self.moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:videoURL]; 
           [self.moviePlayer.moviePlayer prepareToPlay]; 
           [self presentViewController:self.moviePlayer animated:YES completion:nil]; 
          } 
         }]; 
     i++; 
    } 

} 

调用此方法来开始你的第一部电影,然后再调用它时,MPMoviePlayerPlaybackDidFinishNotification被调用。