Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 播放结束后无法重放视频_Ios_Swift_Error Handling - Fatal编程技术网

Ios 播放结束后无法重放视频

Ios 播放结束后无法重放视频,ios,swift,error-handling,Ios,Swift,Error Handling,我使用以下代码显示两个不同的视频源作为背景。“selectVideo”(SegmentedControl)用于选择视频。问题就在下面 @IBAction func selectVideo(sender: AnyObject) { if self.Controller.selectedIndex == 1 { self.videoBackgroundCustomer() } if self.Controller.selectedIndex == 0 {

我使用以下代码显示两个不同的视频源作为背景。“selectVideo”(
SegmentedControl
)用于选择视频。问题就在下面

@IBAction func selectVideo(sender: AnyObject) {
    if self.Controller.selectedIndex == 1 {
        self.videoBackgroundCustomer()
    }

    if self.Controller.selectedIndex == 0 {
        self.videoBackgroundDriver()
    }
}

    func videoBackgroundDriver() {
        //Load video background.
        let videoURL: NSURL = NSBundle.mainBundle().URLForResource("background_video_2", withExtension: "mp4")!

        player = AVPlayer(URL: videoURL)
        videoBackground()
    }

    //Video background customer
    func videoBackgroundCustomer() {
        //Load video background.
        let videoURL: NSURL = NSBundle.mainBundle().URLForResource("background_video_1", withExtension: "mp4")!

        player = AVPlayer(URL: videoURL)
        videoBackground()
    }

    //Vieobackground-code part 2, provides with less code.
    func videoBackground() {
        player?.actionAtItemEnd = .None
        player?.muted = true

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

        playerLayer.frame = view.frame

        view.layer.addSublayer(playerLayer)

        player?.play()

        //call loop video
        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.loopVideo), name: AVPlayerItemDidPlayToEndTimeNotification, object: player!.currentItem)
    }

    //Loop video
    func loopVideo() {
        player?.seekToTime(kCMTimeZero)
        player?.play()
    }
问题:上次视频本应结束时,视频将重新启动。而不是在最近的视频结束时。


如何在上次播放视频结束后使其重复播放?感谢

在对问题进行调查之后,首先查看并返回该方法的值

- (void)seekToTime:(CMTime)time;
方法,您正在使用return
void
,无法与
CMTime

要解决您的问题,请尝试以下解决方案:

首先,您需要向您的班级订阅通知,该通知将指示视频结束

NSNotificationCenter.defaultCenter().addObserver(self,selector: "itemDidReachEnd:",
    name: AVPlayerItemDidPlayToEndTimeNotification,
    object: player.currentItem)
然后定义处理此通知的方法

func itemDidReachEnd(notification: NSNotification) {
    player.seekToTime(kCMTimeZero)
    player.play()
}

在本例中,您正在跟踪视频何时结束并重新开始。

方法
seekToTime
的返回类型是
void
而不是
CMTime
。不知何故,我现在又遇到了一个bug,我已经更新了这个问题。谢谢