YoutubeKit 0.9.0

YoutubeKit 0.9.0

Ryo Ishikawa 维护。



YoutubeKit

YoutubeKit 是一个支持 Youtube IFrame APIYoutubeDataAPI 的全功能视频播放器,可轻松创建 YouTube 应用程序。

Swift Cocoapods Carthage License

重要参考资料

YoutubeKit 是基于以下参考资料创建的。如果您不确定这是否是正常行为或是一个错误,请先检查以下文档。

示例

这是一个使用 YoutubeKit 的应用程序。包含了一个简单的视频播放示例到 Example 中。您可以通过使用 YoutubeKit 非常容易地创建这些功能。

示例1 示例2
Feed Comment
示例3 示例4
Floating Rotate

什么是 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许可证。