Help us understand the problem. What is going on with this article?

iOS 複数動画同時再生

More than 1 year has passed since last update.

複数動画再生には複数の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)

を行ってください。

Mtatuto
株式会社バックムーン/ Buckmoon Inc. CTO Web/iOS/Android 開発者です。今までに30以上のアプリ/サービスをリリースしています。 StartPlayer https://www.startplayer.io/ おしえてポン https://apps.apple.com/jp/app/id807458120
https://www.buckmoon.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした