2010-12-03 21 views
6

Estoy intentando reproducir un video de youtube con el reproductor de youtube insertado en mi aplicación ipad. Quiero que tan pronto como el usuario haga clic en la miniatura del video, el video se cargue automáticamente en pantalla completa al cambiar al modo horizontal en ipad. Actualmente, el usuario tiene que hacer clic en el botón de pantalla completa para reproducir el video en modo de pantalla completa. Quiero el mismo efecto que se ve cuando jugamos el video usando la aplicación de youtube predeterminada que viene con ipad.Reproducir videos de youtube en pantalla completa auto

Este es el código que estoy usando para reproducir tu video de video en ipad.

embedHTML = @"<object width=\"640\" height=\"390\"> 
<param name=\"movie\"value=\"http://www.youtube.com/v/IYX_Ql-3U10&fs=1\"> 
<param name=\"allowFullScreen\" value=\"true\"></param> 
<param name=\"allowScriptAccess\" value=\"always\"></param> 
<embed id=\"yt\" src=\"http://www.youtube.com/v/youtube_video_id&fs=1\" 
type=\"application/x-shockwave-flash\" position=\"fixed\" 
allowfullscreen=\"true\" allowScriptAccess=\"always\" 
width=\"640\" height=\"390\"></embed></object>"; 

Y si esto no es posible, ¿alguien sabe si hay un motivo o documentación que respalde esta decisión?

+0

Ha encontrado la respuesta a su pregunta, si es así podría compartirla. Estoy intentando reproducir automáticamente un video de youtube desde mi aplicación. – Illep

Respuesta

5

no se puede, no es permitido :)

+1

Quiere decir que no podemos tener el mismo efecto en nuestra aplicación de iPad que vemos cuando reproducimos un video de youtube en el iPad. Por favor, publique alguna url de documentación que confirme su respuesta. – Aisha

+0

Si esto no es posible, ¿cómo funciona la aplicación de youtube que viene con ipad habilita esta función? – Aisha

+0

erm, porque eso fue implementado por apple y/o google ....? – Yehonatan

4

Pude para acceder a esta funcionalidad desde una subvista titulada FigPluginView dentro de la vista web del reproductor de youtube, usando el ayudante de youtube iOS iOS-youtube-player-helper. FigPluginView class dump reference

crear un encabezado de clase UIView a medida que expone el siguiente método:

#import <Foundation/Foundation.h> 
@interface WMFigPluginView : NSObject 

-(void)scriptEnterFullScreen; 

@end 

importación la costumbre FigPluginView y YouTube jugador a la interfaz de ViewController()

#import <youtube-ios-player-helper/YTPlayerView.h> 
    #import "WMFigPluginView.h" 

    @property(nonatomic, strong) YTPlayerView *playerView; 

Utilice los siguientes métodos para inicie el reproductor de youtube, supervise el cambio de estado, busque y llame al script de pantalla completa dentro de FigPluginView.

- (void)presentYoutubeVideo { 
    if ([self.view.subviews containsObject:_playerView]){ 
     [_playerView removeFromSuperview]; 
    } 
    CGRect playerFrame = CGRectMake(0, 0, 0, 0); 
    _playerView = [[YTPlayerView alloc]initWithFrame:playerFrame]; 
    _playerView.delegate = self; 
    [_playerView.webView setAllowsInlineMediaPlayback: NO]; 
    [self.view addSubview:_playerView]; 
    [self.playerView loadWithVideoId:@"YouTubeVideoID" playerVars:@{@"showinfo":@0,@"modestbranding":@1,@"autoplay":@1,@"playsinline":@0}]; 
} 

-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView { 
    [_playerView playVideo]; 
} 

-(void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state { 
    //stop activity indicator 
    if (state == kYTPlayerStateBuffering) { 
     //start activity indicator 
    } 
    if (state == kYTPlayerStatePlaying) { 
     WMFigPluginView *figPluginView = (WMFigPluginView*)[self findFigPluginView:_playerView.webView]; 
     [figPluginView scriptEnterFullScreen]; 
    } 
} 

- (UIView *)findFigPluginView:(UIView *)view { 
    for (__unsafe_unretained UIView *subview in view.subviews) { 
     if ([NSStringFromClass(subview.class) hasSuffix:@"FigPluginView"]) { 
      return subview; 
     } else if (subview.subviews.count > 0) { 
      return [self findFigPluginView:subview]; 
     } 
    } 
    return nil; 
} 

Hope this helps!

+0

El enlace de la referencia de volcado de la clase FigPluginView está roto, no se veía el repositorio relacionado con él – Bastet

0

Con respecto a los autores de las otras respuestas, es completamente posible hacer esto usando UIWebViews en iOS Y sin aprovechar las API privadas. Aquí hay un método bastante simple para hacerlo.

- (void)playYoutubeVideo:(NSString *)videoId { 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero]; 
    webView.center = self.view.center; //Technically not needed, I've found it looks better with this added (when the video is done playing it looks better while being minimized) 
    webView.mediaPlaybackRequiresUserAction = NO; 
    [self.view addSubview:webView]; 

    NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<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:'768', height:'1024', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>", videoId]; 

    [webView loadHTMLString:youTubeVideoHTML baseURL: [NSBundle mainBundle].bundleURL]; 
} 

El quid de esta aplicación es el uso de un UIWebView con un marco de CGRectZero junto con la costumbre de HTML/Javascript que se encarga de reproducción automática del vídeo. Con UIWebView con el marco CGRectZero, el usuario no ve ninguna página intermedia molesta antes de que el video se reproduzca automáticamente, y el HTML/Javascript hace que el trabajo pesado implique que la página reproduzca automáticamente el video.

Hay una pequeña demora antes de presentar el video. No he encontrado una forma de eliminar este retraso de pareja por desgracia.

Cuestiones relacionadas