YoutubeKit
YoutubeKit
是一个支持 Youtube IFrame API
和 YoutubeDataAPI
的全功能视频播放器,可轻松创建 YouTube 应用程序。
重要参考资料
YoutubeKit
是基于以下参考资料创建的。如果您不确定这是否是正常行为或是一个错误,请先检查以下文档。
示例
这是一个使用 YoutubeKit
的应用程序。包含了一个简单的视频播放示例到 Example
中。您可以通过使用 YoutubeKit
非常容易地创建这些功能。
示例1 | 示例2 |
---|---|
![]() |
![]() |
示例3 | 示例4 |
![]() |
![]() |
什么是 YoutubeKit?
YoutubeKit
提供用于创建 YouTube 应用程序的有用函数。它包括以下两个功能。
-
YTSwiftyPlayer (WKWebView + HTML5 + IFrame API)
-
YoutubeDataAPI
YTSwiftyPlayer
YTSwiftyPlayer
是一个支持 YouTube IFrame API 的视频播放器。
特性
- 高性能(性能比传统基于 UIWebView 的播放器提高 30%)
- 低内存占用(最大降低 70%)
- 类型安全的参数接口(所有 IFrame API 的参数都支持为
VideoEmbedParameter
)
YoutubeDataAPI
此库支持 YoutubeDataAPI (v3)
。详情请参考 此处。
可用的 API 列表
- 活动(列表)
- 活动(插入)
- 字幕(列表)
- 频道(列表)
- 频道分类(列表)
- 评论(列表)
- 评论线程(列表)
- 指南分类(列表)
- 播放列表项目(列表)
- 播放列表(列表)
- 搜索(列表)
- 订阅(列表)
- 视频滥用报告原因(列表)
- 视频分类(列表)
- 视频(列表)
开始使用
播放 YouTube 视频。
import YoutubeKit
final class VideoPlayerController: UIViewController {
private var player: YTSwiftyPlayer!
override func viewDidLoad() {
super.viewDidLoad()
// Create a new player
player = YTSwiftyPlayer(
frame: .zero,
playerVars: [
.playsInline(false),
.videoID("9AALILYu58w"),
.loopVideo(true),
.showRelatedVideo(false),
.autoplay(true)
])
view = player
player.delegate = self
// Load video player
let playerPath = Bundle(for: ViewController.self).path(forResource: "player", ofType: "html")!
let htmlString = try! String(contentsOfFile: playerPath, encoding: .utf8)
player.loadPlayerHTML(htmlString)
}
}
YTSwiftyPlayerDelegate
YTSwiftyPlayerDelegate
支持以下代理方法。
func playerReady(_ player: YTSwiftyPlayer)
func player(_ player: YTSwiftyPlayer, didUpdateCurrentTime currentTime: Double)
func player(_ player: YTSwiftyPlayer, didChangeState state: YTSwiftyPlayerState)
func player(_ player: YTSwiftyPlayer, didChangePlaybackRate playbackRate: Double)
func player(_ player: YTSwiftyPlayer, didReceiveError error: YTSwiftyPlayerError)
func player(_ player: YTSwiftyPlayer, didChangeQuality quality: YTSwiftyVideoQuality)
func apiDidChange(_ player: YTSwiftyPlayer)
func youtubeIframeAPIReady(_ player: YTSwiftyPlayer)
func youtubeIframeAPIFailedToLoad(_ player: YTSwiftyPlayer)
播放期间调用 IFrame API。
// Pause the video.
player.pauseVideo()
// Seek after 15 seconds.
player.seek(to: 15, allowSeekAhead: true)
// Set a mute.
player.mute()
// Load another video.
player.loadVideo(videoID: "abcde")
使用 YoutubeDataAPI 获取视频信息
首先,从这里获取API密钥。
接下来,将此代码添加到您的AppDelegate中。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Set your API key here
YoutubeKit.shared.setAPIKey("Your API key")
return true
}
然后,您可以使用此方式请求YoutubeDataAPI
。
// Get youtube chart ranking
let request = VideoListRequest(part: [.id, .statistics], filter: .chart)
// Send a request.
YoutubeAPI.shared.send(request) { result in
switch result {
case .success(let response):
print(response)
case .failed(let error):
print(error)
}
}
这里展示了响应示例。
VideoList(items: [YoutubeKit.Video(etag: "\"A8kisgyDEbllhHF9ooXPFFrkc/nR6_A9oyIoLTJuucY_UXeasjYNU\"",
kind: "youtube#video",
id: "jeiDjeJgF0",
contentDetails: nil,
statistics: Optional(YoutubeKit.Statistics.VideoList(dislikeCount: "1631", likeCount: "60307", commentCount: Optional("8675"), favoriteCount: "0", viewCount: "1259046")),
snippet: nil,
status: nil),
etag: "\"J67fSnfblalhHF0foXPiFFrkc/TZGPJdE22-LilSv4-3VNoPw1cS4\"",
kind: "youtube#videoListResponse",
pageInfo: YoutubeKit.PageInfo(resultsPerPage: 5, totalResults: 200))
获取下一页(分页)
var nextPageToken: String?
...
// Send some request
YoutubeAPI.shared.send(request) { [weak self] result in
switch result {
case .success(let response):
// Save nextPageToken
self?.nextPage = response.nextPageToken
case .failed(let error):
print(error)
}
}
...
// Set nextPageToken
let request = VideoListRequest(part: [.id], filter: .chart, nextPageToken: nextPageToken)
授权请求
如果您想要进行授权请求,如获取在YouTube上的活动,请在发送请求之前设置您的访问令牌。要使用GoogleSignIn
,您可以轻松获取您的访问令牌。在Podfile中添加此命令:pod 'GoogleSignIn'
。
首先,将此代码添加到您的AppDelegate中。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Set your access token for autheticate request
YoutubeKit.shared.setAccessToken("Your access token")
return true
}
然后,您可以使用需要授权的请求,以下是一个获取YouTube活动的示例。
// Get your Youtube activity
let request = ActivityListRequest(part: [.snippet], filter: .mine(true))
// Send a request.
YoutubeAPI.shared.send(request) { result in
switch result {
case .success(let video):
print(video)
case .failed(let error):
print(error)
}
}
要求
Xcode 12+
Swift 5+
安装
Swift Package Manager
将以下内容添加到您的Package.swift文件中
dependencies: [
.package(url: "https://github.com/rinov/YoutubeKit.git", from: "0.8.0")
]
Cocoapods
$ pod repo update
然后在Podfile中添加以下内容:
pod 'YoutubeKit'
然后
$ pod install
Carthage
请将此内容添加到您的Cartfile中
github "rinov/YoutubeKit"
然后
$ carthage update
作者
Github: https://github.com/rinov
Twitter: https://twitter.com/rinov0321
Email: rinov[at]rinov.jp
许可证
YoutubeKit 遵循MIT许可证。