youtubeの動画再生

激務に追われてましたが、久々にSwiftを触ることができました。

本日は Swift で動画(youtube)の再生にトライです。

ざっと調べた感じだと再生の仕方は次の3通りあるみたいです。

  • UIWebViewを使う(一番簡単!)
  • MPMoviePlayerController を使う
  • AVPlayer を使う

今回は上2つです。

UIWebView を使う

UIWebView での再生は動画の埋め込みですね。さくっと書くとこんな感じです。

        var url = NSURL.URLWithString("https://www.youtube.com/embed/We3uAyJJ9Fo?feature=player_detailpage&playsinline=1")
        var urlRequest: NSURLRequest = NSURLRequest(URL: url)
        self.webview.allowsInlineMediaPlayback = true;
        self.webview.loadRequest(urlRequest)

ちなみにしれっと出てきましたが、「playsinline=1」は動画再生時に全画面にならないようにするために必要みたいです。 知ってると便利ですね。

MPMoviewPlayerCOntroller を使う

標準で提供されている動画のPlayerです。使う場合はimportしてやる必要があります。

import MediaPlayer

この場合、youtubeを再生するには単純にURLを指定するだけではNGで、ちょっと小細工が必要になります。 具体的には srcとなるURL から再生用のURLを取得する必要があります。

今回は、HCYoutubeParser というライブラリを使用しました。

hellozimi/HCYoutubeParser · GitHub

cocoapodsにも登録されているので、Podfileでのインストールが可能です。 Objective-Cなので、インストール後は bridge-headerファイルに

#import "HCYoutubeParser.h"

としてやればOKです。あとは、

        var srcUrl = NSURL.URLWithString("https://www.youtube.com/embed/We3uAyJJ9Fo?feature=player_detailpage&playsinline=1")
        var dict = HCYoutubeParser.h264videosWithYoutubeURL(srcUrl)
        var url = NSURL.URLWithString(dict["medium"] as NSString)
        moviePlayer = MPMoviePlayerController(contentURL: url)
        moviePlayer.view.frame = CGRect(x: 20, y: 100, width: 200, height: 150)
        self.view.addSubview(moviePlayer.view)

と言った感じで、ライブラリを利用してURLをを取得し、MPMoviePlayerController に渡してやれば出来上がりです。 iOS8 でもちゃんと動作しました。

何かアプリが作れそうな気がしてきますね!