关于
XCDYouTubeKit 是一个适用于 iOS、tvOS 和 macOS 的 YouTube 视频播放器。
您喜欢 XCDYouTubeKit 吗?您可以通过 推文 表示感谢。我还在接受捐款。:-)
要求
- 在 iOS 8.0 及更高版本上运行
- 在 macOS 10.9 及更高版本上运行
- 在 tvOS 9.0 及更高版本上运行
警告
XCDYouTubeKit 违反 YouTube 的 服务条款。在应用内部播放 YouTube 视频的唯一 官方 方法是使用带有 iframe 播放器 API 的 web view。遗憾的是,这非常缓慢且相当难看,因此我编写了这个播放器,以使用户获得更好的观看体验。
安装
XCDYouTubeKit可以通过CocoaPods、Carthage和Swift包管理器获得。
CocoaPods
pod "XCDYouTubeKit", "~> 2.15"
Carthage
github "0xced/XCDYouTubeKit" ~> 2.15
Swift包管理器
将XCDYouTubeKit
添加到Package.swift
的依赖项值中。
dependencies: [
.package(url: "https://github.com/0xced/XCDYouTubeKit.git", from: "2.15.0")
]
或者,您可以使用提供的静态库或动态框架手动安装。为了使用静态库,您必须:
- 创建一个工作区(文件 → 新建 → 工作区…)
- 将您的项目添加到工作区
- 将XCDYouTubeKit项目添加到工作区
- 将引用自XCDYouTubeKit的
libXCDYouTubeKit.a
文件拖放到您的应用目标的链接二进制与库构建阶段中。
执行这些步骤将确保#import <XCDYouTubeKit/XCDYouTubeKit.h>
在您的项目中可以正常工作。
使用方式
XCDYouTubeKit具有完整文档。
iOS 8.0+ & tvOS(AVPlayerViewController)
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
[self presentViewController:playerViewController animated:YES completion:nil];
__weak AVPlayerViewController *weakPlayerViewController = playerViewController;
[[XCDYouTubeClient defaultClient] getVideoWithIdentifier:videoIdentifier 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];
}
}];
iOS、tvOS和macOS
NSString *videoIdentifier = @"9bZkp7q19f0"; // A 11 characters YouTube video identifier
[[XCDYouTubeClient defaultClient] getVideoWithIdentifier:videoIdentifier completionHandler:^(XCDYouTubeVideo *video, NSError *error) {
if (video)
{
// Do something with the `video` object
}
else
{
// Handle error
}
}];
iOS 8.0
在iOS上,您可以使用类XCDYouTubeVideoPlayerViewController
,就像使用MPMoviePlayerViewController
一样,只不过是以YouTube视频标识符初始化,而不是内容URL。
全屏播放视频
- (void) playVideo
{
XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:@"9bZkp7q19f0"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:videoPlayerViewController.moviePlayer];
[self presentMoviePlayerViewControllerAnimated:videoPlayerViewController];
}
- (void) moviePlayerPlaybackDidFinish:(NSNotification *)notification
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:notification.object];
MPMovieFinishReason finishReason = [notification.userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue];
if (finishReason == MPMovieFinishReasonPlaybackError)
{
NSError *error = notification.userInfo[XCDMoviePlayerPlaybackDidFinishErrorUserInfoKey];
// Handle error
}
}
非全屏播放视频
XCDYouTubeVideoPlayerViewController *videoPlayerViewController = [[XCDYouTubeVideoPlayerViewController alloc] initWithVideoIdentifier:@"9bZkp7q19f0"];
[videoPlayerViewController presentInView:self.videoContainerView];
[videoPlayerViewController.moviePlayer play];
查看示例项目以获取更多代码。
日志记录
自 2.2.0 版本起,XCDYouTubeKit 生成日志。XCDYouTubeKit 支持 CocoaLumberjack,但不要求使用。
有关更多信息,请参阅 XCDYouTubeLogger
类 文档。
致谢
XCDYouTubeKit 中的 URL 提取算法灵感来源于 youtube-dl 项目的 YouTube 提取器 模块。
联系我们
Cédric Luthi
许可证
XCDYouTubeKit 在 MIT 许可证下提供。有关更多信息,请参阅 LICENSE 文件。