LoginSignup
39
41

More than 5 years have passed since last update.

iOS 複数動画同時再生

Last updated at Posted at 2016-06-10

複数動画再生には複数のAVPlayerとAVPlayerLayerを使います。

イメージは以下の通りです
Screen Shot 2016-06-10 at 4.05.49 PM.png

次はコードです。

player.swift
/// プレイヤーを用意
let player1 = AVPlayer(URL: url1) 
let player2 = AVPlayer(URL: url2)
let player3 = AVPlayer(URL: url3)
let player4 = AVPlayer(URL: url4)

/// 各レイヤーにプレイヤーを関連付ける
let playerLayer1 = AVPlayerLayer(player: player1)
let playerLayer2 = AVPlayerLayer(player: player2)
let playerLayer3 = AVPlayerLayer(player: player3)
let playerLayer4 = AVPlayerLayer(player: player4)

/// 各レイヤーの位置・サイズをつけ貼り付け
playerLayer1.frame = CGRectMake(0,0,200,50)
playerLayer2.frame = CGRectMake(200,0,200,50)
playerLayer3.frame = CGRectMake(0,50,200,50)
playerLayer4.frame = CGRectMake(200,50,200,50)
self.view.layer.addSublayer(playerLayer1)
self.view.layer.addSublayer(playerLayer2)
self.view.layer.addSublayer(playerLayer3)
self.view.layer.addSublayer(playerLayer4)

別に1プレイヤー1レイヤーである必要はありません。
以下のイメージで作ってもいいです。

Screen Shot 2016-06-10 at 4.14.27 PM.png

player.swift
/// プレイヤーを用意
let player1 = AVPlayer(URL: url1) 

/// 各レイヤーにプレイヤーを関連付ける
/// 今回は全てプレイヤー1
let playerLayer1 = AVPlayerLayer(player: player1)
let playerLayer2 = AVPlayerLayer(player: player1)
let playerLayer3 = AVPlayerLayer(player: player1)
let playerLayer4 = AVPlayerLayer(player: player1)

/// 各レイヤーの位置・サイズをつけ貼り付け
playerLayer1.frame = CGRectMake(0,0,200,50)
playerLayer2.frame = CGRectMake(200,0,200,50)
playerLayer3.frame = CGRectMake(0,50,200,50)
playerLayer4.frame = CGRectMake(200,50,200,50)
self.view.layer.addSublayer(playerLayer1)
self.view.layer.addSublayer(playerLayer2)
self.view.layer.addSublayer(playerLayer3)
self.view.layer.addSublayer(playerLayer4)

あるアプリ開発では
以下のように、画面下部にサムネイルのように動画を再生させ、
タッチ操作などで、上部のメインのレイヤーに関連付けるプレイヤーを
切り替えいる方法を行いました。

Screen Shot 2016-06-10 at 4.19.55 PM.png

端末によって同時再生数が決まっています。
僕が試している限りではiPhone6, iPad Pro などは16です。
また、AVPlayerの動画との紐付けを解放しないと、4つ再生した後に、その画面のコントローラを解放した後にまた4つ、次もまた4つと再生し、同時再生数の上限に達した時に動画が再生できなくなります。

なのでAVPlayerが必要なくなった時は必ず

self.player.replaceCurrentItemWithPlayerItem(nil)

を行ってください。

39
41
3

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
39
41