在背景swift 3中播放视频

时间:2016-10-04 19:15:53

标签: ios swift3

你好我试图在后台播放视频,但它给出了一个错误,错误是“在展开一个可选值时意外发现nil”,我已经在Bundle中设置了视频,如果需要则选择复制

这是我的代码

<body id="login">
<div class="col-xs-12">
    <div class="text-center logo-image">
        <h1><i class="fa fa-rebel fa-4x"></i></h1>
    </div>
</div>
<div class="">
    <!--<i class="fa fa-envelope"></i><input type="email" />
    <div id="login-email"></div>-->
</div>

请任何机构都有这方面的想法,谢谢

6 个答案:

答案 0 :(得分:3)

  
      
  1. 首先,将视频文件拖放到项目中。      
        
    1. 然后导入AVFundation。
    2.   
    3. 添加示例:var player:AVPlayer?
    4.   
    5. @IBOutlet weak var videoView:UIView! - 将故事板中的视图连接到VC类。
    6.   
    7. 之后,将此代码粘贴到ViewController中。
    8.   
    9. 在viewDidLoad()
    10. 中调用“playBackgoundVideo()”   
  2.   
private func playBackgoundVideo() {
    if let filePath = Bundle.main.path(forResource: "your_video_here", ofType:"mp4") {
        let filePathUrl = NSURL.fileURL(withPath: filePath)
        player = AVPlayer(url: filePathUrl)
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.videoView.bounds
        playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: nil) { (_) in
            self.player?.seek(to: kCMTimeZero)
            self.player?.play()
        }
        self.videoView.layer.addSublayer(playerLayer)
        player?.play()
    }
}

这是快捷的4.0 它的工作原理^ __ ^

答案 1 :(得分:2)

我遇到了类似的问题,并按照Rick的回答说明解决了这个问题。 我的问题是我没有捆绑资源中的视频文件。 检查您的视频文件是否列在项目的Build Phases下的Copy Bundle Resources中。如果没有,请使用+按钮在其中添加文件。 您也可能在代码中缺少avPlayer.play()语句。

答案 2 :(得分:2)

我还试图在登录页面的视图控制器的后台播放视频。我认为主要问题是您使用的语法已被弃用。

您的代码可能如下所示:

import UIKit
import AVKit
import AVFoundation

class ViewController: UIViewController {

@IBOutlet var blackOverlay: UIView!

// init video background and its path
var player: AVPlayer?
let videoURL: NSURL = Bundle.main.url(forResource: "videoName", withExtension: "mp4")! as NSURL

override func viewDidLoad() {
    super.viewDidLoad()

    // Adds a black overlay to the looped video in question

    blackOverlay.alpha = 0.75;
    blackOverlay.layer.zPosition = 0;

    // begin implementing the avplayer 

    player = AVPlayer(url: videoURL as URL)
    player?.actionAtItemEnd = .none
    player?.isMuted = true

    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    playerLayer.zPosition = -1

    playerLayer.frame = view.frame

    view.layer.addSublayer(playerLayer)

    player?.play()

    // add observer to watch for video end in order to loop video

    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.loopVideo), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.player)

    // if video ends, will restart  

    func playerItemDidReachEnd() {
        player!.seek(to: kCMTimeZero)
    }

}
    // maybe add this loop at the end, after viewDidLoad
   // func loopVideo() { player?.seek(to: kCMTimeZero) player?.play()}}

请告诉我这是否有帮助!

答案 3 :(得分:1)

  1. 将视频文件拖放到您的项目中。

  2. 然后导入AVFundation

  3. 列表项

  4. @IBOutlet弱变量videoView:UIView!,@ IBOutlet弱变量标签:UILabel!,@ IBOutlet弱变量图像:UIImageView!,@ IBOutlet弱变量loginBtn:UIButton!

  5. 将故事板中的视图连接到VC类。

  6. ,然后将给定代码粘贴到ViewController中,并在 viewDidLoad()中调用 playVideo()函数。

    func playVideo(){ 保护让路径= Bundle.main.path(forResource:“ intro”,ofType:“ mp4”)else { 返回 } 让玩家= AVPlayer(URL:URL(fileURLWithPath:path)) 让playerLayer = AVPlayerLayer(player:player) playerLayer.frame = self.view.bounds playerLayer.videoGravity = .resizeAspectFill self.videoLayer.layer.addSublayer(playerLayer) player.play() videoLayer.bringSubviewToFront(image) videoLayer.bringSubviewToFront(label) videoLayer.bringSubviewToFront(loginBtn) videoLayer.bringSubviewToFront(signupBtn) }

答案 4 :(得分:0)

如果urlnil且视频已成功复制到捆绑包中,则可能出现的问题是区分大小写。确保文件名使用正确的大小写。 iOS设备文件系统区分大小写,而iPhone模拟器则不区分大小写。

答案 5 :(得分:0)

当我尝试播放视频背景时,我遇到了同样的问题。我认为这是视频资源的问题。

我这样解决了这个问题。

当您拖动视频时,应检查“如果需要复制项目”和“添加到目标”。 或者您可以右键单击项目导航器,单击“添加”以添加资源。