【发布时间】:2018-01-18 03:42:04
【问题描述】:
在我的 Ios 应用程序的登录屏幕中,我试图显示一个视频。我在堆栈溢出上看到了一个很好的例子,说明如何做这样的事情。我自己尝试了代码并遇到了错误。我打算在原始帖子上评论我的错误,但我的帐户没有足够的声誉来这样做。当我在模拟设备上运行时,我的代码返回给我一个错误,上面写着:
致命错误:在展开可选值时意外发现 nil
(lldb)
我设法使用断点找到错误,第 12 行是avPlayer = AVPlayer(url: video!)
虽然这是我的完整代码:
import AVFoundation
import UIKit
class VideoBackgroundController: UIViewController {
var avPlayer: AVPlayer!
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false
override func viewDidLoad() {
let video = Bundle.main.url(forResource:"space", withExtension: "mp4")
//This is where my the error happens
avPlayer = AVPlayer(url: video!)
avPlayerLayer = AVPlayerLayer(player: avPlayer)
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
avPlayer.volume = 0
avPlayer.actionAtItemEnd = .none
avPlayerLayer.frame = view.layer.bounds
view.backgroundColor = .clear
view.layer.insertSublayer(avPlayerLayer, at: 0)
NotificationCenter.default.addObserver(self,
selector: #selector(playerItemDidReachEnd(notification:)),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
object: avPlayer.currentItem)
}
func playerItemDidReachEnd(notification: Notification) {
let p: AVPlayerItem = notification.object as! AVPlayerItem
p.seek(to: kCMTimeZero)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
avPlayer.play()
paused = false
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
avPlayer.pause()
paused = true
}
}
我的项目文件中确实有一个名为“space”的 mp4 视频。
任何解释如何或为什么会发生这种情况以及我可以采取哪些措施来解决这个问题将不胜感激。
【问题讨论】:
-
请检查您的视频文件 space.mp4 是否列在 Build Phase -> Copy Bundle Resources 下。如果未列出,请添加并运行您的代码。
-
将视频添加到您的 Xcode 项目您的项目根目录 > 您的目标 > 构建阶段 > 复制捆绑资源。您的视频必须在此处。如果不是,那么您应该使用加号按钮添加它
-
@Surjeet 那是问题谢谢!
标签: ios xcode swift3 uiviewcontroller uikit