如何在Apple tvOS上播放YouTube视频?
YouTube的嵌入功能在iOS 9中可以使用,因为该操作系统具有我们可以将其嵌入其中的UIWebView。但是,新的tvOS不包括UIWebView,所以我无法找到一种嵌入YouTube视频的方式。
如何在Apple tvOS上播放YouTube视频?
YouTube的嵌入功能在iOS 9中可以使用,因为该操作系统具有我们可以将其嵌入其中的UIWebView。但是,新的tvOS不包括UIWebView,所以我无法找到一种嵌入YouTube视频的方式。
UIWebView
和 MPMoviePlayerController
在tvOS上不可用。我们的下一个选择是使用 AVPlayer
播放YouTube视频。
AVPlayer
无法从标准的YouTube URL(如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的服务条款,此举是不允许的。使用需自行承担风险。如果YouTube注意到您没有遵守服务条款或更改了其生成的嵌入代码,您的应用程序随时可能停止工作。
UIWebView
,因此它们不适用于 tvOS。我预计 YouTube 会在某个时候为 tvOS 发布自己的库,就像他们为 iOS 做的一样 这里。 - Daniel StormDaniel Storm的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()
use_frameworks!
会破坏我的现有Obj-C代码。 - NickXCDYouTubeKit一直是在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];
}
}];
{{链接1:这里有Swift示例。}}
可悲的是,即使一位苹果员工也对此表示了“否定”。从有关主题的Apple Developer论坛帖子中得知:
tvOS不支持WebViews,因此iframe实现无法使用。TVML没有提供这种功能。
youtube://watch/video_id
将打开 YouTube 应用并播放 YouTube 视频。
享受吧。
<lockup videoURL="http://mp4-url.mp4">
<img src="video thumbnail.jpg" />
</lockup>
为了使这个工作起来,您需要直接视频文件(mp4),但这也是Youtube TOS不允许的。
编辑,还发现了.JS解决方案: 如何在Apple TV上播放视频?
我使用了这个 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)
}
}