在容器视图中播放本地视频Swift 4

时间:2018-03-05 09:25:23

标签: ios swift avplayer avkit

我正在尝试在名为AVPlayerViewController的容器视图中播放视频,但是当您单击播放器视图播放视频时,它不会播放。有没有什么办法解决这一问题?以下是我用来尝试播放视频的代码:

import UIKit
import AVKit

class IntroductionViewController: UIViewController {

    var avPlayer: AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    func playVideo() {

        let filepath: String? = Bundle.main.path(forResource: "Video", ofType: "mp4")
        let fileURL = URL.init(fileURLWithPath: filepath!)

        avPlayer = AVPlayer(url: fileURL)
        let avPlayerController = AVPlayerViewController()
        avPlayerController.player = avPlayer
        avPlayerController.showsPlaybackControls = true
        avPlayerController.view.frame = CGRect(x: 44, y: 128, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)

        // Turn on video controlls 
          avPlayerController.showsPlaybackControls = true

        // play video

        avPlayerController.player?.play()
        self.view.addSubview(avPlayerController.view)

    }
}

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些概念错误;如果您希望自己的IntroductionViewController封装视频,则应将AVPlayerViewController添加为子级:

import UIKit
import AVKit

class IntroductionViewController: UIViewController {

    var avPlayer: AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()
        playVideo()
    }

    func playVideo() {

        let filepath: String? = Bundle.main.path(forResource: "videoplayback", ofType: "mp4")
        let fileURL = URL.init(fileURLWithPath: filepath!)

        avPlayer = AVPlayer(url: fileURL)
        let avPlayerController = AVPlayerViewController()
        avPlayerController.player = avPlayer
        avPlayerController.view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)

        // Turn on video controlls
        avPlayerController.showsPlaybackControls = true

        // play video
        avPlayerController.player?.play()
        self.view.addSubview(avPlayerController.view)
        self.addChild(avPlayerController)
    }
}

但是您的IntroductionViewController也可以扩展AVPlayerViewController:

import UIKit
import AVKit

class AVViewController: AVPlayerViewController {

    var avPlayer: AVPlayer!

    override func viewDidLoad() {
        super.viewDidLoad()

        setupAndPlay()
    }

    func setupAndPlay() {
        let filepath: String? = Bundle.main.path(forResource: "videoplayback", ofType: "mp4")
        let fileURL = URL.init(fileURLWithPath: filepath!)

        // Setup AVPlayer
        avPlayer = AVPlayer(url: fileURL)
        self.player = avPlayer
        self.view.frame = CGRect(x: 44, y: 128, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)

        // Turn on video controlls
        self.showsPlaybackControls = true

        // play video
        self.player?.play()
    }
}

选择您的方式:)