2015-09-11 3 views
41

Comment jouer une vidéo YouTube sur Apple tvOS?Comment lire un contenu YouTube sur tvOS

La fonctionnalité d'intégration de YouTube fonctionne dans iOS 9 car le système d'exploitation dispose d'une interface UIWebView dans laquelle vous pouvez l'intégrer. Le nouveau tvOS n'inclut pas d'UIWebView, donc je ne vois pas comment intégrer la vidéo YouTube.

+0

Avez-vous vu? http://stackoverflow.com/questions/32493872/how-do-i-play-a-video-on-tvos-for-apple-tv/32551565#32551565 Il vous suffit d'échanger l'URL de 'launchPlayer' sur votre URL YouTube. –

+6

Je suppose que nous allons avoir besoin d'une bibliothèque de Google pour le faire sans violer les conditions d'utilisation. Cela pourrait donc prendre quelques mois avant qu'ils ne le fassent (avec leur propre application YouTube tvOS qui viendra en premier). – Nick

+0

Plex est capable de lire des vidéos YouTube et Vimeo depuis leur nouvelle [AppleTV App] (https://blog.plex.tv/2015/11/02/plex-on-the-new-apple-tv/) via leur [ Regarder plus tard/Fonction Plex It] (https://support.plex.tv/hc/fr/articles/200392326-Using-the-Plex-It-Bookmarklet). Sur la base d'un rapide poke certains de leur [GitHub souce] (https://github.com/plexinc-plugins/Services.bundle/blob/master/Contents/Service%20Sets/com.plexapp.plugins.youtube/URL/YouTube /ServiceCode.pys), il semble qu'ils ne font que gratter la page. Est-ce exact? Comment s'en tirent-ils ou a-t-on remarqué? – Nick

Répondre

42

UIWebView et MPMoviePlayerController ne sont pas disponibles pour tvOS. Notre prochaine option est d'utiliser AVPlayer pour lire des vidéos YouTube.

AVPlayer Impossible de lire une vidéo YouTube à partir d'une URL YouTube standard, c'est-à-dire. https://www.youtube.com/watch?v=8To-6VIJZRE. Il a besoin d'une URL directe pour le fichier vidéo. En utilisant HCYoutubeParser, nous pouvons accomplir exactement cela. Une fois que nous avons l'URL nous avons besoin, nous pouvons jouer avec notre AVPlayer comme ceci:

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]; 

Notez que c'est pas autorisés sous YouTube's TOS. Utilisez-le à vos risques et périls. Votre application peut cesser de fonctionner à tout moment si YouTube remarque que vous ne suivez pas les conditions d'utilisation ou si YouTube modifie le code d'intégration généré.

+1

Est-ce que HCYoutubeParser est toujours supporté? Ne semble pas fonctionner pour moi – Shazam

+0

@Shazam n'a pas été mis à jour depuis plus de 2 ans sur GitHub donc certains problèmes peuvent exister. –

+0

Vous connaissez une bibliothèque pouvant être exécutée sur tvOS? Comme GTLYouTube ou quelque chose? –

5

Malheureusement, même un employé d'Apple a fait écho au «négatif» à ce sujet. D'un Apple Developer Forums thread on the topic:

Il n'y a pas de support pour WebViews sur tvOS, donc une implémentation iframe ne fonctionnera pas. TVML n'offre pas cette fonctionnalité.

17

Version Swift 2.0 de la réponse de Daniel Tempête:

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() 
+1

Comment avez-vous configuré HCYoutubeParser pour l'importer dans Swift? Essayé avec CocoaPods mais le truc 'use_frameworks!' Casse mon code Obj-C existant. – Nick

+2

J'ai manuellement introduit le parser.h et .m – Burf2000

1

En complément à la réponse de Daniel Storm, vous pouvez également y parvenir avec la nouvelle langue TVML utilisant le code:

<lockup videoURL="http://mp4-url.mp4"> 
<img src="video thumbnail.jpg" /> 
</lockup> 

(pour que cela fonctionne, vous aurez besoin du fichier vidéo direct (mp4) qui n'est pas non plus autorisé par le Youtube TOS)

EDIT, trouve aussi la solution .JS: How do I play a video on tvOS for Apple TV?

0

je celui 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) 
    } 
} 
6

XCDYouTubeKit a été un moyen populaire pour jouer directement une vidéo YouTube sur iOS pendant un certain temps, et le développeur a récemment mis à jour à soutenir la nouvelle AppleTV.

est ici le code de l'Objective-C example:

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 example here.

+0

Si vous essayez de lire du contenu YT à partir d'une interface TVML/TVJS, voici [un Gist qui montre comment] (https://gist.github.com/nickv2002/ b7bb28cdccc000bdb910). – Nick

+0

Cela violera également les TOS YouTube, n'est-ce pas? – Tobonaut

+1

Oui, XCDYouTubeKit fait. Voir aussi: [Discussion sur l'approbation d'Apple pour les applications utilisant XCDYouTubeKit] (https://github.com/0xced/XCDYouTubeKit/issues/121) – Nick