YoutubeKit
is a video player that fully supports Youtube IFrame API
and YoutubeDataAPI
to easily create Youtube applications.
YoutubeKit
is created based on the following references. If you are unsure whether it is a normal behavior or a bug, please check the following documents first.
This is an app using YoutubeKit
. A simple video playback example is included into Example
.
You can create these functions very easily by using YoutubeKit
.
Example1 | Example2 |
---|---|
Example3 | Example4 |
YoutubeKit
provides useful functions to create Youtube applications. It consists of the following two functions.
-
YTSwiftyPlayer (WKWebView + HTML5 + IFrame API)
-
YoutubeDataAPI
YTSwiftyPlayer
is a video player that supports Youtube IFrame API.
Features:
- High performance (Performance is 30% better than traditional UIWebView based player)
- Low memory impact (maximum 70% off)
- Type safe parameter interface(All IFrame API's parameters are supported as
VideoEmbedParameter
)
This library supports YoutubeDataAPI (v3)
. For the details is Here.
Available API lists:
- Actitivty(list)
- Actitivty(insert)
- Caption(list)
- Channel(list)
- ChannelSections(list)
- Comment(list)
- CommentThreads(list)
- GuideCategories(list)
- PlaylistItems(list)
- Playlists(list)
- Search(list)
- Subscriptions(list)
- VideoAbuseReportReasons(list)
- VideoCategories(list)
- Videos(list)
Playback the youtube video.
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("_6u6UrtXUEI"),
.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
supports folowing delegate methods.
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)
// 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")
First, Get API key from Here.
Next, add this code in your AppDelegate.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Set your API key here
YoutubeKit.shared.setAPIKey("Your API key")
return true
}
And then you can use YoutubeDataAPI
request like this.
// 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)
}
}
Example of response here.
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)
If you want authorized request such as a getting your activity in Youtube, you set your access token before sending a request.
To use GoogleSignIn
, you can easily get your access token.
pod 'GoogleSignIn'
First, add this code in your 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
}
And then you can use request requiring authorization, this is an example to get your Youtube activity.
// 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 14+
Swift 5+
Add the following to your Package.swift file:
dependencies: [
.package(url: "https://github.com/rinov/YoutubeKit.git", from: "0.10.0")
]
$ pod repo update
And add this to your Podfile:
pod 'YoutubeKit'
and
$ pod install
Add this to your Cartfile:
github "rinov/YoutubeKit"
and
$ carthage update
Github: https://github.com/rinov
Twitter: https://twitter.com/rinov0321
Email: rinov[at]rinov.jp
YoutubeKit is available under the MIT license.