Google提供のyoutube-ios-player-helperを使って、Youtubeの動画をアプリ内で再生してみました。
Googleのドキュメントはこちらです。
https://developers.google.com/youtube/v3/guides/ios_youtube_helper
インストール
CocoaPodsでインストールします。
target 'MyApp' do use_frameworks! pod 'youtube-ios-player-helper' end
使い方
動画再生はYTPlayerViewクラスを使います。
loadメソッドを呼ぶことで動画の読み込みをします。
import UIKit import youtube_ios_player_helper class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let youtubeView = YTPlayerView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 240)) youtubeView.load(withVideoId: "VideoID") view.addSubview(youtubeView) } }
アプリを立ち上げると、下のように動画が表示されている事が分かります。
再生ボタンを押すと全画面表示になって再生が始まります。
Youtube上で動画を非公開にすると、下のようにエラーが表示されました。
YTPlayerViewにdelegateをセットする事も可能です。
用意されているメソッドは下の通りです。
extension ViewController: YTPlayerViewDelegate { func playerViewDidBecomeReady(_ playerView: YTPlayerView) {} func playerView(_ playerView: YTPlayerView, didChangeTo state: YTPlayerState) {} func playerView(_ playerView: YTPlayerView, didChangeTo quality: YTPlaybackQuality) {} func playerView(_ playerView: YTPlayerView, receivedError error: YTPlayerError) {} func playerView(_ playerView: YTPlayerView, didPlayTime playTime: Float) {} func playerViewPreferredWebViewBackgroundColor(_ playerView: YTPlayerView) -> UIColor { return .blue } func playerViewPreferredInitialLoading(_ playerView: YTPlayerView) -> UIView? { return nil } }
ロード時、パラメータを渡す事でプレイヤーの制御をする事ができます。
下では["playsinline": 1]を渡すことで全画面表示しないようにしています。
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let youtubeView = YTPlayerView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 240)) youtubeView.load(withVideoId: "XXX", playerVars: ["playsinline": 1]) view.addSubview(youtubeView) } }
利用できるパラメータは下が詳しいです。
YouTube Embedded Players and Player Parameters | YouTube IFrame Player API | Google Developers
YTPlayerViewは動画の再生メソッド、停止メソッドなども提供しています。
下のようにすることで、動画が自動再生されます。
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let youtubeView = YTPlayerView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 240)) youtubeView.load(withVideoId: "XXXX") youtubeView.delegate = self view.addSubview(youtubeView) } } extension ViewController: YTPlayerViewDelegate { func playerViewDidBecomeReady(_ playerView: YTPlayerView) { playerView.playVideo() } }