Cómo reproducir automáticamente un video de YouTube en una UIWebView

He visto un montón de publicaciones aquí sobre este tema, pero todavía no he podido encontrar una respuesta perfecta para este problema.

Así que tengo una vista de tabla, y cada celda tiene un botón de reproducción dentro de ella. Cuando el usuario toca el botón de reproducción, agrego un UIWebView a esta celda y reproduzco un video de YouTube.

 static NSString *youTubeVideoHTML = @"\ \ \ \ \ "; - (void)playVideoWithId:(NSString *)videoId { NSString *html = [NSString stringWithFormat:youTubeVideoHTML, self.frame.size.width, self.frame.size.height, videoId]; [self loadHTMLString:html baseURL:nil]; } 

El problema:

Este código no reproduce el video como yo quiero, solo inicia el reproductor de YouTube y lo muestra con el botón rojo de reproducción de YouTube. Solo cuando el usuario toca el botón rojo, el video comenzará a reproducirse.
Entonces, el usuario tiene que tocar dos botones hasta que comience el video, no la mejor experiencia de usuario …

Como dije, vi muchas publicaciones sobre este tema, algunas no funcionan en absoluto y algunas funcionan, pero con algunos problemas que me molestan.

Una de las soluciones de trabajo que encontré fue en esta publicación de @ilias, que muestra cómo hacer que esto funcione al cargar el HTML de un archivo (en lugar de una cadena como yo), el problema con este enfoque es que por cada video que reproduzco Necesito:
carga el archivo htm -> inserta la identificación del video en él -> escribe el archivo en el disco -> solo ahora puedo reproducir el video.

Lo extraño es que esta solución solo funciona cuando carga la solicitud de vista web desde un archivo, si bash cargar la solicitud desde una cadena igual al contenido del archivo, eso no funciona.

Aparentemente el problema fue con la URL base nula, cuando lo cambié a resourceURL funcionó la reproducción automática.

 [self loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; 

El código completo para reproducir videos de youtube (de nuevo este código principalmente basado en esta publicación lo cambié para cargar desde una cadena en lugar de un archivo):

 static NSString *youTubeVideoHTML = @"< !DOCTYPE html>  
"; - (void)playVideoWithId:(NSString *)videoId { NSString *html = [NSString stringWithFormat:youTubeVideoHTML, self.frame.size.width, self.frame.size.height, videoId]; [self loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; }

La clave aquí es establecer playsinline=1 en su reproductor de iFrame, y allowsInlineMediaPlayback = true y mediaPlaybackRequiresUserAction = false para su UIWebView . Aquí está mi implementación en Swift:

 // Set up your UIWebView let webView = UIWebView(frame: self.view.frame) // or pass in your own custom frame rect self.view.addSubview(webView) self.view.bringSubviewToFront(webView) // Set properties webView.allowsInlineMediaPlayback = true webView.mediaPlaybackRequiresUserAction = false // get the ID of the video you want to play let videoID = "zN-GGeNPQEg" // https://www.youtube.com/watch?v=zN-GGeNPQEg // Set up your HTML. The key URL parameters here are playsinline=1 and autoplay=1 // Replace the height and width of the player here to match your UIWebView's frame rect let embededHTML = "" // Load your webView with the HTML we just set up webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL) 

Aquí hay una solución completa:

 // // S6ViewController.m // // // Created by Ökkeş Emin BALÇİÇEK on 11/30/13. // Copyright (c) 2013 Ökkeş Emin BALÇİÇEK. All rights reserved. // #import "S6ViewController.h" @interface S6ViewController () @end @implementation S6ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self playVideoWithId:@"sLVGweQU7rQ"]; } - (void)playVideoWithId:(NSString *)videoId { NSString *youTubeVideoHTML = @"  
"; NSString *html = [NSString stringWithFormat:youTubeVideoHTML, videoId]; UIWebView *videoView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; videoView.backgroundColor = [UIColor clearColor]; videoView.opaque = NO; //videoView.delegate = self; [self.view addSubview:videoView]; videoView.mediaPlaybackRequiresUserAction = NO; [videoView loadHTMLString:youTubeVideoHTML baseURL:[[NSBundle mainBundle] resourceURL]]; } @end
 - (void)playVideoWithId:(NSString *)videoId { NSString *youTubeVideoHTML = @"  
"; NSString *html = [NSString stringWithFormat:youTubeVideoHTML, videoId]; UIWebView *videoView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 300)]; videoView.backgroundColor = [UIColor clearColor]; videoView.opaque = NO; //videoView.delegate = self; [self.view addSubview:videoView]; videoView.mediaPlaybackRequiresUserAction = NO; [videoView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; }

Hice algunas correcciones al código anterior.

Use el siguiente código para reproducir un video de youtube en UIWebView

Aquí requerimos “enlace de inserción”:

  • Simplemente abre tu enlace de youtube en el navegador
  • Haga clic derecho en video
  • Seleccione la opción “Obtener código incrustado”
  • Obtendrás resultados como –

      
  • copia el enlace en el campo “src”, este es tu enlace de inserción

    Ahora simplemente coloque este enlace incrustado en el lugar de “YOU_TUBE LINK” en el siguiente código:

     NSString *htmlString = [NSString stringWithFormat:@"
    "]; [self.webView_youTube loadHTMLString:htmlString baseURL:nil];