2014-12-03 4 views
3

У меня есть эти требования к видео Play YouTube в моем приложении:Youtube API в IOS 7 и IOS 8

  • Автоигру вид контейнера контроллер появится
  • Detect, когда видео послевкусие (я включить элементы управления в этом случае)
  • Это начинается не в полноэкранном
  • Поддержка полноэкранного portrail и пейзаж
  • Полная совместимость с IOS 7 и 8

Во-первых, я стараюсь YOUTUBE КСН-игрок-помощника с этим результаты:

  • IOS 8: работать он идеально
  • IOS 7: Видео пауза каждый раз, когда на весь экран и не играл жидкости.

я, что это может быть лучшим решением, но я не могу заставить его работать нормально в IOS 7.

Второй и фактический вариант, я использую гибридное решение: IOS 8 с YouTube КСН-player- помощник и IOS 7 с UIWebView и встроенный проигрыватель YouTube. Результат:

  • IOS 8: работать он идеально
  • IOS 7: работа это, но 1/5 видео автозапуск не работает, поэтому видео отделка не обнаружено (я не знаю, почему)

Я ценю любое предложение о лучшем решении,

Мой реальный код (второй вариант):

-(void)youtubePlayerConfiguration{ 

NSString *version = [[UIDevice currentDevice] systemVersion]; 


if ([version floatValue] >= 8.0) { 

    NSDictionary *playerVars = @{ 

           @"playsinline" : @1, 
           @"autoplay" : @1, 
           @"showinfo" : @0, 
           @"autohide" : @1, 
           @"rel" : @0, 
           @"modestbranding" : @1 
           }; 

    youtubePlayer.delegate = self; 
    [youtubePlayer loadWithVideoId:self.videoId playerVars:playerVars]; 

} else { 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:youtubePlayer.frame]; 
    [webView setAllowsInlineMediaPlayback:YES]; 
    [webView setMediaPlaybackRequiresUserAction:NO]; 
    webView.delegate = self; 

    [self.view addSubview:webView]; 

    NSString* embedHTML = [NSString stringWithFormat:@"\ 
          <html>\ 
          <body style='margin:0px;padding:0px;'>\ 
          <script type='text/javascript' src='http://www.youtube.com/iframe_api'></script>\ 
          <script type='text/javascript'>\ 
          function onYouTubeIframeAPIReady()\ 
          {\ 
          ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady,onStateChange: onPlayerStateChange}})\ 
          }\ 
          function onPlayerReady(a)\ 
          { \ 
          a.target.playVideo(); \ 
          }\ 
          var done = false;\ 
          function onPlayerStateChange(event) {\ 
           if (event.data == YT.PlayerState.PLAYING && !done) {\ 
            setTimeout(stopVideo, 6000);\ 
            done = true;\ 
           }\ 
           if (event.data == YT.PlayerState.ENDED) {\ 
            window.location = 'callback:anything';\ 
           }\ 
          }\ 
          </script>\ 
          <iframe id='playerId' type='text/html' width='%d' height='%d' src='http://www.youtube.com/embed/%@?enablejsapi=1&rel=0&playsinline=1&autoplay=1&showinfo=0' frameborder='0'>\ 
          </body>\ 
          </html>", 288,150, self.videoId]; 
    [webView loadHTMLString:embedHTML baseURL:[[NSBundle mainBundle] resourceURL]]; 

    webView.allowsInlineMediaPlayback = YES; 
    webView.mediaPlaybackRequiresUserAction = NO; 
    webView.scrollView.bounces = NO; 

    youtubePlayer.hidden = YES; 
} 

} 


#pragma mark - Player YouTube Delegates 

-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView{ 
    //[[NSNotificationCenter defaultCenter] postNotificationName:@"Playback started" object:self]; 

    [playerView playVideo]; 
} 

- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state{ 
    if (state == kYTPlayerStateEnded) { 
     ratingView.editable = YES; 
     ratingView.alpha = 1; 
     ratingView.userInteractionEnabled = YES; 
    } 
} 

- (void)playerView:(YTPlayerView *)playerView receivedError:(YTPlayerError)error 
{ 
    NSLog(@"YTPlayerView : receivedError :%i",error); 
} 

#pragma mark - WebView Delegate 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSLog(@"ENTRO - request:%@",request); 

    if ([[[request URL] scheme] isEqualToString:@"callback"]) { 

     NSLog(@"get callback"); 
     ratingView.editable = YES; 
     ratingView.alpha = 1; 
     ratingView.userInteractionEnabled = YES; 
     return NO; 

    } 

    return YES; 
} 

ответ

2

I Wa s, используя следующий код для iOS 7, и он отлично работает для меня, теперь я использую iOS 8, поэтому я использую youtube-ios-player-helper.

-(void)initializeYouTubePlayerWithVideoID(NSString *)videoId 
{ 
    NSString *youTubeVideoHTML = @"<html><head><style>body{margin:0px 0px 0px 0px;}</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = 'http://www.youtube.com/player_api'; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { width:'1024', height:'728', videoId:'%@', playerVars: {controls:0,rel:0, modestbranding:1, html5:0, showinfo:0}, events: { 'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange } }); } function onPlayerReady(event) { event.target.playVideo(); } function onPlayerStateChange(event) { if (event.data == YT.PlayerState.ENDED){ } } </script> </body> </html>"; 

    NSString *html = [NSString stringWithFormat:youTubeVideoHTML, videoId]; 

    _youtubePlayerView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; 
    _youtubePlayerView.backgroundColor = [UIColor blackColor]; 
    _youtubePlayerView.delegate = self; 
    _youtubePlayerView.allowsInlineMediaPlayback = NO; 

    [self.view addSubview:_youtubePlayerView]; 

    _youtubePlayerView.mediaPlaybackRequiresUserAction = NO; 
    [_youtubePlayerView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerDidExitFullscreen:) 
              name:@"UIMoviePlayerControllerDidExitFullscreenNotification" 
              object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerDidEnterFullscreen:) 
               name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" 
              object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playbackStateDidChange:) 
              name:@"MPAVControllerPlaybackStateChangedNotification" 
              object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playbackDidEnd:) 
              name:@"MPAVControllerItemPlaybackDidEndNotification" 
              object:nil]; 
} 

-(void)playbackStateDidChange:(NSNotification *)notification 
{ 
    switch ([[notification.userInfo objectForKey:@"MPAVControllerNewStateParameter"]  intValue]) 
    { 
     case 0: 
      //Loading 
      break; 
     case 1: 
      //Paused 

      break; 
     case 2: 
      //Playing"; 
      break; 
     case 3: 
      //Buffering"; 
     break; 

     default: 
      break; 
    } 
} 

-(void)playbackDidEnd:(NSNotification *)notification 
{ 
    //Playback Ended 
} 

-(void)playerDidExitFullscreen:(NSNotification *)notification 
{ 
    //playerDidExitFullscreen 
} 

-(void)playerDidEnterFullscreen:(NSNotification *)notification 
{ 
    //playerDidEnterFullscreen 
} 
+0

youtube-ios-player-helper не работает, даже демонстрация их тоже не работает –

Смежные вопросы