Cómo reproducir videos de youtube / vimeo dentro de la aplicación en iPhone

Estoy construyendo una aplicación donde quiero reproducir videos desde la url como YouTube, Vimeo, URL directa. Estoy haciendo un reproductor personalizado usando AVPlayer para reproducir un video desde una url directa de video clip (como www.abc/play.mp4). Pero más tarde enfrenté un gran problema para reproducir videos de youtube y vimeo. Y después de search mucho, encontré este enlace donde dice sin utilizar UIWebview. No puedo reproducir un enlace de YouTube:

Reproduzca videos de YouTube con MPMoviePlayerController en lugar de UIWebView

Reproducción de video desde el enlace de YouTube sin UIWebView

Entonces, simplemente usé este código:

NSString *youTubeVideoHTML = @"<html><head><style>body{margin:0;}</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:\'100%%\', height:'200px', videoId:\'%@\', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>"; NSString *html = [NSString stringWithFormat:youTubeVideoHTML, videoId]; self.embedded_player_view.mediaPlaybackRequiresUserAction = NO; [self.embedded_player_view loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]]; 

Ahora cuando hago clic en el enlace de video de YouTube / Vimeo desde tableview, se reproduce el video con el jugador pnetworkingeterminado, es decir, jugador de time rápido. No está ejecutando el video dentro del marco de UIWebview mismo. Pero quiero mostrar el video en la primera mitad de la pantalla, es decir, mi marco UIWebview. ¿Es eso posible?

En mi aplicación puedo ver esto:

onclick en el button de reproducción rojo, puedo ver el video en pantalla completa en un reproductor de time rápido como este:

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

Pero quiero mostrar el video dentro del mismo marco webView no a través del reproductor de time rápido. Debería jugar así:

introduzca la descripción de la imagen aquí

Lo mismo ocurre en MusicTube y PlayTube .

¿O hay alguna otra forma de lograr lo mismo? Cualquier ayuda será apreciada. Gracias por adelantado.

introduzca la descripción de la imagen aquíintroduzca la descripción de la imagen aquí

He usado esta class solo por eso.

El video que ves dentro del UIViewController se puede reproducir en su tamaño actual.

Ese es el único código que he usado:

 UIView *videoContainerView = [[UIView alloc]initWithFrame:CGRectMake(0, 50, 320, 200)]; [self.view addSubview:videoContainerView]; XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:@"_OBlgSz8sSM"]; [videoPlayerViewController presentInView:videoContainerView]; [videoPlayerViewController.moviePlayer play]; 

Para el reproductor de Vimeo, puedes consultar este enlace https://github.com/lilfaf/YTVimeoExtractor , reproduce el video en un reproductor real y si quieres ejecutar el video en uiwebview, aquí está el código de ese https://stackoverflow.com / a / 15918011/1865424 .

Pase la URL del video de YouTube en "urlStr".

 //In .h file UIWebView *videoView; // In .m file videoView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 385)]; [self embedYouTube :urlStr frame:CGRectMake(0, 0, 320, 385)]; [self.view addSubview:videoView]; // methos to embed URL in HTML & load it to UIWebView - (void)embedYouTube:(NSString*)url 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, url, frame.size.width, frame.size.height]; if(videoView == nil) { videoView = [[UIWebView alloc] initWithFrame:frame]; [self.view addSubview:videoView]; } [videoView loadHTMLString:html baseURL:nil]; } 

Courtsey: http://nanostuffs.com/Blog/?p=641

Espero que esto te ayude. Si esto no te ayuda, consulta estos enlaces:

http://blog.softwareispoetry.com/2010/03/how-to-play-youtube-videos-in-your.html

https://gist.github.com/darknetworkingz/5334409

http://maniacdev.com/2012/02/open-source-library-for-easily-playing-a-youtube-video-in-an-mpmovieplayer

Si quieres jugar a YouTube, aquí hay un enlace al proyecto de reproductor de YouTube en github. Es muy útil. y sí, es posible reproducirlo en tu uiwebview, solo da a la vista web la url y dile que se cargue, no debería abrirse en el reproductor pnetworkingeterminado, por lo que creo al less.

No sé sobre el Vimeo, pero para videos de YouTube puedes usar HCYouTubeParser para search mp4 urls para los videos de YouTube, que luego se pueden reproducir en AVPlayer o MpMoviePlayerVC según los requisitos.

Utilicé YouTube y Vimeo en mi Proyecto, comparto mis codificaciones para ti, será muy esperanzador para ti

en mi vista controller.m

 //Button action - (IBAction)importAudioClip:(id)sender { flag = 0; customActionSheet = [[UIActionSheet alloc]initWithTitle:@"Select Audio/Video from:" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"YouTube",@"Vimeo", nil]; [customActionSheet showInView:self.view]; } #pragma ActionSheet Delegate Methods -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"CLiekc button is %i",buttonIndex); if([actionSheet.title isEqualToString:@"Select Audio/Video from:"]) { if (buttonIndex == 0) { videoStatus=0; webView.hidden = NO; [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com"]]]; NSLog(@"Taking from Youtube"); } else if (buttonIndex == 1) { videoStatus=1; UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"Vimeo" message:@"Please enter Vimeo Username" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; alertView.tag=123; alertView.alertViewStyle = UIAlertViewStylePlainTextInput; [alertView show]; } } } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (alertView.tag==123) { if (buttonIndex==1) { templateText=[[UITextField alloc]init]; templateText = [alertView textFieldAtIndex:0]; templateText.autocapitalizationType=UITextAutocapitalizationTypeWords; templateText.delegate=self; if ([templateText.text length]!=0) { NSString *str=[templateText.text capitalizedString]; NSLog(@"Str== %@",str); [self getVimeoDetails:str]; } } } } -(void)getVimeoDetails:(NSString*)userName { NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://vimeo.com/api/v2/%@/videos.json",userName]]]; [request setHTTPMethod:@"GET"]; NSError *err; NSURLResponse *response; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; NSString *resSrt = [[NSString alloc]initWithData:responseData encoding:NSASCIIStringEncoding]; NSLog(@"The value is==%@",resSrt); vimeoDetailsArray =(NSArray*) [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&err]; NSLog(@"jsonObject== %i",[vimeoDetailsArray count]); NSString *theReply = [[NSString alloc] initWithBytes:[responseData bytes] length:[responseData length] encoding: NSASCIIStringEncoding]; NSLog(@"the reply == %@",theReply); if(response) { if (vimeoDetailsArray==NULL) { NSLog(@"its Null"); NSLog(@"null response== %@",response); // UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Alert!!!" message:[NSString stringWithFormat:@"%@",theReply] delegate:self // cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; // [alert show]; // [self performSelector:@selector(showAlertMessage:theReply withTitle:@"Alert!!!") withObject:nil afterDelay:5]; vimeoVideoTable.hidden=YES; [self showAlertMessage:[NSString stringWithFormat:@"%@",theReply] withTitle:@"Alert!!!"]; } else { [self createTableView]; vimeoVideoTable.hidden=NO; [vimeoVideoTable reloadData]; NSLog(@"got response== %@",response); } } else { NSLog(@"faield to connect"); } if ([responseData length] == 0 && err == nil) { NSLog(@"Nothing was downloaded."); } else if (err != nil){ if ([[err description] rangeOfString:@"The Internet connection appears to be offline"].location != NSNotFound) { NSLog(@"string does not contain "); UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Alert!!!" message:@"Please Check your Internet Connection" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; } NSLog(@"Error = %@", err); } } -(void)createTableView { if (vimeoVideoTable !=nil) { [vimeoVideoTable removeFromSuperview]; vimeoVideoTable=nil; } vimeoVideoTable=[[UITableView alloc]initWithFrame:CGRectMake(10, 20, 300, self.view.bounds.size.height-100)]; [vimeoVideoTable setDelegate:self]; [vimeoVideoTable setHidden:YES]; [vimeoVideoTable setDataSource:self]; [self.view addSubview:vimeoVideoTable]; //[vimeoVideoTable reloadData]; } 

Definitivamente sugiero youtube_ios_player_helper , "patrocinado por" Google .

 import youtube_ios_player_helper class YTViewController: YTPlayerViewDelegate { @IBOutlet weak var player: YTPlayerView! // MARK: - Public properties - var videoID = "k_okcNVZqqI" // MARK: - View life cycle - override func viewDidLoad() { super.viewDidLoad() self.player.delegate = self } override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) self.load() self.player.fadeOut() } /** Play video with the relative youtube identifier. */ func load() { Utils.showHUD(self.view) let options = ["playsinline" : 1] self.player.loadWithVideoId(self.videoID, playerVars: options) } /** Stop video playing. */ func stop() { } // MARK: - YOUTUBE video player delegate - func playerViewDidBecomeReady(playerView: YTPlayerView) { self.player.playVideo() } func playerView(playerView: YTPlayerView, didChangeToState state: YTPlayerState) { switch state { case .Playing: self.player.fadeIn(duration: 0.5) Utils.hideHUD(self.view) print("Started playback") break; case .Paused: print("Paused playback") break; default: break; } } } 

Utilizar esta

 NSMutableString *html = [[NSMutableString alloc] initWithCapacity:1] ; [html appendString:@"<html><head>"]; [html appendString:@"<style type=\"text/css\">"]; [html appendString:@"body {"]; [html appendString:@"background-color: transparent;"]; [html appendString:@"color: white;"]; [html appendString:@"}"]; [html appendString:@"</style>"]; [html appendString:@"</head><body style=\"margin:0\">"]; [html appendString:@"<iframe src=\"//player.vimeo.com/video/84403700?autoplay=1&amp;loop=1\" width=\"1024\" height=\"768\" frameborder=\"0\" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>"]; [html appendString:@"</body></html>"]; [viewWeb loadHTMLString:html baseURL:urlMovie];