Comment lire une vidéo YouTube sur Apple tvOS?
La fonction d'intégration de YouTube fonctionne dans iOS 9, car le système d'exploitation dispose d'une UIWebView dans laquelle nous pouvons l'intégrer. Le nouveau tvOS n'inclut pas d'UIWebView, donc je ne vois pas de moyen d'intégrer la vidéo YouTube.
UIWebView
et MPMoviePlayerController
ne sont pas disponibles pour tvOS. Notre prochaine option consiste à utiliser AVPlayer
pour lire des vidéos YouTube.
AVPlayer
ne peut pas 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 vers le fichier vidéo. En utilisant HCYoutubeParser nous pouvons accomplir exactement cela. Une fois que nous avons l'URL dont nous avons besoin, nous pouvons la 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 ceci n'est [~ # ~] pas [~ # ~] autorisé 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 qu'il génère.
Version Swift 2.0 de la réponse 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 est un moyen populaire de lire directement une vidéo YouTube sur iOS depuis un certain temps, et le développeur l'a récemment mise à jour pour prendre en charge la nouvelle AppleTV.
Voici le code de exemple 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];
}
}];
Malheureusement, même un Apple membre du personnel a fait écho au "négatif" à ce sujet. D'un fil de discussion des développeurs Apple sur le sujet :
Il n'y a pas de support pour WebViews sur tvOS, et donc une implémentation iframe ne fonctionnera pas. TVML n'offre pas cette capacité.
En plus de la réponse de Daniel Storm, vous pouvez également y parvenir avec le nouveau langage TVML en 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 les Youtube TOS)
EDIT, a également trouvé la solution .JS: Comment lire une vidéo sur tvOS pour Apple TV?
J'ai utilisé celui-ci 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)
}
}