LoginSignup
27
26

More than 5 years have passed since last update.

iOSで動画を再生する

Last updated at Posted at 2018-06-12

動画を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.
    }
}
27
26
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
27
26