如何在tvOS上播放YouTube内容

Car*_*mas 45 youtube youtube-api tvos

如何在Apple tvOS上播放YouTube视频?

YouTube的嵌入功能适用于iOS 9,因为操作系统有一个我们可以嵌入的UIWebView.新的tvOS不包含UIWebView,因此我看不到嵌入YouTube视频的方法.

Dan*_*orm 44

UIWebView并且MPMoviePlayerController不适用于tvOS.我们的下一个选择是AVPlayer用来播放YouTube视频.

AVPlayer无法播放标准YouTube网址中的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];
Run Code Online (Sandbox Code Playgroud)

请注意,这是不是在允许YouTube的服务条款.使用它需要您自担风险.如果YouTube注意到您未遵守服务条款或YouTube更改了其生成的嵌入代码,则您的应用可能会在任何时候停止工作.

  • HCYoutubeParser仍然受支持吗?似乎对我不起作用 (2认同)

Bur*_*000 18

Swift 2.0版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()
Run Code Online (Sandbox Code Playgroud)

  • 你是如何设置HCYoutubeParser导入Swift的?尝试使用CocoaPods但是`use_frameworks!`会破坏我现有的Obj-C代码. (2认同)
  • 我手动引入了parser.h和.m (2认同)

Nic*_*ick 6

XCDYouTubeKit已成为在iOS上直接播放YouTube视频的流行方式,开发人员最近更新了它以支持新的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];
    }
}];
Run Code Online (Sandbox Code Playgroud)

Swift示例在这里.

  • 是的,XCDYouTubeKit 可以。另请参阅:[Apple 批准使用 XCDYouTubeKit 的应用程序的讨论](https://github.com/0xced/XCDYouTubeKit/issues/121) (2认同)

Joe*_*ris 5

可悲的是,即便是苹果员工也对此表示"负面".来自Apple Developer Forums主题的主题:

tvOS上不支持WebViews,因此iframe实现不起作用.TVML不提供此功能.