如何在tvOS上播放YouTube内容

时间:2015-09-11 17:02:24

标签: youtube youtube-api tvos

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

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

7 个答案:

答案 0 :(得分:44)

UIWebViewMPMoviePlayerController不适用于tvOS。我们的下一个选择是使用AVPlayer播放YouTube视频。

https://www.youtube.com/watch?v=8To-6VIJZRE无法播放标准YouTube网址中的YouTube视频,即。 AVPlayer。它需要一个直接的URL到视频文件。使用HCYoutubeParser我们可以完全实现。获得我们需要的网址后,我们就可以使用我们的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]; 进行播放:

void CloseProcesses()
{
    Process[] arrProcesses = Process.GetProcesses();
    List<string> lststrProcessNames = new List<string>();

    /*Writes current running processes(+ taskmanager process) in a list*/
    foreach (Process CurrentProcess in arrProcesses)
    {
        lststrProcessNames.Add(CurrentProcess.ProcessName);
    }
    lststrProcessNames.Add("taskmgr");

    try
    {
        Process[] arrNewProcesses = Process.GetProcesses();
        foreach (Process NewCurrentProcess in arrNewProcesses)
        {
            if (lststrProcessNames.Contains(NewCurrentProcess.ProcessName))
            {
                CloseProcesses();
            }
            else
            {
                NewCurrentProcess.Kill();
            }
        }
    }
    catch
    {
        this.Close();
    }
}

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

答案 1 :(得分:18)

丹尼尔风暴的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()

答案 2 :(得分:6)

XCDYouTubeKit一直是在iOS上直接播放YouTube视频的热门方式,开发人员最近对其进行了更新,以支持新的AppleTV。

以下是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.

答案 3 :(得分:5)

可悲的是,即便是苹果员工也对此表示“负面”。来自Apple Developer Forums thread on the topic

  

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

答案 4 :(得分:1)

作为Daniel Storm的回答的补充,你也可以使用新的TVML语言来实现这个目的:

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

(为此,你需要直接视频文件(mp4),这也是Youtube TOS不允许的)

编辑,也发现了.JS解决方案: How do I play a video on tvOS for Apple TV?

答案 5 :(得分:1)

经过一番尝试,我很高兴地宣布:

youtube://watch/video_id

将打开YouTube应用并播放YouTube视频。

享受。

答案 6 :(得分:0)

我使用了这个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)
    }
}