Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

iOSで動画を再生する

More than 1 year has passed since last update.

動画を1つ再生する

PlayerViewController.swift
import UIKit
import AVFoundation

class PlayerViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 動画ファイルのURLを取得
        let url = URL(string: "url")

        // 生成
        let player = AVPlayer(url: url!)

        // レイヤーの追加
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)

        // 再生
        player.play()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

複数の動画を連続で再生する

PlayerViewController.swift
import UIKit
import AVFoundation

class PlayerViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // 動画ファイルのURLを取得
        let url1 = URL(string: "url")
        let url2 = URL(string: "url")
        let url3 = URL(string: "url")
        let url4 = URL(string: "url")
        let url5 = URL(string: "url")

        // アイテム取得
        let playerItem1 = AVPlayerItem(url: url1!)
        let playerItem2 = AVPlayerItem(url: url2!)
        let playerItem3 = AVPlayerItem(url: url3!)
        let playerItem4 = AVPlayerItem(url: url4!)
        let playerItem5 = AVPlayerItem(url: url5!)

        // 生成
        let queuePlayer = AVQueuePlayer(items: [playerItem1, playerItem2, playerItem3, playerItem4, playerItem5])

        // レイヤーの追加
        let playerLayer = AVPlayerLayer(player: queuePlayer)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)

        // 再生
        queuePlayer.play()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

イベントを取得する(タッチで次の動画へ)

PlayerViewController.swift
import UIKit
import AVFoundation

class PlayerViewController: UIViewController {

    // AVPlayer.
    var queuePlayer : AVQueuePlayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        // メインビューのスタイル追加
        self.view.backgroundColor = UIColor.black

        // 動画ファイルのURLを取得
        let url1 = URL(string: "url")
        let url2 = URL(string: "url")
        let url3 = URL(string: "url")
        let url4 = URL(string: "url")
        let url5 = URL(string: "url")

        // アイテム取得
        let playerItem1 = AVPlayerItem(url: url1!)
        let playerItem2 = AVPlayerItem(url: url2!)
        let playerItem3 = AVPlayerItem(url: url3!)
        let playerItem4 = AVPlayerItem(url: url4!)
        let playerItem5 = AVPlayerItem(url: url5!)

        // 生成
        self.queuePlayer = AVQueuePlayer(items: [playerItem1, playerItem2, playerItem3, playerItem4, playerItem5])

        // レイヤーの追加
        let playerLayer = AVPlayerLayer(player: self.queuePlayer)

        // スタイルの追加
        playerLayer.frame = self.view.bounds
        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

        // タップして閉じるをやっていく
        let screenView = UIView()
        screenView.frame = self.view.bounds

        // ジェスチャーを追加
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tapToNext))
        screenView.addGestureRecognizer(tapGestureRecognizer)

        // サブビューの追加
        self.view.layer.addSublayer(playerLayer)
        self.view.addSubview(screenView)

        // 再生
        self.queuePlayer.play()
    }

    // 画面をタップ
    @objc func tapToNext(_ sender: UITapGestureRecognizer) {
        // 次の動画へ
        self.queuePlayer.advanceToNextItem()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

AVQueuePlayerを使わずにAVPlayerで複数ビデオの連続再生

PlayerViewController.swift
import UIKit
import AVFoundation

class PlayerViewController: UIViewController {

    // AVPlayer.
    var player : AVPlayer! = AVPlayer()
    var playerItems: [AVPlayerItem] = []
    var currentTrack = 0

    override func viewDidLoad() {
        super.viewDidLoad()

        // メインビューのスタイル追加
        self.view.backgroundColor = UIColor.black

        // 動画ファイルのURLを取得
        let url1 = URL(string: "url")
        let url2 = URL(string: "url")
        let url3 = URL(string: "url")
        let url4 = URL(string: "url")
        let url5 = URL(string: "url")

        // アイテム取得
        let playerItem1 = AVPlayerItem(url: url1!)
        let playerItem2 = AVPlayerItem(url: url2!)
        let playerItem3 = AVPlayerItem(url: url3!)
        let playerItem4 = AVPlayerItem(url: url4!)
        let playerItem5 = AVPlayerItem(url: url5!)

        // 生成
        playerItems = [playerItem1, playerItem2, playerItem3, playerItem4, playerItem5]

        // レイヤーの追加
        let playerLayer = AVPlayerLayer(player: player)

        // スタイルの追加
        playerLayer.frame = self.view.bounds
        playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

        // タップして閉じるをやっていく
        let screenView = UIView()
        screenView.frame = self.view.bounds

        // ジェスチャーを追加
        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.rightAreaTap))
        screenView.addGestureRecognizer(tapGestureRecognizer)

        // サブビューの追加
        self.view.layer.addSublayer(playerLayer)
        self.view.addSubview(screenView)

        // 再生
        self.playTrack()
    }

    func playTrack()
    {
        if self.playerItems.count > 0 {
            self.player.replaceCurrentItem(with: self.playerItems[currentTrack])
            self.player.play()
        }
    }

    // 画面の左側をタップ
    @objc func leftAreaTap(_ sender: UITapGestureRecognizer) {
        // 前の動画へ
        if self.currentTrack - 1 < 0 {
            self.currentTrack = (self.playerItems.count - 1) < 0 ? 0 : (self.playerItems.count - 1)
        } else {
            self.currentTrack -= 1
        }
        self.playTrack()
    }

    // 画面の右側をタップ
    @objc func rightAreaTap(_ sender: UITapGestureRecognizer) {
        // 次の動画へ
        if self.currentTrack + 1 < self.playerItems.count {
            self.currentTrack += 1;
        } else {
            self.currentTrack = 0
        }
        self.playTrack()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
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