wake-up-neo.com

Wie man YouTube-Inhalte auf tvOS abspielt

Wie würde man ein YouTube-Video auf Apple tvOS?

Die Einbettungsfunktion von YouTube funktioniert in iOS 9, da das Betriebssystem eine UIWebView hat, in die wir sie einbetten können. Das neue tvOS enthält kein UIWebView, daher sehe ich keine Möglichkeit, das YouTube-Video einzubetten.

45
Carl Thomas

UIWebView und MPMoviePlayerController sind für tvOS nicht verfügbar. Unsere nächste Option ist die Verwendung von AVPlayer zum Abspielen von YouTube-Videos.

AVPlayer kann kein YouTube-Video von einer Standard-YouTube-URL abspielen, d. h. https://www.youtube.com/watch?v=8To-6VIJZRE. Es benötigt eine direkte URL zur Videodatei. Mit HCYoutubeParser können wir genau das erreichen. Sobald wir die URL haben, die wir brauchen, können wir sie mit unserem AVPlayer wie folgt abspielen:

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

Beachten Sie, dass dies [~ # ~] nicht [~ # ~] unter YouTube's TOS erlaubt ist. Die Verwendung erfolgt auf eigenes Risiko . Ihre App funktioniert möglicherweise zu einem beliebigen Zeitpunkt nicht mehr, wenn YouTube feststellt, dass Sie den Nutzungsbedingungen nicht folgen, oder wenn YouTube den von YouTube generierten Einbettungscode ändert.

44
Daniel Storm

Swift 2.0 Version von Daniel Storms Antwort:

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()
18
Burf2000

XCDYouTubeKit ist seit einiger Zeit eine beliebte Möglichkeit, ein YouTube-Video direkt auf iOS abzuspielen. Der Entwickler hat es kürzlich aktualisiert, um das neue AppleTV zu unterstützen.

Hier ist der Code aus dem Objective-C-Beispiel :

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

Schnelles Beispiel hier.

6
Nick

Leider wiederholte sogar eine Apple Mitarbeiterin das "Negative". Aus einem Apple Developer Forums-Thread zum Thema :

Es gibt keine Unterstützung für WebViews unter tvOS, daher funktioniert eine iframe-Implementierung nicht. TVML bietet diese Funktion nicht an.

5
Joel Farris

Als Ergänzung zu Daniel Storms Antwort können Sie dies auch mit der neuen TVML-Sprache erreichen, indem Sie den folgenden Code verwenden:

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

(Damit dies funktioniert, benötigen Sie die direkte Videodatei (mp4), die vom YouTube-Nutzungsbedingungen ebenfalls nicht zugelassen ist.)

BEARBEITEN, habe auch die .JS-Lösung gefunden: Wie spiele ich ein Video auf tvOS für Apple TV?

1
Bldjef

Ich habe diesen benutzt 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)
    }
}
0
pillade