Cómo reproducir contenido de YouTube en tvOS

¿Cómo se puede reproducir un video de YouTube en Apple TVOS?

La función de inserción de YouTube funciona en iOS 9 ya que el sistema operativo tiene un UIWebView en el que podemos incrustarlo. El nuevo TVOS no incluye UIWebView, por lo que no veo una forma de insertar el video de YouTube.

UIWebView y MPMoviePlayerController no están disponibles para tvOS. Nuestra siguiente opción es usar AVPlayer para reproducir videos de YouTube.

AVPlayer no puede reproducir un video de YouTube desde una URL estándar de YouTube, es decir. https://www.youtube.com/watch?v=8To-6VIJZRE . Necesita una URL directa al archivo de video. Usando HCYoutubeParser podemos lograr exactamente eso. Una vez que tenemos la URL que necesitamos, podemos jugarla con nuestro AVPlayer manera:

 NSString *youTubeString = @"https://www.youtube.com/watch?v=8To-6VIJZRE"; NSDictionary *videos = [HCYoutubeParser h264videosWithYoutubeURL:[NSURL URLWithString:youTubeString]]; NSString *urlString = [NSString stringWithFormat:@"%@", [videos objectForKey:@"medium"]]; AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:urlString]]; AVPlayerItem *avPlayerItem = [[AVPlayerItem alloc]initWithAsset:asset]; AVPlayer *videoPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem]; AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:videoPlayer]; avPlayerLayer.frame = playerView.layer.bounds; [playerView.layer addSublayer:avPlayerLayer]; [videoPlayer play]; 

Tenga en cuenta que esto NO está permitido en los TOS de YouTube . Úselo bajo su propio riesgo . Su aplicación puede dejar de funcionar en cualquier momento si YouTube advierte que no está siguiendo las Condiciones del servicio o si YouTube cambia el código de inserción que genera.

Swift 2.0 versión de la respuesta de Daniel Storm:

 let youTubeString : String = "https://www.youtube.com/watch?v=8To-6VIJZRE" let videos : NSDictionary = HCYoutubeParser.h264videosWithYoutubeURL(NSURL(string: youTubeString)) let urlString : String = videos["medium"] as! String let asset = AVAsset(URL: NSURL(string: urlString)!) let avPlayerItem = AVPlayerItem(asset:asset) let avPlayer = AVPlayer(playerItem: avPlayerItem) let avPlayerLayer = AVPlayerLayer(player: avPlayer) avPlayerLayer.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height); self.view.layer.addSublayer(avPlayerLayer) avPlayer.play() 

XCDYouTubeKit ha sido una forma popular de reproducir directamente un video de YouTube en iOS por un tiempo, y el desarrollador lo actualizó recientemente para admitir el nuevo AppleTV.

Aquí está el código del ejemplo de Objective-C :

 AVPlayerViewController *playerViewController = [AVPlayerViewController new]; [self presentViewController:playerViewController animated:YES completion:nil]; __weak AVPlayerViewController *weakPlayerViewController = playerViewController; [[XCDYouTubeClient defaultClient] getVideoWithIdentifier:playlistItem.snippet.resourceId.videoId completionHandler:^(XCDYouTubeVideo * _Nullable video, NSError * _Nullable error) { if (video) { NSDictionary *streamURLs = video.streamURLs; NSURL *streamURL = streamURLs[XCDYouTubeVideoQualityHTTPLiveStreaming] ?: streamURLs[@(XCDYouTubeVideoQualityHD720)] ?: streamURLs[@(XCDYouTubeVideoQualityMedium360)] ?: streamURLs[@(XCDYouTubeVideoQualitySmall240)]; weakPlayerViewController.player = [AVPlayer playerWithURL:streamURL]; [weakPlayerViewController.player play]; } else { [self dismissViewControllerAnimated:YES completion:nil]; } }]; 

Swift ejemplo aquí.

Lamentablemente, incluso una persona del personal de Apple se hizo eco de lo “negativo” en esto. De un hilo de foros de desarrolladores de Apple sobre el tema :

No hay soporte para WebViews en tvOS, por lo que una implementación de iframe no funcionará. TVML no ofrece esta capacidad.

Como una adición a la respuesta de Daniel Storm, también puede lograr esto con el nuevo lenguaje TVML usando el código:

    

(para que esto funcione necesitarás el archivo de video directo (mp4) que tampoco está permitido por los TOS de Youtube)

EDIT, también encontró la solución .JS: ¿Cómo reproduzco un video en TVOS para Apple TV?

Utilicé este https://cocoapods.org/pods/youtube-parser

 Youtube.h264videosWithYoutubeURL(testURL) { (videoInfo, error) -> Void in if let videoURLString = videoInfo?["url"] as? String, videoTitle = videoInfo?["title"] as? String { print("\(videoTitle)") print("\(videoURLString)") self.playVideo(videoURLString) } }