しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【Swift】Youtube動画をアプリ内で再生する

Google提供のyoutube-ios-player-helperを使って、Youtubeの動画をアプリ内で再生してみました。

github.com

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)
    }
}

アプリを立ち上げると、下のように動画が表示されている事が分かります。

f:id:llcc:20170919125022p:plain

再生ボタンを押すと全画面表示になって再生が始まります。

f:id:llcc:20170919125036p:plain

Youtube上で動画を非公開にすると、下のようにエラーが表示されました。

f:id:llcc:20170919125237p:plain

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() }
}