All Projects → rinov → Youtubekit

rinov / Youtubekit

Licence: mit
YoutubeKit is a video player that fully supports Youtube IFrame API and YoutubeDataAPI for easily create a Youtube app

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Youtubekit

Vgplayer
📺 A simple iOS video player by Vein.
Stars: ✭ 383 (-20.87%)
Mutual labels:  video-player, cocoapods, carthage
Corenavigation
📱📲 Navigate between view controllers with ease. 💫 🔜 More stable version (written in Swift 5) coming soon.
Stars: ✭ 69 (-85.74%)
Mutual labels:  api-wrapper, cocoapods, carthage
Swiftyjson
The better way to deal with JSON data in Swift.
Stars: ✭ 21,042 (+4247.52%)
Mutual labels:  cocoapods, carthage
Hokusai
A Swift library to provide a bouncy action sheet
Stars: ✭ 431 (-10.95%)
Mutual labels:  cocoapods, carthage
Googlereporter
Easily integrate with Google Analytics in your iOS app
Stars: ✭ 479 (-1.03%)
Mutual labels:  cocoapods, carthage
Swiftyxmlparser
Simple XML Parser implemented in Swift
Stars: ✭ 413 (-14.67%)
Mutual labels:  cocoapods, carthage
Tweetextfield
Lightweight set of text fields with nice animation and functionality. 🚀 Inspired by https://uimovement.com/ui/2524/input-field-help/
Stars: ✭ 421 (-13.02%)
Mutual labels:  cocoapods, carthage
Arslineprogress
iOS progress bar, replacement for the default activity indicator.
Stars: ✭ 434 (-10.33%)
Mutual labels:  cocoapods, carthage
Coding Ios
CODING iOS 客户端源代码
Stars: ✭ 3,771 (+679.13%)
Mutual labels:  cocoapods, carthage
Urweatherview
Show the weather effects onto view written in Swift4.2
Stars: ✭ 439 (-9.3%)
Mutual labels:  cocoapods, carthage
Azteceditor Ios
A reusable native iOS visual HTML text editor component.
Stars: ✭ 437 (-9.71%)
Mutual labels:  cocoapods, carthage
Pytube
A lightweight, dependency-free Python library (and command-line utility) for downloading YouTube Videos.
Stars: ✭ 4,979 (+928.72%)
Mutual labels:  api-wrapper, youtube
Simpleimageviewer
A snappy image viewer with zoom and interactive dismissal transition.
Stars: ✭ 408 (-15.7%)
Mutual labels:  cocoapods, carthage
Gradientcircularprogress
Customizable progress indicator library in Swift
Stars: ✭ 407 (-15.91%)
Mutual labels:  cocoapods, carthage
Agrume
🍋 A lemony fresh iOS image viewer written in Swift.
Stars: ✭ 449 (-7.23%)
Mutual labels:  cocoapods, carthage
Viperit
Viper Framework for iOS using Swift
Stars: ✭ 404 (-16.53%)
Mutual labels:  cocoapods, carthage
Chromacolorpicker
🎨 An intuitive iOS color picker built in Swift.
Stars: ✭ 434 (-10.33%)
Mutual labels:  cocoapods, carthage
Xmlcoder
Easy XML parsing using Codable protocols in Swift
Stars: ✭ 460 (-4.96%)
Mutual labels:  cocoapods, carthage
Taggerkit
🏷 TaggerKit helps you to quickly implement tags in your UIKit apps, so you can go on and test your idea without having to worry about logic and custom collection layouts.
Stars: ✭ 390 (-19.42%)
Mutual labels:  cocoapods, carthage
Stepslider
StepSlider its custom implementation of slider such as UISlider for preset integer values.
Stars: ✭ 391 (-19.21%)
Mutual labels:  cocoapods, carthage

YoutubeKit

YoutubeKit is a video player that fully supports Youtube IFrame API and YoutubeDataAPI to easily create Youtube applications.

Swift Cocoapods Carthage License

Important Referecens

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.

Example

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
Feed Comment
Example3 Example4
Floating Rotate

What is YoutubeKit?

YoutubeKit provides useful functions to create Youtube applications. It consists of the following two functions.

  • YTSwiftyPlayer (WKWebView + HTML5 + IFrame API)

  • YoutubeDataAPI

YTSwiftyPlayer

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)

YoutubeDataAPI

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)

Get Started

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: CGRect(x: 0, y: 0, width: 640, height: 480),
                    playerVars: [.videoID("videoID-abcde")])

        // Enable auto playback when video is loaded
        player.autoplay = true
        
        // Set player view.
        view = player

        // Set delegate for detect callback information from the player.
        player.delegate = self
        
        // Load the video.
        player.loadPlayer()
    }
}

YTSwiftyPlayerDelegate

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)

Call IFrame API during playback.

// 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")

Get video information using YoutubeDataAPI

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.
ApiSession.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))

Fetch the next page (Pagination)

var nextPageToken: String?
...

// Send some request
ApiSession.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)

Authorization Request

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.
ApiSession.shared.send(request) { result in
    switch result {
    case .success(let video):
        print(video)
    case .failed(let error):
        print(error)
    }
}

Requirements

XCode 10.2+

Swift 4+

Installation

Cocoapods

$ pod repo update

And add this to your Podfile:

pod 'YoutubeKit'

and

$ pod install

Carthage

Add this to your Cartfile:

github "rinov/YoutubeKit"

and

$ carthage update

Author

Github: https://github.com/rinov

Twitter: https://twitter.com/rinov0321

Email: rinov[at]rinov.jp

License

YoutubeKit is available under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].