LoginSignup
10
15

More than 3 years have passed since last update.

iOSでAVと向き合う Vol.2 AVKitで動画を再生する

Posted at

はじめに

この記事はiOSでAVと向き合うシリーズの第二回になります。
前回はAVFoundationとAVKitの差についてを紹介しました。

今回はAVKitのAVPlayerViewControllerを利用して、動画を再生・各種フィールドやメソッドの動作検証を行います。

本シリーズのゴール

読者の皆様にiOSでAVの再生と作成を行うための基礎と取っ掛かりをインプットし、アプリケーションの開発時に困らなくなることをゴールとします。

前提

  • 前回までの記事をある程度見ている

本記事のゴール

  • AVKitのAVPlayerViewControllerで動画が再生できる
  • AVKitのAVPlayerViewControllerの各種フィールドやメソッドの動作が一通り分かる

事前知識

今回からAVFoundationやAVKitの各クラスでWebで配信されている動画を再生することになります。
Webでの動画配信はどうやって行われるかを事前に解説しておきます。

Webでの動画配信方式

Webで動画を配信するにはストリーミングとプログレッシブ方式の2つがあります。

ストリーミング

インターネット上で動画や音声などのコンテンツをダウンロードしながら逐次再生する方式です。
サーバーから映像や音声データが少しずつ配信され、受信した側で同時に再生します。

ネットワークへの負担が少なく、ダウンロードによる待ち時間が少ないこと、多帯域で動画が配信されている場合は通信状況によって帯域を変えながら再生できるなどがメリットとしてあります。
デメリットとして通信速度によって動画が途切れてしまう・音飛びする、配信側には多数の設備や仕組みが必要なことなどが挙げられます。

プログレッシブ

インターネット上から動画をダウンロード完了させてから再生する方式です。

メリットとしては、一度ダウンロードが完了すればネットワークの状況によらず再生が完了できる点、配信側に専用の仕組みが不要な点があります。
デメリットとしてはネットワークへの負担が大きい点、原則ダウンロードが完了するまで動画は再生できない点が挙げられます。

詳細は参考文献12などを参照のこと。

図に表すと、以下のようになります3
stream_0201.gif

本記事でプログラムの動作検証に利用する動画は、ストリーミング形式の一種であるHLSで配信されている動画4を利用します(Appleがサンプルとして配信している物になります)。

https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8

AVPlayerViewControllerで動画を再生する

今回は前述の通り、HLSの動画を再生するサンプルを作ってみます。
参考文献5のサンプルコードが分かりやすいので、これを参考にしましょう。

UIView内にButton、TableViewやCollection ViewのCell等にアクションを設定し、以下ソースコードを追加してください。

        guard let url = URL(string: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8") else {
            return
        }

        // iOSでAVの情報を管理するためのモデルクラス
        // AVの参照先URL、作成日、尺の長さなどが取得できる
        let asset = AVAsset(url: url)

        // 動画の表示状態や状況を管理するためのモデルクラスを生成
        // 再生時間、再生状態(未定義・準備完了・エラー)、バッファリング済みの動画尺などの取得ができる
        let playerItem = AVPlayerItem(asset: asset)

        // AVの再生や停止、ミュートやアンミュート、ボリューム変更など各種AV操作を行うプレイヤークラス
        // AVPlayerは再生したいAVPlayerItemをセットして行う
        let player = AVPlayer(playerItem: playerItem)

        // AVPlayerViewControllerを生成する
        let controller = AVPlayerViewController()
        // AVPlayerViewControllerに予め生成しておいたAVPlayerをセットする
        controller.player = player

        // AVPlayerViewControllerに遷移する
        present(controller, animated: true) {
            // AVの再生を行う
            player.play()
        }

こんな画面が表示されて、動画の再生が開始されれば成功です。
Simulator Screen Shot - iPhone 8 - 2019-09-23 at 23.17.49.png

プログラムの詳細な説明や各種UIの説明は次回以降で行います。

参考文献

10
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
15