はじめに
YouTube大好き!!
週に17時間26分見るくらい好き!!
この時間を法律の勉強に充てれば大体4年で司法試験に合格できる。
最近気になってるのが
履歴から動画再生したら前停止したとこから再生できるんだけど?!?!?!?!
めっちゃ便利なんで?!これなんで?!
目的
YTSwiftyPlayerの基本的な使用法を学ぶ。
evaluateJavaScriptメソッドの使用法を理解する。
YouTube動画のシーク操作を理解する。
YoutubeKit
結論から言うとよくわからんかった
でもYoutubeKitというライブラリを見つけた。
この中にシークバーに関するメソッドも存在したのでそこから想像してみたいと思う。
YoutubeKitについてChatGPTに雑に投げてみた。
YoutubeKitは、Youtube IFrame APIおよびYoutubeDataAPIを完全にサポートするビデオプレーヤーです。
これにより、Youtubeアプリケーションを簡単に作成できます。
このライブラリは、rinovによってGitHubで公開されており、Swiftで書かれています。
主な特徴:
YTSwiftyPlayer: Youtube IFrame APIをサポートするビデオプレーヤーです。これにより、高性能でメモリ効率の良いビデオプレーヤーを実装できます。
YoutubeDataAPI: YoutubeDataAPI(v3)をサポートしており、様々なAPIリクエストを行うことができます。
使用方法:
YoutubeKitを使用すると、Youtubeビデオの再生や、YoutubeDataAPIを使用したビデオ情報の取得などが可能になります。また、認証リクエストもサポートしており、GoogleSignInを使用してアクセストークンを取得できます。
以下が再生地点に関するメソッド群
public func seek(to seconds: Int, allowSeekAhead: Bool) {
evaluatePlayerCommand("seekTo(\(seconds),\(allowSeekAhead ? 1 : 0))")
}
// Evaluate javascript command and convert to simple error(nil) if an error is occurred.
private func evaluatePlayerCommand(_ commandName: String, callbackHandler: ((Any?) -> ())? = nil) {
let command = "player.\(commandName);"
evaluateJavaScript(command) { (result, error) in
callbackHandler?(error != nil ? nil : result)
}
}
何してるの?
-
public func seek(to seconds: Int, allowSeekAhead: Bool)
動画を特定の時間位置にシークするためのメソッド。evaluatePlayerCommandメソッドを呼び出してJavaScriptコマンドを評価します。 -
private func evaluatePlayerCommand(_ commandName: String, callbackHandler: ((Any?) -> ())? = nil)
JavaScriptスクリプトを評価し、その結果またはエラーをオプショナルなコールバックハンドラーに渡すメソッド。
動作の流れ:
シークメソッドの呼び出し:
seek(to: 30, allowSeekAhead: true)
# この呼び出しにより、evaluatePlayerCommandメソッドが以下のコマンドで呼び出されます。
"seekTo(30,1)"
# evaluatePlayerCommandメソッドは、構築したコマンドをevaluateJavaScriptメソッドで評価します。
"player.seekTo(30,1);"
# このJavaScriptコマンドが評価され、動画は30秒の位置にシークします。
結果の処理:
コマンドの評価が完了すると、結果またはエラーがコールバックハンドラーに渡されます。`必要に応じて結果の処理やエラーハンドリングを追加できます。
直接player.seekTo()呼ぶじゃダメなの?
- player.seekTo()はJavaScriptのメソッドで、Swiftから直接呼び出すことはできません。
SwiftからJavaScriptのメソッドを呼び出すには、evaluateJavaScriptのようなメソッドを使用してJavaScriptコードを定義する必要があります。 - evaluatePlayerCommand(_:)メソッドは、このJavaScriptコードの定義をカプセル化し、SwiftのコードからJavaScriptのメソッドを簡単に呼び出すためのインターフェースを提供する。
まとめ
seekToの内部処理までおいたかったが断念。
ただ、上記ライブラリのような書き方、特に単一責任の原則がきっちり守られてて美しいコードを書けるようになりたいと思いました。
YouTubeおもれぇからみんなも見ようぜ。