Подтвердить что ты не робот

Как играть на YouTube на tvOS

Как можно воспроизводить видео YouTube на Apple tvOS?

Функция встраивания YouTube работает в iOS 9, поскольку ОС имеет интерфейс UIWebView, в который мы можем встроить его. Новый tvOS не включает UIWebView, поэтому я не вижу способа встраивать видео YouTube.

4b9b3361

Ответ 1

UIWebView и MPMoviePlayerController недоступны для tvOS. Наш следующий вариант - использовать AVPlayer для воспроизведения видео на YouTube.

AVPlayer не может воспроизводить видео YouTube со стандартного URL-адреса YouTube, т.е. https://www.youtube.com/watch?v=8To-6VIJZRE. Ему нужен прямой URL-адрес видеофайла. Используя HCYoutubeParser, мы можем выполнить именно это. Как только мы получим URL-адрес, мы можем сыграть его с нашим AVPlayer следующим образом:

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

Обратите внимание, что это НЕ разрешено в YouTube TOS. Используйте его на свой страх и риск. Ваше приложение может перестать работать в любой момент, если YouTube уведомляет вас о том, что вы не выполняете TOS, или если YouTube изменяет код встраивания, который он создает.

Ответ 2

Swift 2.0 версия ответа Даниэля Шторма:

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

Ответ 3

XCDYouTubeKit был популярным способом прямого воспроизведения видео YouTube на iOS некоторое время, и разработчик недавно обновил его для поддержки нового AppleTV.

Здесь код из 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 здесь.

Ответ 4

К сожалению, даже персонаж Apple Staff повторил "негатив" по ​​этому поводу. Из Форумы разработчиков Apple по теме:

Нет поддержки WebViews на tvOS, поэтому реализация iframe не будет работать. TVML не предлагает эту возможность.

Ответ 5

В качестве дополнения к ответу Даниэля Шторма вы также можете добиться этого с помощью нового языка TVML с помощью кода:

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

(для этого вам понадобится прямой видеофайл (mp4), который также не разрешен TOS Youtube)

EDIT, нашел также решение .JS: Как воспроизвести видео на ТВС для Apple TV?

Ответ 6

Я использовал этот 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)
    }
}