Incrustar videos de YouTube en

He embedded un video de YouTube a través de un fragment que encontré en Internet, aquí está el código que he usado:

@interface FirstViewController (Private) - (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame; @end @implementation FirstViewController - (void)viewDidLoad { [super viewDidLoad]; [self embedYouTube:@"http://www.youtube.com/watch?v=l3Iwh5hqbyE" frame:CGRectMake(20, 20, 100, 100)]; } - (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame { 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>"; NSString *html = [NSString stringWithFormat:embedHTML, urlString, frame.size.width, frame.size.height]; UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; [videoView loadHTMLString:html baseURL:nil]; [self.view addSubview:videoView]; [videoView release]; } - (void)didReceiveMemoryWarning { // Releases the view if it doesn't have a superview. [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)viewDidUnload { // Release any retained subviews of the main view. // eg self.myOutlet = nil; } - (void)dealloc { [super dealloc]; } @end 

Se comstack correctamente y cuando lo abro, veo un cuadro blanco colocado incorrectamente, que el código creó. Tengo dos preguntas al respecto:

  1. ¿Cómo puedo saber si el video se reproducirá, es solo un cuadro blanco sin formatting, el simulador reproduce videos de YouTube?

  2. ¿Cómo puedo colocar esta caja?

Solo probó su código, funciona bien en un iPhone, los videos de YouTube no son compatibles con el simulador de iOS, por lo que necesitará un dispositivo real para probar.

¿Cómo puedo colocar esta caja?

Ya estás pasando la X (20), Y (20), ancho (100) y altura (100) del cuadro en esta línea:

 [self embedYouTube:@"http://..." frame:CGRectMake(20, 20, 100, 100)]; 

Para cambiar la position de la vista después, modifica su propiedad central:

 videoView.center = CGPointMake(200, 100 ); 

Aquí está el código de ejemplo, funciona bien en iOS 5 y posterior, esta es la nueva implementación que proporciona API de YouTube, myWeb es una UIWebView aquí. showinfo=0 en la URL eliminará el encabezado superior en el videoView.

 NSString *html = [NSString stringWithFormat:@"<html><body><iframe class=\"youtube-player\" type=\"text/html\" width=\"%f\" height=\"%f\" src=\"http://www.youtube.com/embed/q1091sWVCMI?HD=1;rel=0;showinfo=0\" allowfullscreen frameborder=\"0\" rel=nofollow></iframe></body></html>",frame.size.width,frame.size.height]; [myWeb loadHTMLString:html baseURL:nil]; 

Espero que esto te ayude 🙂

Aquí hay una versión que funciona en iOS 6 y con el nuevo código de inserción de YouTube:

 - (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame { NSString *html = [NSString stringWithFormat:@"<html><head><style type='text/css'>body {background-color: transparent;color: white;}</style></head><body style='margin:0'><iframe width='%f' height='%f' src='%@' frameborder='0' allowfullscreen></iframe></body></html>", frame.size.width, frame.size.height, urlString]; UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; [videoView loadHTMLString:html baseURL:nil]; [self.view addSubview:videoView]; } 

Para aquellos que usan Monotouch y C #, puede agregar esta class a su proyecto y usarlo para ver sus videos:

 public class YouTubeViewer : UIWebView { public YouTubeViewer(string url, RectangleF frame) { string youTubeVideoHTML = @"<object width=""{1}"" height=""{2}""><param name=""movie"" value=""{0}""></param><embed src=""{0}"" type=""application/x-shockwave-flash"" width=""{1}"" height=""{2}""</embed></object>"; string html = string.Format(youTubeVideoHTML, url, frame.Size.Width, frame.Size.Height); this.LoadHtmlString(html, null); this.Frame = frame; } } 

Asegúrate de que la URL que pases sea la URL del código insertado provisto desde YouTube cuando hagas clic en el button Compartir. (Y marque la checkbox del código anterior)

Implementación rápida:

 let webView = UIWebView(frame: self.view.frame) // Position your player frame here self.view.addSubview(webView) self.view.bringSubviewToFront(webView) // Playback options: play in-line and start playing immediately webView.allowsInlineMediaPlayback = true webView.mediaPlaybackRequiresUserAction = false // Set the id of the video you want to play let videoID = "zN-GGeNPQEg" // https://www.youtube.com/watch?v=zN-GGeNPQEg // Set up your player let embededHTML = "<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}})}function onPlayerReady(a){a.target.playVideo();}</script><iframe id='playerId' type='text/html' width='\(self.view.frame.size.width)' height='\(self.view.frame.size.height)' src='http://www.youtube.com/embed/\(videoID)?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'></body></html>" // Load the HTML into your UIWebView webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL) 

De forma alternativa, YouTube ofrece una excelente class de ayuda para que los desarrolladores configuren la reproducción de YouTube en su iOS que configura el UIWebView por usted.