前回の記事では一つの動画を再生する方法を実装した。
今回は複数の動画を連続して再生する方法に挑戦してみよう。

前回の記事
[iOS] 動画を再生する 
 
複数の動画を連続再生するには前回の記事で扱ったコードで、再生完了時に次の動画を用意して新しいプレイヤーを作成して…というやり方でも可能ではあるが、もっと簡単な方法がある。
AVQueuePlayerを使うことだ。

AVQueuePlayerに動画アイテムを登録しておけば、後はキュープレイヤーが勝手に連続再生してくれる。

それでは実装を開始しよう。
まずはベースとなるViewControllerはこのようになる。

1.AVPlayerの代わりにAVQueuePlayerを使用する。

2.再生する動画アイテムを保持するためのArrayを用意する。

基本的なところは前回記事と同じなのでそれらの説明はここでは省略する。
次に、動画アイテムを用意する。
今回はバンドルにあるtest1.movとtest2.movを連続再生する。
viewDidLoadメソッドに以下を追加しよう。

1.動画アイテムの入れ物を作成する。

2.動画アイテムを作成し、MutableArrayに保持する。

3.キュープレイヤーを作成する。

これで動画アイテムの準備は完成だ。
次はsetupPlayerメソッドを実装する。

1.ここは前回と同じなので特に説明はいらないだろう。

2.一旦動画アイテムを全てキュープレイヤーから削除する。
 このサンプルでは、再生中に"再生開始"ボタンを押すと頭から再生し直す仕様なので、こうしている。
 キュープレイヤーに既に存在する動画アイテムと同じものを追加しようとするとアプリが落ちるのでこの処理は必須だ。

3.動画アイテムを全て登録し直す。

4.動画アイテムを頭出しする。
 前回の記事ではプレイヤーに対して頭出しを行ったが、今回は動画アイテムに対して頭出しを行う。
 プレイヤーに対して頭出しを行う必要はない。

その他の注意点としては、再生完了した動画アイテムは自動的にプレイヤーから削除されるようなので気をつけよう。
(Queueなので当然といえば当然だが、これはハマりやすい罠だ。)

それでは実行してみよう。
動画が連続して再生されたはずだ!

二度目以降の再生時の問題
ここで一つ気になる現象が発生している。
2つ目の動画が再生完了した後に再度再生開始ボタンを押すと、連続再生を開始することはするのだが、開始前に2つ目の動画の最後のフレームが一瞬映ってしまう。
これはクールではないので、何とかしよう。

と思って色々試してみたのだが、どうも上手くいかない。
しょうがないので、プレイヤーレイヤーを作り直す方法で妥協することにした。

1.動画アイテムを登録し直す。

2.プレイヤーレイヤーを作成し直す。
 もちろん、以前使用したプレイヤーレイヤーを削除することを忘れてはいけない。

さあ、実行してみよう。
想定通りの動きになった!