【问题标题】:Video as background视频作为背景
【发布时间】:2016-01-14 00:57:17
【问题描述】:

我正在尝试添加视频作为背景,但它不起作用。

这是我正在使用的代码:

import UIKit
import MediaPlayer
import AVFoundation
import AVKit
import MediaPlayer

class WelcomeViewController: UIViewController {

    let moviePlayerController = AVPlayerViewController()
    var aPlayer = AVPlayer()
    func playBackgroundMovie(){
        if let url = NSBundle.mainBundle().URLForResource("WelcomeVideo", withExtension: "mp4") {
            aPlayer = AVPlayer(URL: url)
        }
        moviePlayerController.player = aPlayer
        moviePlayerController.view.frame = view.frame
        moviePlayerController.videoGravity = AVLayerVideoGravityResizeAspectFill
        moviePlayerController.view.sizeToFit()
        moviePlayerController.videoGravity = AVLayerVideoGravityResizeAspect
        moviePlayerController.showsPlaybackControls = false
        moviePlayerController.view.userInteractionEnabled = false
        aPlayer.play()
        view.insertSubview(moviePlayerController.view, atIndex: 0)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.moviePlayerController.view.backgroundColor = UIColor.grayColor()

        playBackgroundMovie()
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "didPlayToEndTime", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
    }

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

    func didPlayToEndTime(){
        aPlayer.seekToTime(CMTimeMakeWithSeconds(0, 1))
        aPlayer.play()
    }
}

当我运行我的应用程序时,它崩溃为一行:

aPlayer = AVPlayer(URL: url!)

我还在我的项目中添加了“WelcomeVideo.mp4”:

正如您在图片上看到的,“WelcomeVideo.mp4”就在当前视图控制器类的旁边...我在这里做错了什么?

【问题讨论】:

    标签: ios swift avplayer avplayerviewcontroller


    【解决方案1】:

    自己修好了!忘了我必须将它添加到 Build Phases 中的 Copy Bundle Resorces

    【讨论】:

    • 我只是在我的回答中写了这个:) 无论如何,你应该记住的另一件事是,当你不完全确定返回的值不是 nil 时,你不应该使用强制展开( URLForResource 函数返回 NSURL? 这是可选的,可能是 nil)。您应该使用可选绑定来以安全的方式访问可选。
    • @Whirlwind - 你的意思是像我现在做的那样吗? (检查问题以获取更新的代码)
    • @Whirlwind 我快速提问。 WelcomeVideo.mp4 只是一个视图,没有声音,但是当我从音乐应用程序或 Spotify 播放音乐时,我当前的音乐会在播放器显示时停止。我该如何预防呢?
    • 是的,这就是您应该检查和解开可选值的方式。尽管如此,如果让我将所有内容都包含在内,因为如果没有视频文件,则根本没有理由初始化和设置播放器。而且,关于声音......您可能会通过设置 AVAudioSession 并将类别设置为 AVAudioSessionCategoryAmbient 来解决问题。但是你真的应该问另一个问题,因为这完全是另一个话题。
    【解决方案2】:
    if let filePath = Bundle.main.path(forResource: "small", ofType: ".mp4") {
        let filePathURL = NSURL.fileURL(withPath: filePath)
        let player = AVPlayer(url: filePathURL)
        let playerController = AVPlayerViewController()
        playerController.view.backgroundColor = UIColor.red
        playerController.player = player
        self.present(playerController, animated: true) {
            player.play()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      相关资源
      最近更新 更多