¿Es posible reproducir un video de YouTube en iOS sin revelar / agregar una vista, mientras sigue los Términos de service de YouTube?

Tengo una UITableView llena de miniaturas de videos de YouTube, y cuando tocan en una, quiero comenzar a reproducir automáticamente la pantalla completa de YouTube sin que el usuario vea una vista agregada o que tenga que interactuar más allá de tocar la miniatura.

Básicamente, no quiero ver el reproductor de video de YouTube con ese icono de reproducción roja en absoluto.

Estaba planeando usar youtubeios-player-helper / YTPlayerView para lograr esto, y entiendo que solo emplea un UIWebView pero parece que no puedo entender cómo hacerlo funcionar.

Si creo una variable de instancia en mi class, me establezco como el delegado y selecciono un video aleatorio para ver:

 let YouTubePlayer = YTPlayerView() override func viewDidLoad() { super.viewDidLoad() YouTubePlayer.delegate = self YouTubePlayer.loadWithVideoId("apKJikXWU2g") ... } 

y luego cuando se llama al método de delegado:

 func playerViewDidBecomeReady(playerView: YTPlayerView!) { YouTubePlayer.playVideo() } 

Pero la mayoría de las veces se bloquea en mi AppDelegate con este post:

5 de noviembre 23:34:44 rtcreporting [73827]: comienza el logging …

5 de noviembre a las 23:34:44 rtcreporting [73827]: setMessageLoggingBlock: llamado

O funcionará si deshabilito los puntos de interrupción, pero recibo un montón de posts de queja de restricción de layout automático antes de que se reproduzca el video, lo que indica que algo está enojado en algún nivel.

¿Esto es porque estoy usando una subclass UIView sin realmente agregarla a la jerarquía de la vista?

¿Cómo lograría el comportamiento de reproducción automática de un video de YouTube después de un determinado evento sin revelar una vista intermedia kludgy?

Aquí tienes, no tienes que ver el logo de YouTube.

  1. Defina YouTube iFrame. Deberá replace la parte '%@' con su identificación de video de YouTube más tarde cuando suministre una UIWebView

     #define youtubeVideoPlayUrl @"<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:'%f', height:'%f', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>" 
  2. Defina un object UIWebView de nombre videoWebView para mostrar el iFrame. Puede establecer que la altura y el ancho sean cero para que no bloquee su pantalla. Es como un iFrame oculto.

     self.videoWebview = [UIWebView alloc] init]; 
  3. Le sugiero que use su propia image pnetworkingeterminada y un button de reproducción en la parte superior de la image para evitar tener que mostrar el logotipo de video de 'Youtube'. Una vez que hayas hecho eso, usa el siguiente código para reproducir la pantalla completa de video de YouTube

     - (void)onPlayYouTubeVideo:(UIButton *)sender { NSString *youtubeVideoID = YOUR_YOUTUBE_VIDEO_ID; NSString *html = [NSString stringWithFormat:youtubeVideoPlayUrl, _videoWebView.frame.size.width, _videoWebView.frame.size.height, youtubeVideoID]; _videoWebView.mediaPlaybackRequiresUserAction = NO; _videoWebView.delegate = self; [_videoWebView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; } 

Estoy usando así para una aplicación de reserva de hotel.

He creado una aplicación de demostración para ti.

Código fuente para cargar webView html tomado de: http://iphoneincubator.com/blog/audio-video/how-to-play-youtube-videos-within-an-application

Archivo de encabezado ViewController

 @interface ViewController : UIViewController @property (nonatomic, strong) UIWebView *webView; @end 

ViewController file de implementación

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)]; self.webView.layer.borderWidth = 1.0; self.webView.layer.borderColor = [UIColor networkingColor].CGColor; self.webView.backgroundColor = [UIColor blackColor]; self.webView.center = self.view.center; [self.view addSubview:self.webView]; NSString* embedHTML = @"\ <html><head>\ <style type=\"text/css\">\ body {\ background-color: transparent;\ color: white;\ }\ </style>\ </head><body style=\"margin:0\">\ <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ width=\"%0.0f\" height=\"%0.0f\"></embed>\ </body></html>"; NSURL *url = [NSURL URLWithString:@"https://www.youtube.com/watch?v=K14RnTVt194"]; NSString* html = [NSString stringWithFormat:embedHTML, url, self.webView.frame.size.width, self.webView.frame.size.height]; [self.webView loadHTMLString:html baseURL:nil]; } 

Deberías ver esto:

captura de pantalla de la aplicación de demostración

Cuando presiona el button de reproducción va a pantalla completa.

Probablemente quiera crear un método que acepte una URL para el video de YouTube en su class de celda personalizada.

Luego, en el método cellForRowAtIndexPath: de su controller de vista, puede llamar a su método de carga de celda personalizada YouTubeTubeVideoWithURL: método para cargar la url de video de YouTube desde su fuente de datos.

La Biblioteca YouTube Helper es definitivamente una buena manera de incrustar YouTube en tu aplicación iOS mientras sigues los Términos del service de YouTube.

Con respecto a las advertencias de logging de restricciones de layout automático,

¿Esto es porque estoy usando una subclass UIView sin realmente agregarla a la jerarquía de la vista?

Estos errores no tienen nada que ver con su implementación y son fácilmente reproducibles.

Puede crear un proyecto iOS 8 vacío, agregar un UIWebView en su interfaz e intentar cargar una página de YouTube.

 [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"YOUTUBE_URL"]]]; 

Obtendrá los mismos posts de logging de restricciones de layout automático que obtuvo al usar la Biblioteca de YouTube Helper .

Si observa más de cerca los elementos que tienen problemas de restricciones de layout automático, verá AVAudioOnlyIndicatorView , AVUsupportedContentIndicatorView , AVExternalPlaybackIndicatorView , etc. Las restricciones con advertencias no están relacionadas con las vistas que creó sino que están relacionadas con la estructura de vistas internas de Apple. No tiene nada que ver con la Biblioteca YouTube Helper ni su implementación.

Definitivamente debe presentar un informe: https://bugreport.apple.com

Estas advertencias no harán que su aplicación sea rechazada o disminuirá la posibilidad de que su aplicación sea aprobada hasta que Apple arregle el problema, especialmente si puede get las advertencias usando un proyecto vacío con un UIWebView cargando cualquier página de YouTube.